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