@doc_wittman: il faut te placer dans ton environnement virtuel si tu veux lancer ton programme
@GabzzGabzz
Il faut sans doute rajouter le chemin de scrapy à la variable d'environnement PATH
touch n'existe pas en natif sous windows (créer un fichier via le menu Fichier > nouveau)
Merci je dois donc mettre tout les fichiers de mon projet dans venv ?
(venv) C:\Users\matte\PycharmProjects\scrapMachine\venv\Scripts>python3 urlScrap.py
Traceback (most recent call last):
File "C:\Users\matte\PycharmProjects\scrapMachine\venv\Scripts\urlScrap.py", line 2, in <module>
from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'
(venv) C:\Users\matte\PycharmProjects\scrapMachine\venv\Scripts>python3 urlScrap.py
python3: can't open file 'C:\Users\matte\PycharmProjects\scrapMachine\venv\Scripts\urlScrap.py': [Errno 2] No such file or directory
(venv) C:\Users\matte\PycharmProjects\scrapMachine\venv\Scripts>cd ..
(venv) C:\Users\matte\PycharmProjects\scrapMachine\venv>python3 urlScrap.py
Traceback (most recent call last):
File "C:\Users\matte\PycharmProjects\scrapMachine\venv\urlScrap.py", line 2, in <module>
from bs4 import BeautifulSoup
ModuleNotFoundError: No module named 'bs4'
pourtant j'ai essayé en me positionnant dans l'environnement virtuel ça ne fonctionne toujours pas
Je viens demander votre aide !! Je suis à la toute fin du projet "démarrer votre projet avec Python", tout fonctionne (scrappy, le récolte des données sur les sites web...) sauf que dans le code du programme, je ne comprends pas pourquoi mais les seules données que j'arrive à afficher dans la fenêtre "run" sont celles du fichier "character.json". Je ne sais pas comment me débloquer pour que le programme fonctionne correctement. Voici le code :
"# -*- coding: utf8 -*-
import json import random
# Give a Json file and return a List from Tools.scripts.make_ctype import values
def read_values_from_json(character): values = [] with open('character.json') as f: data = json.load(f) for entry in data: values.append(entry['character']) return values
def read_values_2_from_json(quote): values_2 = [] with open('quote.json') as g: data_2 = json.load(g) for entry in data_2: values.append(entry['quote']) return values_2 #la fonction du dessus a été rajouté par moi en pensant que c'était ce qu'il fallait faire mais là je sèche !! # Give a json and return a list def clean_strings(sentences): cleaned = [] # Store quotes on a list. Create an empty list and add each sentence one by one. for sentence in sentences: # Clean quotes from whitespace and so on clean_sentence = sentence.strip() # don't use extend as it adds each letter one by one! cleaned.append(clean_sentence) return cleaned
# Return a random item in a list def random_item_in(object_list): rand_numb = random.randint(0, len(object_list) - 1) return object_list[rand_numb]
# Return a random value from a json file def random_value(): all_values = read_values_from_json('quote') clean_values = clean_strings(all_values) return random_item_in(clean_values)
##################### # ##### QUOTES ####### ##################### # Gather quotes from San Antonio def random_quote(): return random_value()
###################### # ### CHARACTERS ###### ###################### # Gather characters from Wikipedia def random_character(): return random_value()
###################### # ### INTERACTION ###### ###################### # Print a random sentence. def print_random_sentence(): rand_quote = random_quote() rand_character = random_character() print(">>>> {} a dit : {}".format(rand_character, rand_quote))
def main_loop(): while True: print_random_sentence() message = ('Voulez-vous voir une autre citation ?' 'Pour sortir du programme, tapez [B].') choice = input(message).upper() if choice == 'B': break # This will stop the loop! if __name__ == '__main__':
le probleme c'est que tu passes un paramètre à la fonction read_from_json() mais que tu n'utilises pas ce paramètre, donc tu lis tout le temps le même fichier. et random_character() et random_quote() appellent la même fonction random_value()
def fonction(path: str, s: str = ";") -> dict:
with open(path) as f:
for i in f.readlines():
print(i.strip("\n").split(s))
fonction("exemple.csv")
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
explication: fonction est une fonction qui attend 2 paramètres de type string:
le 1er est le chemin d'un fichier,
le 2nd optionnel est le séparateur de champ pour les lignes du fichier (par défaut c'est un point-virgule)
fonction est censé renvoyer un dictionnaire (il manque la ligne de retour et la fabrication du dictionnaire)
pour le code de la fonction, on ouvre le fichier, on le lit ligne par ligne, et pour chaque ligne, on affiche la liste contenant chacun des champs de la ligne (séparés par le séparateur s (";" par défaut)
Donc au lieu d'afficher (ou en plus), il faudrait sans doute créer le dictionnaire à retourner
Je suis au dernier Quizz de l'initiation à l'analyse de donnée
Bon, je trouve qu'il y a un gros gap entre la formation et ce Quizz, le niveau de difficulté explose.
Mais bon, je joue le jeu et essaye qqch. Je suis à l'exercice avec les pieces, l'exercice A conciste à lancer une piece pile ou face ou pile à une probabilité de 49%
du coup j'ai naïvement tenté ça :
from random import *
partie = 10 #nombre de partie jouée
#fonction permetant le tirage aléatoire
def programme():
n = random()
if n < 0.49:
coin = 'pile'
else :
coin = 'face'
return coin
#fonction pour inserer le tirage dans une liste
def collecting():
tirage = []
with programme() as f:
data = f
for entry in data:
tirage.append(entry[coin])
return tirage
#fonction pour jouer n partie
def lunchgame():
for n in range(partie):
print(collecting())
lunchgame()
J'ai essayé de bricoler avec les cours de Céline.
J'ai une erreur :
Traceback (most recent call last):
File "C:/Users/Anwender/PycharmProjects/Epargne/pieceA3.py", line 28, in <module>
lunchgame()
File "C:/Users/Anwender/PycharmProjects/Epargne/pieceA3.py", line 26, in lunchgame
print(collecting())
File "C:/Users/Anwender/PycharmProjects/Epargne/pieceA3.py", line 17, in collecting
with programme() as f:
AttributeError: __enter__
L'idée était de créer une fonction qui stock le tirage dans une liste
puis ensuite je vais essayer de créer une fonction qui compte dans cette liste le nombre de fois que j'ai pile ou que j'ai face.
Mais je sèche et un petit coup de main ne serait pas de refus
J'ai commencé et presque terminé le premier cours débutant pour Python, où on apprend les bases de chez bases (avec Céline). Je n'ai jamais codé auparavant, si ce n'est sur Scratch (lol). Il y a quelque chose que je ne comprends pas :
Premièrement :
Admettons que j'ai défini une liste :
liste = [
'a',
'b',
'c'
]
Et que je définis cette fonction :
def f(x):
for n in x:
y = n.capitalize()
print (y)
Si je fais :
f(liste)
Python me renvoie :
A
B
C
Jusque là ok, je découvre ce que fait Python.
Maintenant admettons que je définisse cette fonction :
def g(x):
for n in x:
y = n.capitalize()
return y
Et que je fasse :
g(liste)
Là, Python me répond :
'A'
Mais vu que lorsque je lui envoie :
liste
Il me répond :
['a', 'b', 'c']
Je m'attendais à recevoir :
['A', 'B', 'C']
Du coup : pourquoi ça fait pas ça ?
Deuxièmement :
Quand je fais :
print(liste)
Python me répond :
['a', 'b', 'c']
Et comme je viens de le dire, quand je fais :
f(liste)
Python me répond :
A
B
C
Et pas :
['A', 'B', 'C']
Là aussi : pourquoi ?
Bon, désolé si mes questions sont chiantes mais j'ai horreur de ne pas comprendre et là je vois qu'il y a un truc que je ne pige pas. Merci par avance pour votre attention ! =)
J'ai crée un programme qui détermine si une année est bissextile ou non. Le problème c'est que j'ai entrer un bloc Try afin de gérer les exceptions et ce dernier ne fonctionne pas. Fin pas du premier coups🤔...Je vous laisse essayer voici le programme:
# -*- Encoding:Latin-1 -*-
import os
anne=int(input("saisir l'année: "))
if anne%4 ==0 and anne%100!=0 or (anne%400==0):
print("l'anné est bisextile")
else:
print("l'anné n'est pas bisextile")
try:
anne=int(input("saisir l'année: "))
except ValueError:
print("Erreur lors de la conversion de l'année.")
except TypeError:
priunt(" impossible de convertir ce type de valeur.")
except NameError:
print(" La variable n'a pas était definie ")
except ZeroDivisionError:
print("impossible de diviser par zero")
os.system("pause")
Je suis débutant tout comme toi, j'ai suivi le cours de celine et je suis à la fin de celui d'alexi.
Donc je suis un gros noob mais j'espère quand même pouvoir t'aider.
Alors j'ai trouvé deux solutions, la première est de moi, avec un code naïf et pas opti j'imagine. la seconde c'est une fonction que j'ai trouvé en cherchant sur internet, je la comprend pas mais elle fonctionne lol
Pour resoudre ton problème j'ai fais ça :
liste = [
'a',
'b',
'c'
]
i = len(liste)
def g():
N_liste = [] #Je crée une liste vièrge
del_liste = liste #Je recupère la liste pour la modifier dans cette fonction
x = 1
while x <= i: #je crée une boucle qui s'arrete en fontion de la taille de la liste
N_liste.append(del_liste[0].capitalize()) # a chaque boucle j'ajoute à la nouvelle liste(N_liste) la première entrée de la liste(liste) et je met chaque entrée en majuscule
del del_liste[0] #a chaque boucle je supprime la première entrée de la la liste(liste)
x +=1
print(N_liste)
g()
Je t'ai mis un peu de detail à coté en éspérant t'avoir aider
Sinon le code le plus opti que j'ai trouvé sur internet :
Pourquoi faire un with programme() ? Ta fonction programme n'est pas du tout adaptée à cela.
@Ybdernims Un return permet de sortir immédiatement de la fonction en cours, donc il n'y aura jamais plusieurs return exécutés dans une même fonction.
Si tu veux renvoyer une liste de valeurs, il te faut donc… renvoyer une liste de valeurs.
Tu pourrais par exemple construire pas à pas une liste x2 et la renvoyer à la fin :
def g(x):
x2 = []
for n in x:
y = n.capitalize()
x2.append(y)
return x2
Ce qui peut d'ailleurs être réduit en :
def g(x):
return [n.capitalize() for n in x]
Mais tu auras toujours le comportement décrit dans ta deuxième partie, parce que tu renverras une 2ème liste plutôt que de modifier l'actuelle.
Parce que quand tu fais y = n.capitalize(), tu crées juste une nouvelle chaîne de caractères à partir de nmais tu ne modifies rien d'existant, ni ta chaîne de caractères n ni ta liste x ne sont modifiées (les chaînes de caractères ne sont d'ailleurs pas modifiables en Python).
Donc tout ce que tu fais est perdu si tu n'enregistres pas le résultat.
Ainsi, si la solution de renvoyer une nouvelle liste ne te convient pas, tu peux toujours modifier la liste actuelle en réassignant les éléments :
def g(x):
for i, n in enumerate(x):
y = n.capitalize()
x[i] = y
return x
Mais est-ce vraiment le comportement que tu souhaites ?
--> En fait je ne voulais rien faire de particulier, ça m'agaçait de ne pas comprendre le problème. Cela dit tout n'est pas tout à fait clair pour moi encore. Quand je fais :
y = n.capitalize()
avant de faire :
return y
python considère que n ne correspond que à la première chaine de caractère de ma liste ? Et c'est pour ça qu'il me renvoit que :
'A'
?
Mais du coup ma question reste la même dans l'autre sens, pourquoi est-ce lorsque j'utilise "print" et pas "return", là il me sort :
A
B
C
si pour lui n c'est juste la première chaine de caractère ?
Mais en fait, si je comprends bien, c'est pas qu'il considère que n est juste le premier élément de ma liste, si je comprends bien ta réponse, en fait python exécute bien ce que je lui demande avec "return", sauf qu'il s'arrête immédiatement après la première application car "return" fait tout de suite sortir de la fonction (et du coup python ne va pas appliquer à chaque élément de ma liste), ce qui n'est pas le cas avec "print". C'est bien ça ?
Deuxième partie :
J'arrive à la fin du cours de Céline, je suis dans la partie "BONUS".
Je ne comprends pas (car cela n'est pas expliqué), la différence entre :
with open("x") as f:
et directement
open("x")
Et plus globalement je ne comprends pas à quoi sert :
with
Pour "as" je pense avoir saisi même si je ne suis pas très sûr
1. le return étant dans la boucle for, on sort dès la première itération (on ne poursuit pas la boucle pour les autres éléments de la liste) (ta 2ème conclusion est la bonne donc)
2. with open(x) as f: permet de ne pas gérer la fermeture du fichier (dès qu'on sort du bloc "with open" le fichier est fermé automatiquement
si tu fais f=open(x), tu ouvres le fichier et ne sera fermer que si l'on fait un f.close()
J'hallucine comment la dernière partie du cours avec Scrapy est bâclée. Quand on est utilisateur Windows, on y va à l'aveuglette je ne suis même pas certain que cela fonctionne. Pour ceux qui l'ont fait ou qui savent de quoi il s'agit, cette partie est-elle utile à suivre pour un apprentissage perso ?
Par ailleurs, j'aurais une petite question (je ne sais si cela est le lieu, si ce n'est pas le cas, mes excuses). Je suis intéressé par la formation de développeur application en Python. Je n'ai eu globalement que de bons échos de OpenClassRoom. Néanmoins, un dev qui s'y connait un peu, et dont un ami suit cette formation, m'a fait part du fait que la formation n'était pas très à jour. Je suis donc à la recherche d'avis bienveillants à ce sujet
Scrapy est un module spécifique à un domaine, donc non ce n'est pas une obligation de l'apprendre.
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard) La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
Cette phrase n'est suivie d'aucun corrigé ni lien pour télécharger un notebook...
Voici un exemple corrigé pour vous guider.
De même ce lien ne permet pas de récupérer le même nombre d'individus que le formateur (j'en ai 120), est-ce une simple mise à jour du site de la Ville de Paris ?
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)
entwanne — @entwanne — Un zeste de Python — La POO en Python — Notions de Python avancées — Les secrets d'un code pythonique
Celui qui trouve sans chercher est celui qui a longtemps cherché sans trouver.(Bachelard)
La connaissance s'acquiert par l'expérience, tout le reste n'est que de l'information.(Einstein)