[用Python玩转数据]字典经典应用编程小例

贴题:字典经典应用编程小例

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],就可以减少一层循环和一层判断了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值