Чтобы понять, что происходит, давайте посмотрим на код по частям.
Сначала объявляется пустой список. В нем будут храниться все значения
L=[];
Затем пользователю предлагается ввести размер ввода, это значение (string
) преобразуется (приводится) в целое число (int
).
t=int(input());
Это могло бы быть более явным, добавив некоторую информацию для чтения пользователем.
t=int(input('Please enter the size of your input\n'));
После этого программа зациклится t
раз.
for i in range(0,t):
В этом цикле пользователю сначала предлагается ввести ввод (здесь команда). Этот вход разделен: функция split()
преобразует string
в список строк (которые были разделены пробелом) с именем cmd
.
cmd=input().split();
Опять же, это может быть более явным.
cmd=input('Please enter a command\n').split();
Теперь мы «переключаемся» (в питоне нет переключателя, поэтому это серия «если, еще если, еще если ...») в команде и действуем соответственно.
if cmd[0] == "insert":
L.insert(int(cmd[1]),int(cmd[2]))
elif cmd[0] == "append":
L.append(int(cmd[1]))
elif cmd[0] == "pop":
L.pop();
elif cmd[0] == "print":
print L
elif cmd[0] == "remove":
L.remove(int(cmd[1]))
elif cmd[0] == "sort":
L.sort();
else:
L.reverse();
Теперь вы можете видеть, почему ваш ввод начинается с 12
в первой строке, это число строк ниже, которое ваша программа должна прочитать, и оно будет сохранено в t
. Если он слишком мал, например, 6
, ваша программа будет читать только 6 первых команд. Если он слишком большой, например, 42
, ваша программа будет ожидать ввода большего количества данных и останется в цикле. Он будет выглядеть так, как будто он застрял, в то время как на самом деле он ожидает только ввода от stdin
Чтобы ответить на ваш последний комментарий об ошибке, когда ваша первая строка ввода insert 0 5
, интерпретатор python пытается преобразовать его в целое число и сохранить в t
. Поскольку это невозможно (insert 0 5
не является строкой, представляющей целое число), происходит сбой.
Вы можете уловить эту ошибку с помощью try .. except
конструкции, подобной этой
while True:
try:
t=int(input('Please enter the size of your input\n'));
break
except ValueError:
print('You must input an integer! Try again.')