列表操作和使用 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.')