Используя вашу текущую реализацию (количество проблем), вот как вы выполняете проверку:
a=0
store1=''
store2=''
while store1 !='done':
store1 = input('Enter a number: ')
if store1 == 'done':
break;
try:
int(store1)
except ValueError:
continue
store2=store2+' '+store1
a =a+1
store3=store2.split()
store4=store3[:a-1]
print('Maximum: %s'%(max(store4)))
print('Minimum: %s'%(min(store4)))
Я добавил в немедленную проверку входного значения (в противном случае он выполняет с 'done''значение, вызывая вывод Maximum: d
).
Для проверки ввода подход пытается преобразовать строку в целое число и вернуться к началу цикла, если пойман ValueError
.
Использование выглядит следующим образом:
$ python3 input.py
Enter a number: 1
Enter a number: 2
Enter a number: what
Ivalid input.
Enter a number: 3
Enter a number: 4
Enter a number: done
Maximum: 3
Minimum: 1
Итак, у нас все еще есть проблема с нахождением максимального значения.Возникает вопрос, почему все манипуляции со строками?
Вот более простая реализация, использующая вместо этого массив:
numbers = []
while True:
input_value = input('Enter a number: ')
if input_value == 'done':
break
try:
int_value = int(input_value)
except ValueError:
print("Ivalid input.")
continue
numbers.append(int_value)
print('Maximum: %s'%(max(numbers)))
print('Minimum: %s'%(min(numbers)))
Использование:
$ python3 input.py
Enter a number: 1
Enter a number: 2
Enter a number: what
Ivalid input.
Enter a number: 3
Enter a number: 4
Enter a number: done
Maximum: 4
Minimum: 1
РЕДАКТИРОВАТЬПроблема со второй попыткой заключается в том, что вы выполняете лексикографическую сортировку вместо числовой.Это связано с тем, что в массиве хранятся строковые значения.
# sorting strings, lexicographically
>>> [x for x in sorted(['1000', '80', '10'])]
['10', '1000', '80']
# sorting numbers, numerically
>>> [x for x in sorted([1000, 80, 10])]
[10, 80, 1000]
В моем фиксированном примере, приведенном выше, строки преобразуются в целочисленные значения, прежде чем они сохраняются в массиве, поэтому в итоге они сортируются численно..