Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/320.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/arduino/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何更改变量的值_Python - Fatal编程技术网

Python 如何更改变量的值

Python 如何更改变量的值,python,Python,我在更改变量值(食堂)以使其从3运行到0时遇到了一些麻烦。我不确定为什么每次按“1”键时,食堂的值都不小于2。当玩家按3次“1”键时,如何使食堂的值变为零 # Global Variables km_travelled = 0 thirst = 0 camel_tiredness = 0 natives_travelled = -20 # Player always starts 20 km away from player once player reaches checkpoint def

我在更改变量值(食堂)以使其从3运行到0时遇到了一些麻烦。我不确定为什么每次按“1”键时,食堂的值都不小于2。当玩家按3次“1”键时,如何使食堂的值变为零

# Global Variables
km_travelled = 0
thirst = 0
camel_tiredness = 0
natives_travelled = -20 # Player always starts 20 km away from player once player reaches checkpoint

def introduction():
    print("Welcome to Camel!")
    print("You have stolen a camel to make your way across the great Mobi desert")
    print("The natives want their camel back and are chasing you down! Survive ")
    print("your desert trek and out run the natives \n \n")

def choices():
    print("1. Drink from your canteen.")
    print("2. Ahead at moderate speed.")
    print("3. Ahead at full speed.")
    print("4. Stop for the night.")
    print("5. Status check.")
    print("9. Quit \n")

def questions(answer):
    canteen = 3
    if "9" in answer:
        print("GAME EXIT.")
        done = True
    elif "1" in answer:
        print("You drank from the canteen")
        canteen = canteen - 1
        print(canteen)


def main():
    #  Global variables
    done = False

    # Go through once
    introduction()
    while not done:
        choices()
        answer = input("What is your choice? ")
        questions(answer)

if __name__ == '__main__':
    main()

这是因为您在
questions()
循环的开头定义了
食堂=3
。您应该使用全局变量定义它一次

#全局变量
行驶公里数=0
口渴=0
骆驼疲劳=0
当地人旅行=-20#玩家到达检查站后,总是从距离玩家20公里的地方出发
食堂=3#在此处定义为全局变量
###截断的###
问题(答案):
#食堂=3#此处不作定义
全球餐厅#但请参考此处的顶级餐厅
如果回答为“9”:
打印(“游戏退出”)
完成=正确
以“1”作为答复:
打印(“你在食堂喝酒”)
食堂=食堂-1
印刷品(食堂)
def main():
#全局变量
完成=错误
#经历一次
导言()
虽然没有这样做:
选择()
回答=输入(“您的选择是什么?”)
问题(答案)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

这是因为您在
问题()循环的开头定义了
食堂=3
。您应该使用全局变量定义它一次

#全局变量
行驶公里数=0
口渴=0
骆驼疲劳=0
当地人旅行=-20#玩家到达检查站后,总是从距离玩家20公里的地方出发
食堂=3#在此处定义为全局变量
###截断的###
问题(答案):
#食堂=3#此处不作定义
全球餐厅#但请参考此处的顶级餐厅
如果回答为“9”:
打印(“游戏退出”)
完成=正确
以“1”作为答复:
打印(“你在食堂喝酒”)
食堂=食堂-1
印刷品(食堂)
def main():
#全局变量
完成=错误
#经历一次
导言()
虽然没有这样做:
选择()
回答=输入(“您的选择是什么?”)
问题(答案)
如果uuuu name uuuuuu='\uuuuuuu main\uuuuuuu':
main()

食堂
变量的作用域是局部的,与
问题
函数相关。每次运行该函数时,它都会重新初始化为值3。因为
if
语句在函数中只执行一次,所以它永远不会低于2

解决这个问题的一个简单方法是将
食堂
作为一个全局变量,尽管这不是一个好的做法。将
globa=3
放在任何函数之外,与其他globa变量放在一起。从
questions
函数中删除该语句,并将其替换为
global
,以便Python在函数中更改全局变量时知道您引用的是全局变量

注意,您将遇到与<代码>完成的变量类似的问题,并且可以考虑将此全局化。


最后,正如我所暗示的,全局变量在任何不是非常简单的程序中都是不好的,因为它们会受到程序中所有内容的影响,因此很难弄清楚发生了什么。有许多替代方法可以用来构造避免全局变量的复杂程序,我鼓励大家看看。使用类(在内部而不是全局保存状态)是Python非常支持的一种方法。

函数的
食堂
变量的作用域是局部的,即
问题
函数。每次运行该函数时,它都会重新初始化为值3。因为
if
语句在函数中只执行一次,所以它永远不会低于2

解决这个问题的一个简单方法是将
食堂
作为一个全局变量,尽管这不是一个好的做法。将
globa=3
放在任何函数之外,与其他globa变量放在一起。从
questions
函数中删除该语句,并将其替换为
global
,以便Python在函数中更改全局变量时知道您引用的是全局变量

注意,您将遇到与<代码>完成的变量类似的问题,并且可以考虑将此全局化。


最后,正如我所暗示的,全局变量在任何不是非常简单的程序中都是不好的,因为它们会受到程序中所有内容的影响,因此很难弄清楚发生了什么。有许多替代方法可以用来构造避免全局变量的复杂程序,我鼓励大家看看。使用类(在内部而不是全局保存状态)是Python非常支持的一种方法。

因为while语句的计算结果为true,所以在每次选择之后,值3都被分配给变量flunch。您可以将
食堂=3
替换为
全局食堂
,并将变量食堂分配到其功能之外。 如果要避免使用全局,可以使用以下示例中的字典:

def questions(answer, canteen):
    if "9" in answer:
        print("GAME EXIT.")
        done = True
    elif "1" in answer:
        print("You drank from the canteen")
        canteen['c'] = canteen['c'] - 1
        print(canteen['c'])


def main():
    #  Global variables
    done = False
    canteen = {'c': 3}
    # Go through once
    introduction()
    while not done:
        choices()
        answer = input("What is your choice? ")
        questions(answer, canteen)


由于while语句的计算结果为true,因此在每次选择之后,值3都被分配给变量flunch。您可以将
食堂=3
替换为
全局食堂
,并将变量食堂分配到其功能之外。 如果要避免使用全局,可以使用以下示例中的字典:

def questions(answer, canteen):
    if "9" in answer:
        print("GAME EXIT.")
        done = True
    elif "1" in answer:
        print("You drank from the canteen")
        canteen['c'] = canteen['c'] - 1
        print(canteen['c'])


def main():
    #  Global variables
    done = False
    canteen = {'c': 3}
    # Go through once
    introduction()
    while not done:
        choices()
        answer = input("What is your choice? ")
        questions(answer, canteen)


我编辑我的答案,我只是忘了添加全局声明。我编辑我的答案,我只是忘了添加全局声明