<p>您当前的实现存在许多问题</p>
<ol>
<li><p>您正在使用<strong>递归</strong>重复获取输入,这意味着您有一个函数(<code>flcr</code>,<code>amount1</code>),该函数在提供有效输入之前一直调用自身。虽然这<em>可以</em>用于用户输入,但通常是不必要的。有更好的方法来<a href="https://stackoverflow.com/q/23294658/2745495">ask for user input until they give a valid response</a>,作为<a href="https://stackoverflow.com/questions/61552249/how-to-subract-from-a-global-variable-that-is-equal-to-an-input#comment108880582_61552249">mentioned in the comments</a>,使用循环代替</p></li>
<li><p>代码<code>x-1</code>不更新<code>x</code>。它实际上什么也不做,因为结果没有存储在任何地方。如果您使用的是IDE或linter,它可能会警告您这是一个“无意义的语句”。你可能想要的是<code>x = x - 1</code>。
<a href="https://i.stack.imgur.com/LCXBJ.png" rel="nofollow noreferrer"><img src="https://i.stack.imgur.com/LCXBJ.png" alt="enter image description here"/></a></p></li>
<li><p>您正在使用globals来跟踪需要输入多少权重以及到目前为止输入了多少权重。虽然这个<em>也可以</em>工作,但它同样是不必要的。将飞行机组成员的数量作为函数参数传递会更简单</p></li>
</ol>
<p>下面是一个解决方案,它用<code>while</code>循环替换递归调用,并从一个函数中获取人数,然后将结果传递给另一个函数以获取权重:</p>
<pre><code>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)
</code></pre>
<p>以下是示例输出:</p>
<pre class="lang-none prettyprint-override"><code>$ 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]
</code></pre>
<p>我知道你的问题是关于如何根据用户输入更新全局变量。。。但是我认为您有一个全局<code>x</code>,因为您使用的是递归调用。一个更干净的解决方案是去掉递归和全局变量</p>