Python 3.x 列表操作和使用STDIN

Python 3.x 列表操作和使用STDIN,python-3.x,list,stdout,stdin,Python 3.x,List,Stdout,Stdin,我正在互联网上做这个例子,我试图理解代码 示例说明示例输入是 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

我正在互联网上做这个例子,我试图理解代码

示例说明示例输入是

    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=[];
然后,系统会提示用户输入输入的大小,该值(一个
字符串
)被转换(转换)为一个整数(
int

通过添加一些供用户阅读的信息,它本可以更加明确

t=int(input('Please enter the size of your input\n'));
之后,程序将循环
t

for i in range(0,t):
在这个循环中,首先提示用户输入一个输入(这里是一个命令)。此输入被拆分:函数
split()
字符串
转换为字符串列表(由空格分隔),称为
cmd

    cmd=input().split();
同样,它可以更加明确

    cmd=input('Please enter a command\n').split();
现在,我们在命令上“switch”(python中没有开关,所以它是一系列的“if,elseif,elseif…”),并相应地执行操作

    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
不是表示整数的字符串),所以会崩溃。
您可以通过
尝试捕获此错误。。除了像这样的构造

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

你的代码在我这边运行得很好。代码运行得很好,但是你是如何输入的?你只是复制并粘贴了样本输入,没有放括号或括号吗?我一个接一个地输入。我建议您传递类似于
cmd=input(“输入输入:”)的消息。split()
输入应在标准输入上输入。您可以在控制台中“按原样”运行代码(运行
python my_script.py
),然后在控制台提示符上逐行写入代码;或者将输入写入文件(比如
my\u input.txt
),并以
python my\u script\u py
的形式运行python脚本。感谢您的回复。我会的。for循环的要点是什么?那么“对于范围(0,t)中的i:”?是检查单个输入的大小吗?非常感谢。首先输入输入的大小,然后输入输入。我根本没想到会是这样。老实说,python初学者不容易猜到。这个练习应该是给初学者做的。换句话说,我需要输入12,然后每次输入一个输入,从理论上讲,这将导致最终的“样本”输出。我已经尝试过这样做,但是我没有得到与样本输出类似的结果,我一定是出了什么问题。再次感谢您,因为您现在不仅了解了该程序的工作方式,而且还了解了“Python禅宗”中的一句话:“显式优于隐式”。另外,当您不理解程序时,查看程序行为的一种方法是在程序中的不同点打印一些变量的值(这里您需要打印
L
)。这可以帮助你理解它的行为。这被认为不是一个好的实践,但是当你开始编写代码时,它会非常有用。啊,还有最后一条建议。这段代码是Python2代码。Python2将很快(今年年底)不再进行维护,因此我建议您开始学习Python3(这很少见,但Python并不向后兼容)。作为一名python初学者,除了
print
后面的括号外,您不应该看到任何区别,但您一定会学习到该语言的“正确”版本。明白了,非常感谢您的耐心和努力。我很高兴stackoverflow提供了一个平台,初学者和专家程序员可以在这个平台上交流知识。谢谢你,先生!
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.')