Coursera - Python для всех - отл. 5.2

Для следующей проблемы:
Напишите программу, которая постоянно запрашивает у пользователя целые числа, пока пользователь не введет done.
После ввода «готово» распечатайте наибольшее и наименьшее из чисел.
Если пользователь вводит что-либо, кроме действительного числа, поймайте его с помощью try / except, выведите соответствующее сообщение и проигнорируйте число.
Случаи ввода:
Введите 7, 2, bob, 10 и 4 и сравните результат, приведенный ниже.

Моя программа неправильно показывает ответ. В чем тут проблема?

while True:
inp = input("Enter number: ")

if inp == "done":
    print("done")
    break
try:
    inp_data = int(inp)
except:
    print("Invalid input")
if smallest is None:
    smallest = inp_data
elif inp_data < smallest:
    smallest = inp_data
elif inp_data > largest:
    largest = inp_data
    
print("largest", largest)
print("smallest", smallest)

Вывод:
Недействительный ввод, максимум 10, минимум 2.

Вывод программы


person user3404895    schedule 10.06.2020    source источник
comment
Предложение: не тестируйте только с заданной последовательностью входов. Попробуйте множество тестовых примеров. Например, попробуйте ввести только выполненное, попробуйте ввести только одно число, попробуйте ввести только неверный ввод, попробуйте ввести числа, которые только увеличиваются или уменьшаются. Если тест не проходит, исправьте сценарий для этого случая, а затем проверьте еще раз.   -  person Dennis Sparrow    schedule 10.06.2020
comment
Ваш отступ отключен, все в цикле while должно иметь отступ от оператора while True   -  person Sam    schedule 10.06.2020
comment
Мне кажется, что Maximum is 10, Minimum is 2 правильно, для 7, 2, bob, 10, 4. Нет?   -  person Sam    schedule 10.06.2020
comment
данный выходной раздел - это только ожидаемый результат. но мой ввод не отображается таким образом.   -  person user3404895    schedule 10.06.2020


Ответы (3)


При печати вывода вы упускаете несколько операторов.
У меня сработал следующий код.

largest = None
smallest = None

while True:
    num = input("Enter a number: ")
    if num == "done":
        break
    try:
        #print(num)
        num = int(num)
        if largest is None or largest < num:
            largest = num
        elif smallest is None or smallest > num :
            smallest = num
    except ValueError:
        print("Invalid input")
        continue

print("Maximum is", largest)
    
print("Minimum is", smallest)

Проверено и успешно работает.

person Harshit Ruwali    schedule 18.08.2020

Попробуйте этот код и поблагодарите меня позже

largest = None
smallest = None
while True:
    val = input("Enter a number: ")
    if val == "done":
        break
    try:
        val = int(val)
        if largest is None or val > largest:
            largest = val
        elif smallest is None or smallest > val:
            smallest = val
    except:
        print("Invalid input")
        continue
print("Maximum is", largest)
print("Minimum is", smallest)
person Harrison Ofordu    schedule 15.09.2020

Если вы включите операторы elif, они не будут проверяться, если условие в операторе if истинно, поэтому, если бы у меня был elif smallest ... он никогда не был бы проверен, дав в результате «Minimus is none».

largest = None
smallest = None

while True:
    enter_num = input('Enter a number ')
    if enter_num == 'done':
        break
    try:
        num = int(enter_num)
        if largest is None or largest < num:
            largest = num
        if smallest is None or smallest > num:
             smallest = num
    except:
        print('Invalid input')
        continue
 
print('Maximum is', largest)
print('Minimum is', smallest)
person Yulia B    schedule 31.01.2021