列表操作和使用 STDIN
List manipulation and using STDIN
我正在 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]
我有所有的原料,但我还是想不通。我的问题是我不知道我应该如何输入示例输入(即,以什么格式?)它必须作为列表或字符串输入..我真的不确定。请帮忙
非常感谢
要了解发生了什么,让我们一段一段地看一下代码。
首先,声明一个空列表。它将存储所有值
L=[];
然后,提示用户输入输入的大小,这个值(一个string
)被转换(cast)成一个整数(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
.
的字符串列表(由 space 分隔)
cmd=input().split();
同样,它可以更明确。
cmd=input('Please enter a command\n').split();
现在,我们'switch'(python中没有开关,所以它是一系列的'if,else 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.')
我正在 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]
我有所有的原料,但我还是想不通。我的问题是我不知道我应该如何输入示例输入(即,以什么格式?)它必须作为列表或字符串输入..我真的不确定。请帮忙
非常感谢
要了解发生了什么,让我们一段一段地看一下代码。
首先,声明一个空列表。它将存储所有值
L=[];
然后,提示用户输入输入的大小,这个值(一个string
)被转换(cast)成一个整数(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();
现在,我们'switch'(python中没有开关,所以它是一系列的'if,else 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.')