贴题:字典经典应用编程小例
1 我的解答
由于不熟悉字典,我编程完才发现自己全程没用到字典......
以下是思路:
1.用循环嵌套,在列表中取两个不相等的数,判断两者之和;
2.用flag的值来控制是否有结果;
3.return返回一次跳出函数。
2 我的代码
此处代码可运行,除了不符合题目没用到字典,(lll¬ω¬)
lst = [1,4,5,6,7,8,9,10,11,12,13,15,18,19,20,21,29,34,54,65]
def twonums_sum(n,lst):
flag = -1
# lst.sorted() 这里本来想排序一下,保证输出的是较小的下标,失败
for i in range(len(lst)):
for j in range(len(lst)):
if i != j:
if lst[i] + lst[j] == n:
flag = 1
return i,j
if flag == -1:
return 'not found'
n = eval(input('Enter a number:'))
print(twonums_sum(n,lst))
3 我的问题
1.最开始用print()输出结果,还想着怎么控制只输出一个,结果用return就好了啊;
2.忘记换成return之后就要用print()输出了,如果函数里面有print(),那么函数外面就不需要;
3.lst.sorted()报错的原因是应该用lst.sort()。
4 正确代码及反思
def twonums_sum(n,lst):
d = {}
for i in range(len(lst)):
d[lst[i]] = i
for i in range(len(lst)):
if n - lst[i] in d:
return i,d[n-lst[i]]
return -1
lst = [1,4,5,6,7,8,9,10,11,12,13,15,18,19,20,21,29,34,54,65]
n = int(input())
result = twonums_sum(n,lst)
if result == -1:
print('not found')
else:
print(result)
反思:
1.用字典确实方便很多啊,思路也不难;
2.用n-lst[i],就可以减少一层循环和一层判断了。