这项任务的想法来自于第10天的代码问世。机器人用数字操纵筹码。说明如下(它们位于 txt 文件中)。
bot 1 gives low to output 1 and high to bot 0
value 5 goes to bot 2
bot 0 gives low to output 2 and high to output 0
bot 2 gives low to bot 1 and high to bot 0
value 3 goes to bot 1
value 2 goes to bot 2
我必须编写一个函数read_file(filename)来读取文件并返回一对(元组)。第一个元素是初始状态,第二个元素是指令。
举个例子:
此示例中的初始状态为:{1: [3], 2: [5, 2]}
,说明为{0: (('output', 2), ('output', 0)), 1: (('output', 1), ('bot', 0)), 2: (('bot', 1), ('bot', 0))}
这就是我解决它的方式。
bots = dict()
instructions = dict()
with open("example.txt") as f:
linez = f.readlines()
for line in linez:
line = line.strip()
data = line.split(" ")
if line.startswith("value"):
value = int(data[1])
bot = int(data[5])
if bot not in bots:
bots[bot] = []
bots[bot].append(value)
elif line.startswith("bot"):
bot = int(data[1])
low = (data[5], int(data[6]))
high = (data[10], int(data[11]))
instructions[bot] = (low, high)
我想知道,如果有一种更短的方式来解决这个问题?
答案 0 :(得分:1)
正如上面的评论所说 - 不确定您是否需要更短的或更快的代码。
您可以为更短的代码执行的操作是使用defaultdict,因此您无需明确检查字典中是否存在某个键:
from collections import defaultdict
bots = defaultdict(list) # the param says what should be the default value
# the following three lines will be replaced with the line below
# if bot not in bots:
# bots[bot] = []
# bots[bot].append(value)
bots[bot].append(value)
然后是一件小事 - 以下两行line = line.strip(); data = line.split(" ")
可以替换为data = line.strip().split()
答案 1 :(得分:0)
替换它:
with open("example.txt") as f:
linez = f.readlines()
for line in linez:
# code here
使用:
with open("example.txt") as f:
for line in f:
# code here
它们都更短(嗯,不是很多,但......)和更高的内存效率;)