【问题标题】:trying to get return info from one function to another试图从一个函数获取返回信息到另一个函数
【发布时间】:2013-04-08 23:06:23
【问题描述】:

我正在尝试使用函数(这显然是我天生不擅长的东西)并试图从第一个获取返回语句信息,然后在第二个中使用它。两者都用于掷骰子,所以第一个函数是返回第一组,然后在第二个函数中使用,让用户可以选择重新掷骰。我在这个实现中做错了什么,它没有识别原始的模组列表?

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

【问题讨论】:

  • die1, die2, ... 是在rollDie函数中定义的,所以你不能在reRoll1函数中引用它们,请修正你的代码格式。

标签: python function return


【解决方案1】:

为了能够引用从 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 等。

希望对你有帮助

【讨论】:

    【解决方案2】:

    您没有得到想要的行为,因为 die1die2... 不是全局变量,但您将它们视为全局变量。

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

    要获得您想要的,您应该使用返回值,或者通过在与调用reRoll1() 相同的缩进级别上编写定义来全局初始化变量

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2023-01-28
      • 1970-01-01
      • 2016-08-15
      • 1970-01-01
      • 2015-07-16
      • 2021-08-14
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多