列表操作和使用STDIN

时间:2019-03-22 10:43:10

标签: python-3.x list stdout 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]

我有所有食材,但是我无法弄清楚。我的问题是我不知道如何输入示例输入(即采用哪种格式?)是否必须将其作为列表或字符串输入..我真的不确定。请帮助

非常感谢

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.')