0
user_input = ''
user_values = []

while True:
    if user_input in ['q' ,'Q']:
        break

    else:
        user_input = input('input:')
        user_values.append(user_input)
print(user_values)

这段代码的问题在于,我希望它在我的列表中添加循环中输入的所有值,并在用户输入 q 或 Q 时中断,但它以某种方式将 q 添加到列表中,我该如何防止这种情况发生。

4

2 回答 2

2
if user_input == 'q' and 'Q':

这不会你认为它做的 (a),试试这个:

if user_input in ['q', 'Q']:

一个更好的方法是重组你的循环如下:

while True:
    user_input = input('input:')
    if user_input in ['q' ,'Q']:
        break
    user_values.append(user_input)

(a)这是因为and求值的方式,如果第一个子表达式为真,则整体的结果是第二个子表达式。这适用于真正的布尔值,但具有为您提供第二个子表达式的值的副作用,而不是保证的真/假值。

例如,在交互式 Python 会话中尝试以下操作:

>>> 1 == 1 and 'Q'
'Q'
于 2021-10-24T02:13:11.153 回答
0

首先,按照@paxdiablo 的回答,替换if user_input == 'q' and 'Q':if user_input in ['q', 'Q']:.

然后,移动语句user_input之前,并在子句内if打印:user_valueselse

user_input = ''
user_values = []
x = 0
while x == 0:
    user_input = input('input:')
    if user_input in ['q', 'Q']:
        break

    else:
        user_values.append(user_input)
        print(user_values)
于 2021-10-24T02:18:50.410 回答