#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
andsmallest
из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()
andmin()
?2. @Nicarus исправлено использовать = — infinity в качестве начального значения, чтобы избежать, если
3. @Nicarus я только начинаю, я знаю только пару функций, но спасибо за информацию, которую я прочитал о них, и я использовал их так же, как в приведенном выше коде.
4. @sabbahillel большое спасибо, я пошел читать о max, min и inf и не только исправил проблему, но и изучил еще несколько встроенных функций.
5. @RicardoFernandes Если вам нравится ответ, нажмите кнопку «Принять» или проголосуйте за него. Спасибо.