Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/333.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/8/design-patterns/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,我需要知道如何将无效的\u input\u count传递给run\u todo函数,因为它只是出错并显示未解析的引用“invalid\u input\u count” import sys todo_list = [ "go shopping", "do homework", "do excercise", ] invalid_input_count = 0 def run_todo(): wan

我需要知道如何将无效的\u input\u count传递给run\u todo函数,因为它只是出错并显示未解析的引用“invalid\u input\u count”

import sys

todo_list = [
    "go shopping",
    "do homework",
    "do excercise",
]

invalid_input_count = 0

def run_todo():
    wanna_run = input("Would you like to run the to do list programme?\nYes or No? ")
    if wanna_run.lower() == "yes":
        print(*todo_list, sep = ", ")
        add_or_remove = input("Would you like to add or remove an instruction?\nadd or remove?")

    elif wanna_run.lower() == "no":
        print("See you later!")
        sys.exit()

    else:
        invalid_input_count += 1
        while invalid_input_count <= 3:
            print("Invalid input! You have " + str(3-int(invalid_input_count)) + " attempts left.")
            run_todo()
        else:
            print("Too many invalid inputs!\nShutting down...")
            sys.exit()

run_todo()
导入系统 待办事项列表=[ “去购物”, “做作业”, “做运动”, ] 无效的\u输入\u计数=0 def run_todo(): 想要运行=输入(“您想运行待办事项列表程序吗?\n是还是否?”) 如果想要运行。lower()=“是”: 打印(*待办事项列表,sep=“,”) 添加\或\删除=输入(“是否要添加或删除指令?\n添加或删除?”) elif want_run.lower()=“否”: 打印(“待会儿见!”) sys.exit() 其他: 无效的\u输入\u计数+=1
当输入无效时,需要将变量作为参数传递给函数

def run_todo(invalid_input_count):
如果您想更改变量以在函数外部使用,您只需返回变量即可

或者,如果只在run_todo()函数中使用变量,则可以在函数中定义该变量


调用函数时,请确保包含要传入的变量:

run_todo(invalid_input_count)

在函数中修改全局变量时,必须指定它的全局变量

def run_todo():
    global invalid_input_count
或者,考虑函数的外观,直接在函数中声明变量即可

def run_todo():
    invalid_input_count = 0

但这不会改变全局变量。

我建议您这样做以减少混淆

import sys

todo_list = [
    "go shopping",
    "do homework",
    "do excercise",
]

invalid_input_count = 0

def run_todo():
    wanna_run = input("Would you like to run the to do list programme?\nYes or No? ")
    if wanna_run.lower() == "yes":
        print(*todo_list, sep = ", ")
        add_or_remove = input("Would you like to add or remove an instruction?\nadd or remove?")
        return False
    elif wanna_run.lower() == "no":
        print("See you later!")
        sys.exit()
    else: return True

while run_todo():
    invalid_input_count += 1
    if invalid_input_count <= 3:
        print("Invalid input! You have " + str(3-int(invalid_input_count)) + " attempts left.")
    else:
        print("Too many invalid inputs!\nShutting down...")
        sys.exit()
或者,当您选择“是”时,您可以得到:

Would you like to run the to do list programme?
Yes or No? Yes
go shopping, do homework, do excercise
Would you like to add or remove an instruction?
add or remove?add
Would you like to run the to do list programme?
Yes or No? no
See you later!
或者,当您选择“否”时,您可以得到:

Would you like to run the to do list programme?
Yes or No? Yes
go shopping, do homework, do excercise
Would you like to add or remove an instruction?
add or remove?add
Would you like to run the to do list programme?
Yes or No? no
See you later!
我在这里要做的是调用run_todo()函数,返回语句为True或False。while语句将调用该函数。计数器位于while语句中,因此不必处理跨语句传递变量的问题


@BWallDev的建议是对代码进行最小的更改,并且也会起作用。

在internet上快速搜索“将变量传递到函数+Python”。注意:注意并(通常)避免发表建议使用全局变量的帖子。这是否回答了您的问题?不不不。。。请不要。为什么鼓励使用全局变量?哦,请不要。@S3DEV没有鼓励;这是解决问题的办法。我还确保在它下面指定了绝对最优的解决方案。@Ted Klein Bergman唯一的问题是,如果我在run\u todo函数中设置了无效的\u input\u count=0,它将继续将自身重置为0,而不是添加1@BThom238是的,它会像你现在写的问题一样有效,但如果您有其他用例,则不会。我尝试了def run_todo(invalid_input_count):但它不起作用仅错误类型错误:run_todo()缺少1个必需的位置参数:“invalid_input_count”调用函数时,请确保包含参数:run_todo(invalid_input_count)谢谢您的解释非常完美!这正是我想要的答案:)太好了。如果答案为你提供了你想要的,请不要忘记投票并将问题标记为已解决