Issue
if I have this:
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=" ")
I have previously defined lists
, so oneFunction(lists)
works perfectly.
My problem is calling word
in line 6. I have tried to define word
outside the first function with the same word=random.choice(lists[category])
definition, but that makes word
always the same, even if I call oneFunction(lists)
.
I want to be able to, every time I call the first function and then the second, have a different word
.
Can I do this without defining that word
outside the oneFunction(lists)
?
Solution
One approach would be to make oneFunction
return the word so that you can use oneFunction
instead of word
in anotherFunction
:
def oneFunction(lists):
category = random.choice(list(lists.keys()))
return random.choice(lists[category])
def anotherFunction():
for letter in oneFunction(lists):
print("_", end=" ")
Another approach is making anotherFunction
accept word
as a parameter which you can pass from the result of calling oneFunction
:
def anotherFunction(words):
for letter in words:
print("_", end=" ")
anotherFunction(oneFunction(lists))
And finally, you could define both of your functions in a class, and make word
a member:
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=" ")
Once you make a class, you have to instantiate an instance and access the member functions:
s = Spam()
s.oneFunction(lists)
s.anotherFunction()
Answered By – Abhijit
Answer Checked By – Candace Johnson (BugsFixing Volunteer)