Ограничение пользовательского ввода в списке целых чисел в Python 3.x - PullRequest
0 голосов
/ 12 октября 2018

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

До сих пор самый элегантный способ, которым я мог сделать это, не ограничивая ввод 5 целыми числами, был:

a = [int(x) for x in input().split()]
print(len(a), type(a), sorted(a))

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

Я думал об использовании int (input ()) для x в диапазоне (5), но это не сработало, и я такжетогда я не знаю, как добавить разделение.

Я знаю, что есть способ хранить элементы в списке с помощью map (), но я еще не сталкивался с этим в моем курсе, так что если естьэто более простой и эффективный способ сделать это с помощью list (map ()), я был бы очень признателен, если бы кто-то мог мне помочь.

Я только начал учиться, поэтому любые советы будут оценены.Спасибо!

Ответы [ 3 ]

0 голосов
/ 12 октября 2018

При этом будут сохранены только первые 5 элементов в списке:

a = [int(x) for x in input().split()[:5]]

При использовании этого списка все элементы в списке с индексом меньше 5.

0 голосов
/ 12 октября 2018

Ограничьте ваше разделение первыми 5 числами с помощью аргумента maxsplit, равного str.split.

Затем нарежьте до, но не включая конечный элемент списка результатов.

a = [int(x) for x in input().split(maxsplit=5)[:-1]]

Обратите внимание, что вы также можете переписать это с list + map:

a = list(map(int, input().split(maxsplit=5)[:-1]))
0 голосов
/ 12 октября 2018

У вас есть два варианта:

  • Возьмите первые пять значений из строки, игнорируйте остальные
  • Проверьте длину и попросите пользователя не вводить столько значений

Последнее даст пользователю лучшую обратную связь, где первое может привести к неожиданностям ( Что случилось с числами в конце моей строки? )

Игнорированиеостальное легко;нарежьте список, который вы создаете;[:5] создает новый список только с (до) 5 значениями:

a = [int(x) for x in input().split(maxsplit=5)[:5]]

Вышеприведенное также говорит str.split() только о разделении до 5 раз, чтобы избежать дальнейшей работы.

По соглашению командной строки сообщение об ошибке должно быть записано в sys.stderr, и вы должны выйти с ненулевым кодом выхода:

a = [int(x) for x in input().split()]
if len(a) > 5:  # or len(a) != 5 if you must have exactly 5 values
    print('No more than 5 values, please!', file=sys.stderr)
    sys.exit(1)

Когда вы используете библиотеку для обработки командРазбор строки, затем библиотека обычно включает функцию для обработки сообщения об ошибке и выхода (например, argparse, где вы будете использовать parser.error(message), чтобы сообщить о проблеме и выйти за один шаг).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...