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

2024-09-30 08:19:56 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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你知道吗


Tags: 函数inputreturnifrandomelserandintdie2
2条回答

您没有获得所需的行为,因为die1die2...不是全局变量,但您将它们视为全局变量。你知道吗

换句话说,reRoll1()内的die1rollDie()内的die1不同。你知道吗

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

为了能够引用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等。你知道吗

希望这有帮助

相关问题 更多 >

    热门问题