【问题标题】:How can I fix a reference before assignment in Python [duplicate]如何在Python中分配之前修复参考[重复]
【发布时间】:2019-04-26 23:08:23
【问题描述】:

我正在尝试制作带有命令提示界面的轮盘游戏。轮盘赌是关于投注的,因此游戏的很大一部分是关于你输赢的钱。我试图做一个变量来告诉玩家在我再次下注之前我有多少钱。我还没有完成游戏,因此只有 3 个选项可用,但我想在继续之前修复这个错误。 我不断收到错误“UnboundLocalError:分配前引用的局部变量'money'” 这是代码: 从随机导入 randint 从时间导入睡眠 from os 导入系统

def how_much():
    print("How much money do you want to place on this bet?")
    global amount
    amount = int(input())


def game():
    def bet():
        bet = input("What type of bet do you want to make?\n")
        how_much()
        #Start Bet type 1
        if bet == "1":
            roll = randint(1,36)
            if roll <= 3:
                print("You bet correcty!")
                money = money + amount
                game()
            else:
                print("You lose!")
                money = money - amount
                game()
        #Start bet type 2
        elif bet == "2":
            roll = randint(1, 36)
            if roll <= 4:
                print("You bet correcty!")
                money = money + amount
                game()
            else:
                print("You lose!")
                money = money - amount
                game()
        #Start bet type 3
        elif bet == "3":
            roll = randint(1, 36)


        else:
            print("Invalid argument.")
            bet()


    global money
    money = int(1000)
    print("Welcome to Roulette")
    print("Your Wallet has", money, "Euros in it.")
    print("1. First 3 Numbers\n2. First 4 Numbers\n3. One Number\n4. Upper-half or Lower-half\n5. Dozens\n6. Odd or Even\n7. Column\n8. Line\n9. 2 Lines\n10. Red or Black\n11. 2 Neighbors\n12. 4 Neighbors\n0. Exit")
    bet()


game()

【问题讨论】:

  • money 是您的 bet 函数中的局部变量。老实说,在这里使用全局变量根本不是一个好主意,你应该从根本上改变你的方法
  • 诸如“全球货币”之类的行的目标是什么? Python 不需要将变量声明为全局变量来创建它们,而只需从局部范围内引用全局变量。这基本上是另一种说法,如果在大多数程序中负责任地传递变量,则几乎不需要使用全局变量关键字。
  • 你建议我怎么做?
  • 将值作为参数传递给您的函数,并让这些函数返回您希望在外部可用的值。你为什么要定义bet inside game?尽管通常在其他函数中定义函数可能很有用,但您在这里没有利用任何这些原因。
  • @ParitoshSingh 如果不将变量设为全局变量,我该怎么做,我想在多个定义中使用它。

标签: python python-3.x variables reference variable-assignment


【解决方案1】:

您的代码的问题是您忘记将global money 放入您的bet 函数中。您已经在 game 函数中声明了 global money,但 bet 函数不知道这个变量。只需将global money 放在bet 函数的第一行

【讨论】:

  • 我就是这么做的,它运行正常,但是每次再次出现菜单时,钱包里的钱都停留在1000
  • 那是因为你放了global money , money = int(1000)我建议你把这个赋值里面去掉,放到游戏功能之外
猜你喜欢
  • 2012-11-28
  • 1970-01-01
  • 2019-08-24
  • 1970-01-01
  • 2023-01-27
  • 1970-01-01
  • 1970-01-01
  • 2019-11-27
  • 1970-01-01
相关资源
最近更新 更多