我正在尝试使用函数(我本来就很难看出它是显而易见的XD)并且我试图从第一个获取return语句信息然后在第二个中使用它。两者都是滚动骰子,所以第一个函数是返回第一个集合,然后在第二个函数中使用它来为用户提供重新选择的选项。我在这个实现中做错了什么,它不能识别原始的模组列表?
def rollDie():
die1 = 2
die2 = 2
die3 = 2
die4 = 4
die5 = 5
dieset = [die1,die2,die3,die4,die5]
print(dieset)
return dieset
def reRoll1():
rollDie()
reroll1 = input("Would you like to reroll? Yes or No: ")
if reroll1 == "no":
dieset = [die1,die2,die3,die4,die5]
else:
count = 0
times = int(input("How many die would you like to reroll? "))
while count < times:
whichreroll = input("Reroll die: ")
if whichreroll == "1":
die1 = random.randint(1,6)
else:
die1
if whichreroll == "2":
die2 = random.randint(1,6)
else:
die2
if whichreroll == "3":
die3 = random.randint(1,6)
else:
die3
if whichreroll == "4":
die4 = random.randint(1,6)
else:
die4
if whichreroll == "5":
die5 = random.randint(1,6)
else:
die5
dieset = [die1,die2,die3,die4,die5]
count += 1
print(dieset)
return dieset
reRoll1()
它告诉我“在赋值之前引用了局部变量'die1'”但是第一个是rollDie()。如果有人能向我解释这一点,我将不胜感激:D
答案 0 :(得分:0)
能够从rollDie()引用返回的数据,你需要将它分配给一个变量,即:。
dieset = rollDie()
但是,您也遇到了问题:
if reroll1 == 'no':
dieset = [die1, die2, die3, die4, die5]
在这里,您引用变量die1,die2 ......但它们没有被分配任何值。
作为一种解决方法,您可以为这些变量分配一个任意值,比如0:
dieset = [0, 0, 0, 0, 0]
但是......然后在你的条件中,你引用变量die1,die2 ......;实际上没有分配。所以你可以忘记变量dieset的所有内容,并直接分配die1,die2 ......:
die1, die2, die3, die4, die5 = rollDie() if reroll1 == 'yes' else [0, 0, 0, 0, 0]
这样,您可以在以下条件中将这些值简单地引用为die1
等。
希望这有帮助
答案 1 :(得分:0)
您没有获得所需的行为,因为die1
,die2
,...
不是全局变量,但您正在对它们进行处理。
换句话说,die1
中的reRoll1()
与die1
中的rollDie()
不同。
要获得所需内容,您应该使用返回值,或者通过在与调用reRoll1()