Ce repo comporte plusieurs enoncés d'exercices. Pour chaque enoncé, plusieurs reponses sont proposées. Celles-ci comportent une ou plusieurs erreurs, sont soit mal optimisées (ou comportent des mauvaises pratiques), soit carrément buggées.
L'idée est donc de chercher à imaginer si chacune de ses reponses planterai, auquel cas quelle serait l'erreur ? Dans le cas contraire donnerai-t-elle le resultat attendu, et comment pourrai-t-elle être corrigée ou ameliorée ? Quelle partie au contraire est juste (vous pouvez procéder par elimination à partir de ce que vous jugez correct). (Certaines reponses contiennent parfois plusieurs erreurs.
Prenez le temps de bien reflechir avant d'executer du code. Dans la mesure du possible faites des tests pour verifier vos solutions proposées.
pwd notebookstouch /notebooksmkdir -p../notebookscd ../notebookscd .reboot_python.ipynb notebookscp reboot_python.ipynb /notebooksmv ../reboot_python.ipynb notebooks.3 Verifiez qu'aucune libaririe n'est installée sur l'environnement virtuel actuel (créé au préalable)
import .pip requestspip import requestspython get "requests".5 Supprimez le fichier notebook vierge à la racine du repo (attention à pas supprimer celui que vous avez complété)
rm -r ./notebooksmv .reboot_python ..rm .reboot_python.ipynbpip versionpip --version.7 Ouvrez le jupyter notebook dans le dossier notebooks (de maniere à ce qu'il s'ouvre dans votre navigateur)
La plupart des enoncés suivants traitent de Python et peuvent etre exécutés dans ce notebook.
open reboot_python.ipynbfrom requests as requestspip install requestslist(1, -3, "jeanmich", -6, "toto", 8, 2)list = [1, -3, "jeanmich", -6, "toto", 8, 2]my_list = list[1, -3, "jeanmich", -6, "toto", 8, 2]my_list["jeanmich"] = 10my_list.drop("jeanmich") = "10"remove(my_list[5])numbers.del[2]my_list[6] = -15my_list[6] = -1513. Editez cette liste pour convertir la string "10" en nombre (sans toucher au chiffre 1 de votre clavier)
my_list.drop() = 1014. A partir de votre premiere liste, créer une seconde liste qui ne contient que les valeurs positives de la première
my_second_list = []
for number in my_list:
if (number > 0):
return my_second_list.append(number)my_second_list = []
for number in my_list:
if number > 0:
my_second_list += 1
else:
nonei = 0
for number in my_list
if my_list[i] > 0:
my_second_list.append(my_list[i])
i += 1
else:
i += 1for number in my_list:
if number > 0
my_list[i].append(1)
else:
returnmy_second_list = [number for number if number > 0 in my_list]my_second_list = [x: x>=0 for x in numbers]my_second_list = [number > 0 for number in my_list]def my_fonction:
print(number*number*number*number)def my_fonction()
return(number**4)17. Testez cette fonction en lui passant le chiffre n de votre choix et en affichant le resultat sous la forme :
A la puissance 4 le nombre 3 est égal à 81
def my_fonction(number):
print(number**4)n = 4
n_power = my_function(n)
print('A la puissance 4 le nombre {n} est égal à {n_power}')n = 4
n_power = my_function(n)
print(f'A la puissance 4 le nombre {n} est égal à {n_power}')
# indice : refactorisez18. Toujours en list comprehension, créez une troisieme list qui contiendrait toutes les puissances 4 de votre seconde liste
my_third_list = [number**4 for number in my_list]19. Si my_function() comportait des operations plus complexes, comment pourriez vous l'integrer à votre liste comprehension ?
Pas de réponse proposée
20. Requetez l'API suivante afin d'avoir un json dans un dictionnaire
my_dict = requests.get(https://opengraph.lewagon.com/?url=https://www.lewagon.com)data = [{key:value}]
response = request.get("https://opengraph.lewagon.com/?url=https://www.lewagon.com").json()
result = response.append(data)
### 21. Affichez les clés de ce dictionnaire. Quel est le type de la valeur associée à la clé `data` ? Combien d'éléments comporte-t-elle ?
*Pas de réponse proposée*
### 22. Depuis votre notebook, installez la librairie beautifulsoup4 (4.11.1) et importez là
```python
pip import beautifulsoupcurl beautifulsoup4l'anglais (lol)
24. Telechargez le code html de cette page dans un fichier page.html
curl https://recipes.lewagon.com/(Oui oui, ça n'a servi à rien de le télécharger)
del page.html26. Telechargez le code html de cette page, cette fois ci dans un objet beautifulsoup, assigné dans une variable
code_html = BeautifulSoup.get("https://recipes.lewagon.com/")html = requests.get("https://recipes.lewagon.com/").json()
data = BeautifulSoup(html)Indice
Balise de la premiere recette :
<div class="recipe-details">[...]</div>
Balise contenant le titre :
<p class="recipe-name">10 Minute Brownies</p>
url = https://recipes.lewagon.com/
html = requests.get(url).text
data = BeautifulSoup(html, "html.parser")
data = data.find_all('div', class_= 'recipe-details')[0])
data.find('p', class_= 'recipe-name').stringSolution
# avec l'import
from bs4 import BeautifulSoup
url = "https://recipes.lewagon.com/"
html = requests.get(url).text
data = BeautifulSoup(html, "html.parser")
data = data.find_all('div', class_= 'recipe-details')[0]
print(data.find('p', class_= 'recipe-name').string)28. Adaptez et packagez le code précedent en une fonction qui permettrai de recuperer n'importe quelle titre de recette en donnant son numero
(1 -> premier titre, 3 -> troisieme titre etc)
Solution
def scrape_title(recipe_number):
url = "https://recipes.lewagon.com/"
html = requests.get(url).text
data = BeautifulSoup(html, "html.parser")
data = data.find_all('div', class_= 'recipe-details')[recipe_number-1]
return data.find('p', class_= 'recipe-name').stringPas de réponse proposée
Pas de réponse proposée
Pas de réponse proposée
Pas de réponse proposée
Pas de réponse proposée
Pas de réponse proposée
Pas de réponse proposée