代码之家  ›  专栏  ›  技术社区  ›  data_life

While循环根据值类型和用户输入附加列表或中断

  •  1
  • data_life  · 技术社区  · 3 年前

    我正试图编写一个python程序,要求用户输入一个整数或“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) 线

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

    3 回复  |  直到 3 年前
        1
  •  1
  •   Corralien    3 年前

    您的代码中有许多错误。

    固定代码:

    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个元素,则必须对列表进行切片以避免出现异常。

        2
  •  1
  •   Avad    3 年前

    您可以尝试以下情况: *它更短,可读性更强

    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
    

    输出

    15
    
        3
  •  0
  •   SIGHUP    3 年前

    您应该检查输入是否至少包含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:]))