Я пытаюсь вызвать функцию, которая содержится внутри другой функции. Я знаю, что каждая из внутренних функций работает по отдельности, потому что я тестировал их перед объединением в rollDice()
.
Когда я пытаюсь запустить код, он постоянно говорит мне, что практически каждая переменная (d20
, d10
и т. д.) не определена, хотя у меня запущена функция rollDice()
.
Как я могу заставить свою внутреннюю функцию (d6(roll6)
) выводить значение, которое ей было присвоено после использования функции rollDice(roll)
?
def diceRoll(roll):
def d20(roll20):
import random
roll20 = random.randint(1,20)
print("The roll is ", roll20)
return roll20
def d12(roll12):
import random
roll12 = random.randint(1,12)
print("The roll is ", roll12)
return roll12
def d6(roll6):
import random
roll6 = random.randint(1,6)
print("The roll is ", roll6)
return roll6
####### example of other part of code
def generateDungeon():
diceRoll(roll)
numberOfRooms = roll6
print("The roll was: ", roll6)
if numberOfRooms > 1:
print("There are ", numberOfRooms, "rooms in this dungeon.")
else:
print("There is only 1 room in this dungeon.")
return numberOfRooms
Выполняя внешнюю функцию, вы не выполняете ни одну из внутренних функций. В любом случае их переменные вне области видимости.
Если вы действительно хотите использовать функцию в функции (что, кстати, в данном случае необязательно), вы можете сделать свой код гораздо более кратким, используя замыкание. Кроме того, проще импортировать пакеты один раз вверху:
import random
def diceRoll(roll):
def helper():
r = random.randint(1, roll)
print("The roll is", r)
return r
return helper
Затем, чтобы использовать это, вызовите возвращаемое значение diceRoll
:
numberOfRooms = diceRoll(6)()
Обратите внимание, что все это можно сделать так:
def diceRoll(roll):
r = random.randint(1, roll)
print("The roll is", r)
return r
И называется так:
numberOfRooms = diceRoll(6)
Вы не включили свои звонки на
d6()
и т. д., поэтому мы не можем понять, что происходит. Кроме того, нам нужно будет увидеть точный текст сообщения об ошибке. И в качестве примечания к стилю вам не нужно определятьroll6
и т. д. В качестве параметров.