我需要以下列方式输入用户,
abc item1 item2
abc item3 item4
pqr item2 item3
456 item1 item1
abc
>>> Invalid Input
123 item2 item5
... ..... .....
789
基本上用户可以输入以abc开头的行,但在任何其他行以pqr或456或123开头之前。如果用户在其他行之后输入abc,则应将其视为无效输入,输入将在用户输出时终止将进入789。
这是我的代码,
COMMANDS = ['abc','pqr', '123', '456', '789']
INPUT = []
for ROW in iter(raw_input, COMMANDS[4]):
ROW = ROW.split()
if len(INPUT) == 0:
if ROW[0] == COMMANDS[0]:
INPUT.append(ROW)
else:
print '>>> Invalid Input'
elif ROW[0] == COMMANDS[0]:
INPUT.append(ROW)
elif ROW[0] in COMMANDS[1:]:
COMMANDS = COMMANDS[1:]
INPUT.append(ROW)
else:
print '>>> Invalid Input'
print INPUT
我认为我的第二个elif语句有问题,在循环中它只是不断砍掉列表。我不知道如何使这个工作,请帮助。如果您认为有更好的方法来做我想做的事情,那么请建议。
以下是运行上述代码时的输出
abc
pqr
abc
>>> Invalid Input
123
345
>>> Invalid Input
456
abc
>>> Invalid Input
pqr
>>> Invalid Input
789
[['abc'], ['pqr'], ['123'], ['456']]
在输出中,您可以看到pqr被标记为无效输入,它不应该是,我认为在我的第二个efif我正在切断'abc'并且随着循环的进行,它也切断了'pqr'以及我不想要的清单。我只是想从列表中删除abc。
最后设法找到解决方法,
COMMANDS = ['abc','pqr', '123', '456', '789']
INPUT = []
for ROW in iter(raw_input, COMMANDS[4]):
ROW = ROW.split()
if len(INPUT) == 0:
if ROW[0] == COMMANDS[0]:
INPUT.append(ROW)
else:
print '>>> Invalid Input'
elif ROW[0] == COMMANDS[0]:
INPUT.append(ROW)
elif ROW[0] not in COMMANDS:
print '>>> Invalid Input'
else:
try:
COMMANDS.remove('abc')
except ValueError, e:
pass
INPUT.append(ROW)
print INPUT
这可能不是最好的方式,但现在为我工作。如果你有更好的方法,请告诉我。
答案 0 :(得分:1)
试试这个:
commands = ['pqr', '123', '456', '789']
inp = []
user_inp = None
non_repeat = "abc"
while user_inp != "789":
user_inp = raw_input()
# if it is the first entry and input == non_repeat
if not inp and user_inp == non_repeat:
inp.append(user_inp)
# else if all entries so far are == non_repeat and currnet input == non_repeat
elif user_inp == non_repeat and all(x == non_repeat for x in inp):
inp.append(user_inp)
# else if it is a valid command, append
elif inp and user_inp in commands:
inp.append(user_inp)
# else we tried adding non_repeat after other elements or a command not in the list
else:
print ">>> Invalid Input"
您应该使用小写字母表示变量名称,同时在代码中添加注释可以帮助您查看正在发生的事情,并使人们更容易帮助您。