我必须初始化一个列表L并遵循N行中给出的N个命令。
命令将是以下给出的8个命令中的1个:
append
extend
insert
remove
pop
index
count
sort
reverse
请在下面找到我的代码。我只是个初学者。请原谅我的错误。
示例输入为:
12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print
输出应为:
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
我的代码是:
L = []
L.insert(0,5)
L.insert(1,10)
L.insert(0,6)
print L
L.remove(6)
L.append(9)
L.append(1)
L.sort()
print L
L.pop()
L.reverse()
print L
即使它以某种方式完成工作,但它并不准确。我该如何简化它?
答案 0 :(得分:1)
显然问题在于为这种迷你语言编写解释器......类似于
L = []
# read the number of commands
N = int(raw_input())
# execute N commands
for x in xrange(N):
# read a line and split on spaces
cmd = raw_input().split()
# process the command
if cmd[0] == "insert":
L.insert(int(cmd[1]), int(cmd[2]))
elif cmd[0] == "pop":
L.pop()
... implement all the commands ...
else:
raise RuntimeError("Unknown command " + repr(cmd))
答案 1 :(得分:1)
我认为练习的目的是从数据中驱动代码,而不是尝试为输入的每一行手动编写代码。
我从输入文本开始并逐行处理。对于每一行,我将您的文本拆分为动作和参数。 Python exec
命令可用于执行给定的操作,但您应注意,命令所需的格式对于每个命令都不相同。
input = """12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print"""
L = []
allowed_commands = ['append', 'insert', 'pop', 'print', 'remove', 'reverse', 'sort']
# Read the input in above and split it into a row at a time, skip the count at the start.
for row in input.split("\n")[1:]:
# For each row, split it into a list of arguments
cols = [col for col in row.split(" ") if len(col)]
# The action is taken from the first column
action = cols[0]
# Ensure the action is one of the allowed commands
if action in allowed_commands:
arguments = ",".join(cols[1:])
if action == "count":
command = "print len(L)"
elif action == "index":
command = "print L[%s]" % arguments[0]
elif action == "print":
command = "print L"
else:
command = "L.%s(%s)" % (action, arguments)
exec(command)
else:
print "'%s' is an unknown command" % action
这为您提供以下输出:
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
我会留给您将其转换为创建列表并手动输入命令。
注意:使用exec
可能非常危险,您必须确保只执行您允许的命令。
答案 2 :(得分:0)
我用这种方式解决了这个黑客等级问题:
if __name__ == '__main__':
N = int(raw_input())
list = []
for i in range(N):
option = raw_input().split()
if option[0] == 'print':
print(list)
elif option[0] == 'sort':
list.sort()
elif option[0] == 'remove':
list.remove(int(option[1]))
elif option[0] == 'append':
list.append(int(option[1]))
elif option[0] == 'insert':
list.insert(int(option[1]),int(option[2]))
elif option[0] == 'reverse':
list.reverse()
elif option[0] == 'pop':
list.pop()
输出
输入(stdin)
12
insert 0 5
insert 1 10
insert 0 6
print
remove 6
append 9
append 1
sort
print
pop
reverse
print
你的输出(标准输出)
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]
预期产出
[6, 5, 10]
[1, 5, 9, 10]
[9, 5, 1]