【发布时间】:2019-11-30 02:17:54
【问题描述】:
我的一个朋友在一次采访中向我展示了他在编码挑战中遇到的一个有趣的问题。所以你有一个像 n = 3413289830 这样的数字和像 p = a-bcdefghij 这样的模式,你需要创建一个函数来接受这个输入和输出 -413289827。显然,它应该适用于任何数字和字母的加减法组合。我编写了这段代码,但我很确定它可以改进,因为我认为它有点低效。
pattern = 'a-bcdefghij'
n = '3413289830'
lst = []
def splitnb(n, pattern):
save = dict()
if(len(n) != len(pattern) - 1):
print('Pattern needs to match number')
else:
if( '-' in pattern):
patlst = pattern.split('-')
elif('+' in pattern):
patlst = pattern.split('+')
for char in n:
a = list(n)
for pat in patlst:
first = patlst[0].split()
rest = pat.split()
for l in first[0]:
f1 = l
lst.append(f1)
for l2 in rest[0]:
f2 = l2
lst.append(f2)
save = dict(zip(lst, a))
nb = ''
if( '-' in pattern):
for i in first[0]:
numb = int(save.get(i))
for j in rest[0]:
nb += save.get(j)
numb1 = numb - int(nb)
elif('+' in pattern):
for i in first[0]:
numb = int(save.get(i))
for j in rest[0]:
nb += save.get(j)
numb1 = numb + int(nb)
return numb1
f1 = splitnb(n, pattern)
f2 = splitnb('1234', 'ab+cd')
f3 = splitnb('22', 'a-b')
【问题讨论】:
-
如果有
-,就不能有+? -
@AMC 显然那将是理想的,我只是在它只包含一个操作的级别上想到它
-
我已经忘记了这一切。快速提问:你为什么到处使用
dict.get()? -
@AMC ,我正在遍历字典并使用 dict.get(index) 获取该索引处的项目并计算数字
-
@AMC,我基本上将整个操作拆分为 2 个列表,第一个列表和其余列表,然后将它们压缩到 dict 中迭代它们以计算结果。我知道这不是迄今为止最好的方法,但它是第一次尝试并在大约 35-40 分钟内完成,所以我本可以更明显地完成它
标签: python python-3.x algorithm calculator