некоторые упражнения на python и нуждаются в некотором вводе

#python #python-2.7

#python #python-2.7

Вопрос:

Это упражнение.

Напишите программу, которая неоднократно запрашивает у пользователя целые числа, пока пользователь не введет «готово». После ввода «готово» выведите наибольшее и наименьшее из чисел. Если пользователь вводит что-либо, отличное от действительного числа, перехватите его с помощью try / except и отправьте соответствующее сообщение и проигнорируйте число. Введите числа из книги для задачи 5.1 и сопоставьте желаемый результат, как показано на рисунке.

Результат должен быть:

 Invalid input  
Maximum is 7  
Minimum is 4
  

Мой код:

 largest = None
smallest = None
while True:
    num = raw_input("Enter a number: ")        
    if num == "done" : break
    if len(num) < 1 : break        
    try :
        num = int(num)
    except :    
        print "Invalid input"
        continue        
print "Maximum", largest
print "Minimum", smallest
  

Почему программа не выводит самые большие и самые маленькие?
Что я делаю не так?

Комментарии:

1. Поскольку они оба неподвижны None , вы никогда не переназначаете их. Объясните свой код резиновой утке, и вы скоро увидите проблему.

2. Вы не сохраняете числа и никогда не меняете переменные largest and smallest из None .

3. Любопытно — если вы только сейчас изучаете Python, почему вы не изучаете самую последнюю версию (3.5)?

4. @Nicarus ну, курс преподается в этой версии, и интерпретатор кода python, который использует учитель, также находится в более старой версии.

5. Используйте infinity для max и min, чтобы принудительно использовать always true для первого числа и разрешить запуск как на python 2, так и на 3. Смотрите Ответ ниже.

Ответ №1:

Вы никогда не вводили значение для наибольшего и наименьшего.

 largest = float('-inf') # Always smaller than any number
smallest = float('inf') # Always larger than any number
while True:
    num = raw_input("Enter a number: ")        
    if num == "done" : break
    if len(num) < 1 : break        
    try :
        num = int(num)
    except :    
        print "Invalid input"
        continue
    # set largest and smallest
    # initial inf forces first entry to reset the value
    largest = max(largest, num)
    smallest = min(smallest, num)
    # Because None is always smaller than any integer

print "Maximum", largest
print "Minimum", smallest
  

Комментарии:

1. Некоторые неприятные блоки if / then — почему бы просто не использовать max() and min() ?

2. @Nicarus исправлено использовать = — infinity в качестве начального значения, чтобы избежать, если

3. @Nicarus я только начинаю, я знаю только пару функций, но спасибо за информацию, которую я прочитал о них, и я использовал их так же, как в приведенном выше коде.

4. @sabbahillel большое спасибо, я пошел читать о max, min и inf и не только исправил проблему, но и изучил еще несколько встроенных функций.

5. @RicardoFernandes Если вам нравится ответ, нажмите кнопку «Принять» или проголосуйте за него. Спасибо.