试图从一个函数到另一个函数获取返回信息

时间:2013-04-08 23:06:23

标签: python function return

我正在尝试使用函数(我本来就很难看出它是显而易见的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

2 个答案:

答案 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)

您没有获得所需的行为,因为die1die2...不是全局变量,但您正在对它们进行处理。

换句话说,die1中的reRoll1()die1中的rollDie()不同。

要获得所需内容,您应该使用返回值,或者通过在与调用reRoll1()

相同的缩进级别上写入定义来全局初始化变量