Перерыв не останавливается простой, пока петли Python - PullRequest
1 голос
/ 12 апреля 2019

Питон нуб здесь.Я пытаюсь создать список с числами, которые вводит пользователь, а затем выполнить несколько простых вычислений с числами в списке в конце цикла while.Цикл while не прерывается при вводе «done».Он просто печатает «Неверный ввод».

list = []
while True:
    try:
        n = int(input('Enter a number: '))
        list.append(n)
    except:
        print('Invalid input') 
    if n == 'done':
        break

print(sum.list())
print(len.list())
print(mean.list())

Ответы [ 4 ]

1 голос
/ 12 апреля 2019

Вы должны проверить, можете ли вы превратить ввод в целое число, прежде чем добавлять в свой список. Вы можете использовать команду try / кроме того, чтобы поймать, является ли входная переменная конвертируемой в целое число. Если это не так, вы можете проверить done и выйти.

list = []
while True:
    n = input('Enter a number: ')
    try:
        n = int(n)
        list.append(n)
    except ValueError:
        if n == 'done':
            break
        print('Invalid input') 

total = sum(list)
length = len(list)
mean = total/length

print('sum:', total)
print('length:', length)
print('mean:', mean)

Пример взаимодействия

Enter a number: 12
Enter a number: 3
Enter a number: 4
Enter a number:
Invalid input
Enter a number: 5
Enter a number:
Invalid input
Enter a number: done
sum: 24
length: 4
mean: 6.0
1 голос
/ 12 апреля 2019

Это связано с тем, что функция int () пытается преобразовать ваш ввод в целое число, но выдает ошибку, потому что строка «done» не может быть преобразована в целое число. Другой момент заключается в том, что sum (), mean () и len () являются функциями, а не атрибутами списков . Кроме того, mean () не является встроенной функцией в python, ее необходимо импортировать с numpy . Попробуйте это так:

from numpy import mean
list = []
while True:
    try:
        n = input('Enter a number: ')
        list.append(int(n))
    except:
        if n!='done':
            print('Invalid input') 
    if n == 'done':
        break

print(sum(list))
print(len(list))
print(mean(list))
1 голос
/ 12 апреля 2019

Вы должны будете отделить получаемый пользовательский ввод от проверки «выполнено» от преобразования в число и добавления в список. И вам нужно будет проверить «готово», прежде чем преобразовать входные данные в целое число.

Попробуйте что-то вроде этого:

list_of_numbers = []

while True:
    user_input = input("Enter a number or 'done' to end: ")

    if user_input == "done":
        break

    try:
        number = int(user_input)

    except ValueError:
        print("invalid number")
        continue

    list_of_numbers.append(number)

print(list_of_numbers)

# further processing of the list here
0 голосов
/ 12 апреля 2019

Если пользователь вводит done, вы попытаетесь преобразовать в int, что вызовет исключение, которое вы затем поймаете.

Вместо этого выполните проверку перед тем, как попытается преобразовать его в целое число.

...