繁体   English   中英

while 循环到 append list or break based on value type and user input

[英]While loop to append list or break based on value type and user input

我正在尝试编写一个 python 程序,要求用户输入 integer 或“q”(不区分大小写)以退出,然后将采用任何整数并打印最后 5 的总和。

我已经创建了一个持有列表和一些计数器和测试变量来帮助解决这个问题,但我似乎无法让它按照我想要的方式工作。 我不断收到各种错误。

我目前拥有的代码是

my_list = []
quit = 0
i = 0

while quit == 0:
    value = eval(input("Please enter an integer or the letter 'q' to quit:  ")
    if value.isdigit()
        my_list.append(value)
        i += 1
        print(sum(my_list[-1] + my_list[-2] + my_list[-3] + my_list[-4] + my_list[-5]))
    if value == q:
        quit += 1
    elif 
        print("Your input is not an integer, please try again")

这是my_list.append(value)行的返回和无效语法错误。

我想要做的是允许我输入任何 integer,如果它是 integer 进行循环测试,如果是,则将其添加到持有列表并打印出列表中最近 5 个条目的总和(如果少于 5 个,则全部)。 如果我输入“q”或“Q”,我希望循环中断并且程序结束。

您的代码中有很多错误。

固定代码:

while quit == False:
    value = input("Please enter an integer or the letter 'q' to quit:  ")
    if value.isdigit():
        my_list.append(int(value))
        i += 1
        print(sum(my_list[-5:]))
    elif value == 'q' or value == 'Q':
        quit = True
    else:
        print("Your input is not an integer, please try again")

笔记:

  • 不要使用eval ,它可能很危险。 当您检查该值是否包含数字时,您可以安全地使用int来转换该值。

  • 如果你想用'q'或'Q'退出,你必须检查两者。

  • 如果您的列表不包含至少 5 个元素,您必须对列表进行切片以避免异常。

你可以试试这个:*它更短,更易读

my_list = []

while True:
    x = input("Please enter an integer or the letter 'q' to quit: ")
    if x == 'q':
        break
    else:
        my_list.append(int(x))


output_sum = sum(my_list[-5:])
print(output_sum)

输入

1
2
3
4
5
q

Output

15

您应该检查输入是否包含至少 5 位数字。 您可以通过首先检查输入字符串的长度然后在字符串上调用isnumeric()来执行此操作。

然后您只需要对字符串进行切片(最后 5 个字符)并对各个值求和,如下所示:

while (n := input("Please enter an integer of at least 5 digits or 'q' to quit: ").lower()) != 'q':
    if len(n) > 4 and n.isnumeric():
        print(sum(int(v) for v in n[-5:]))

...或者如果您想输入多个值,则:

numbers = []

while (n := input("Please enter a number or 'q' to quit: ").lower()) != 'q':
    if n.isnumeric():
        numbers.append(n)
    else:
        print(f'{n} is not numeric')

if len(numbers) < 5:
    print(f'You only entered {len(numbers)} numbers')
else:
    print(sum(int(v) for v in numbers[-5:]))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM