首页 > 解决方案 > 如何根据用户输入的数量更新全局变量?

问题描述

我正在尝试列出去外太空旅行的重量清单。我试图显示有多少人来的方式是这样的:

def flcr():
    try:
        Value1 = int(input())
    except ValueError:
        print("That was an incorrect format! Try again.")
        flcr()
    global x
    x = Value1

然后用户必须一一输入权重。这是我尝试过的:

def enter():
    print("How much is each flight crew member bringing on the trip? Enter one entry at a time, this will be Earth weight.")
    amount1()
def amount1():
    try:
        if x > 0:
            equation1 = [float(input())]
            x - 1
            amount1()
        else:
            print(listFlcr)
    except ValueError:
        print("That was an incorrect format! Try again.")
        enter()

但是,当我输入权重时,我假设x只是重置自身而不是将自身减去 1,因此我的输入是无限的。我想要一个代码,可以让我输入正确数量的重量,所以如果我说有 2 个人来,我只能输入两个重量。

如果有人可以帮助我,我将不胜感激!

标签: pythonuser-input

解决方案


您当前的实施存在许多问题。

  1. 您正在使用递归来重复获取输入,这意味着您有一个函数 ( flcr, amount1) 在提供有效输入之前会调用自身。虽然这可能适用于用户输入,但通常是不必要的。有更好的方法来询问用户输入,直到他们给出有效的响应,并且如评论中所述,使用循环代替。

  2. 代码x-1不更新x。它实际上什么都不做,因为结果没有存储在任何地方。如果您使用的是 IDE 或 linter,它可能会警告您这是一个“毫无意义的声明”。你可能想要的是x = x - 1. 在此处输入图像描述

  3. 您正在使用全局变量来跟踪需要输入多少权重以及到目前为止输入了多少。虽然这可以工作,但它又是不必要的。将飞行机组成员的数量作为函数参数传递会更简单。

这是一个解决方案,它用循环替换递归调用while并从一个函数获取人数,然后将结果传递给另一个函数以获取权重:

def get_num_people():
    while True:
        try:
            return int(input("How many people are coming? "))
        except ValueError:
            print("That was an incorrect format! Try again.")

def get_weights(num_weights):
    print("How much is each flight crew member bringing on the trip?")
    all_weights = []
    while len(all_weights) < num_weights:
        try:
            all_weights.append(int(input()))
        except ValueError:
            print("That was an incorrect format! Try again.")

    print(all_weights)
    return all_weights

num_people = get_num_people()
get_weights(num_people)

这是示例输出:

$ python test.py
How many people are coming? 2
How much is each flight crew member bringing on the trip?
12
33
[12, 33]

$ python test.py
How many people are coming? 3
How much is each flight crew member bringing on the trip?
abc
That was an incorrect format! Try again.
89
def
That was an incorrect format! Try again.
100
4
[89, 100, 4]

我知道您的问题是关于如何根据用户输入更新全局变量,......但我认为您有一个全局变量,x因为您使用的是递归调用。一个更干净的解决方案是摆脱递归和全局变量。


推荐阅读