si j'ai ceci:
def oneFunction(lists):
category=random.choice(list(lists.keys()))
Word=random.choice(lists[category])
def anotherFunction():
for letter in Word: #problem is here
print("_",end=" ")
J'ai déjà défini lists
, donc oneFunction(lists)
fonctionne parfaitement.
Mon problème appelle Word
à la ligne 6. J'ai essayé de définir Word
en dehors de la première fonction avec la même définition Word=random.choice(lists[category])
, mais cela fait Word
toujours le même, même si j'appelle oneFunction(lists)
.
Je veux pouvoir, chaque fois que j'appelle la première fonction puis la seconde, avoir un Word
différent.
Puis-je faire cela sans définir que Word
en dehors de la oneFunction(lists)
?
Oui, vous devriez penser à définir à la fois votre fonction dans une classe et à faire de Word un membre. C'est plus propre
class Spam:
def oneFunction(self,lists):
category=random.choice(list(lists.keys()))
self.Word=random.choice(lists[category])
def anotherFunction(self):
for letter in self.Word:
print("_",end=" ")
Une fois que vous avez créé une classe, vous devez l'instancier en un objet et accéder aux fonctions membres.
s = Spam()
s.oneFunction(lists)
s.anotherFunction()
Une autre approche serait de faire en sorte que oneFunction
retourne le Word afin que vous puissiez utiliser oneFunction
au lieu de Word dans anotherFunction
>>> def oneFunction(lists):
category=random.choice(list(lists.keys()))
return random.choice(lists[category])
>>> def anotherFunction():
for letter in oneFunction(lists):
print("_",end=" ")
Et enfin, vous pouvez également faire anotherFunction
, accepter Word comme paramètre que vous pouvez passer du résultat de l'appel de oneFunction
>>> def anotherFunction(words):
for letter in words:
print("_",end=" ")
>>> anotherFunction(oneFunction(lists))
Tout dans python est considéré comme un objet, les fonctions sont donc également des objets. Vous pouvez donc également utiliser cette méthode.
def fun1():
fun1.var = 100
print(fun1.var)
def fun2():
print(fun1.var)
fun1()
fun2()
print(fun1.var)
L'option la plus simple consiste à utiliser une variable globale. Créez ensuite une fonction qui obtient le mot actuel.
current_Word = ''
def oneFunction(lists):
global current_Word
Word=random.choice(lists[category])
current_Word = Word
def anotherFunction():
for letter in get_Word():
print("_",end=" ")
def get_Word():
return current_Word
L'avantage de cela est que vos fonctions sont peut-être dans différents modules et doivent accéder à la variable.
def anotherFunction(Word):
for letter in Word:
print("_", end=" ")
def oneFunction(lists):
category = random.choice(list(lists.keys()))
Word = random.choice(lists[category])
return anotherFunction(Word)