我正在Internet上处理此示例,我试图理解代码。
该示例显示示例输入为
12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print
以及通过应用此代码
L=[];
t=int(input());
for i in range(0,t):
cmd=input().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();
我应该得到类似于以下的输出:
样本输出
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
我有所有食材,但是我无法弄清楚。我的问题是我不知道如何输入示例输入(即采用哪种格式?)是否必须将其作为列表或字符串输入..我真的不确定。请帮助
非常感谢
答案 0 :(得分:1)
要了解发生了什么,让我们逐段看一下代码。
首先,声明一个空列表。它将存储所有值
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();
现在,我们在命令上“切换”(Python中没有开关,因此它是“ if,if,if,else if ...”的意思),并相应地采取行动。
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.')