所以这个项目我正在上学,我无法弄清楚如何让这段代码发挥作用。如果我输入两个单词它可以正常工作但如果我只输入一个然后它返回错误:
List index out of range.
我需要它来分配变量" modifier
"如果有两个单词但如果只有一个单词则忽略它。
有什么想法吗?
commandinp = [input("ROOT:/" + directory + "> ")]
commandfull = [x.strip().split(' ') for x in commandinp]
for sublist in commandfull:
command = sublist[0]
size = len(commandfull)
if size > 0:
modifier = sublist[1]
答案 0 :(得分:0)
不确定你为什么要在这里循环。如果您需要modifier
可选的值,请使用partition
:
commands = input("ROOT:/" + directory + "> ").strip()
command, _, modifier = commands.partition(' ')
print(command, modifier)
使用' '
进行分区会将字符串分为三部分;第一部分是第一个空格(command
)之前的值,第二部分是分区元素(我们在这里使用_
转储它),第三部分是空格后面的其余值({{ 1}})。
以下内容:
modifier
只需通过解包将值分区分配给相应的名称。
使用command, _, modifier = commands.partition(' ')
和sudo -s
可获得以下值:
sudo
和
ROOT:/dir/> sudo
>>> command
'sudo'
>>> modifier
''
等等。
正如您所注意到的,我将原始片段略微修剪了一下; ROOT:/jim/> sudo -s
>>> modifier
'-s'
>>> command
'sudo'
周围的括号是因为您之后正在进行input
,我猜测。你真的不需要这样做,因为in
将为你返回一个列表。
split
循环似乎也是一个坏主意,你不需要对每个值做一些事情,你需要检查它的大小并适当地分配。对于那个for
会这样做(即使if
将我们从中拯救出来。)
如果肯定不希望partition
定义,如果没有任何内容,你应该使用modified
,但我认为,分配一个空字符串(评估为在if
检查上False
可能比有条件地定义它更好。