【问题标题】:Python: minus 1 from int in functionPython:函数中的 int 减 1
【发布时间】:2014-11-14 17:17:55
【问题描述】:

如何从函数中的 INT 中减去 1?

这就是我正在尝试的:

try:
    lives
except NameError:
    lives = 6
else:
    lives = lives-1
 print("\nWrong!\nYou have " +str(lives)+ " lives remaining\n")

但它不起作用。

生命总是在 6 岁 :(

有什么想法吗?

更新:

def main():

    used = []
    print(blanks)
    choice = input("\nEnter a letter:")

            lives -= 1
            print("\nWrong!\nYou have " +str(lives)+ " lives remaining\n")
            used.append(choice)
            main()

【问题讨论】:

  • 怎么样:lives -= 1
  • 您提到了一个功能,但没有在问题中显示。如果 print 语句在函数外部,但您的 try 语句在函数内部,则可能存在范围问题。
  • 整数是不可变的; lives = lives - 1 将在当前范围内重新分配名称 lives,但不会更改底层对象。
  • 如果我在函数中定义它会被覆盖,如果我在函数之外定义它会告诉我UnboundLocalError: local variable 'lives' referenced before assignment
  • 你应该return来自函数的新值,并在调用范围lives = some_func(lives)中重新分配名称。研究 Python 范围。

标签: python function int


【解决方案1】:

您看到 6 的真正原因是抛出了 NameError,因此您的 else 子句从未真正执行过

NameError: name 'lives' is not defined

【讨论】:

  • 就是这样,如果 nameError 仅在变量被分配一次而不是再次被分配时抛出。
【解决方案2】:

如果之前没有定义生活,那么try: lives 将始终将您带到除外部分。
如果您在此代码之前(通过为其分配一些东西)或在 try 部分中定义生命,您将看到 -1 的作用。

try:
    lives = 1
except NameError:
    lives = 6
else:
    lives = lives-1
print lives

将输出 0

还有:

lives = 1
try:
    lives
except NameError:
    lives = 6
else:
    lives = lives-1
print lives

编辑:
对于您的评论,这里有一些示例代码,可以完成您可能想要实现的目标,即猜字母游戏。希望这会对您有所帮助。

def main():
    # The setup
    right_answer = "a"
    lives = 6

    # The game
    while lives > 0:
        choice = raw_input("Enter a letter:")
        if choice == right_answer:
            print "yay, you win!"
            break
        else:
            lives -= 1
            print "nay, try again, you have", lives, "lives left"
    else:
        print "you lose"

# This will call our function and run the game
if __name__ == "__main__":
    main()

** 从 python 2.7 编写,对于 python 3,打印需要括号。

【讨论】:

  • 如果我在函数中定义它会被覆盖,如果我在函数之外定义它会告诉我 UnboundLocalError: local variable 'lives' referenced before assignment
  • 确实必须在函数(或你想要的范围)中进行罚款,至于覆盖它,这取决于你对它的使用。如果你覆盖它会,如果你不它不会。假设您正在尝试将用户“生命”设置为他们可以松开的次数的游戏,您可能希望首先为其分配数字(例如“生命 = 3”,然后开始从中减去。
  • 对不起,重点是,为了从变量中减去,需要在要减去的范围内定义和分配它。
  • 你能给我代码吗?我尝试查找范围,因为我目前是一个超级初学者,只有 14 岁,我觉得在查看如何做时我会学到更多......
  • 代码很大程度上取决于你到底想做什么。别担心,学习这些东西的最好方法是尝试、陷入困境并寻找不同的解决方案。 :)
【解决方案3】:

我只需要在函数外部定义变量,然后放入:

global lives 在函数中。

工作完成。

【讨论】:

    猜你喜欢
    • 2015-03-08
    • 1970-01-01
    • 2018-12-01
    • 1970-01-01
    • 2014-03-24
    • 2018-04-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多