鱼C论坛

 找回密码
 立即注册
楼主: zltzlt

Python:每日一题 339

[复制链接]
发表于 2020-2-29 20:29:12 | 显示全部楼层
  1. def f339(a:str,b:str)->str:
  2.     m=len(a)-len(b)
  3.     if m>=0:
  4.         b='0'*m+b
  5.         res=''
  6.         for i in range(len(a)):
  7.             res+=str(int(a[i])+int(b[i]))
  8.         return res
  9.     else:
  10.         return f339(b,a)
  11. a = "99"
  12. b = "111"
  13. print(f339(a,b))
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 20:29:30 | 显示全部楼层

我花了好几行用来将2个字符串补齐,应该有更好的方法。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 20:32:29 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 20:35:15 | 显示全部楼层
冬雪雪冬 发表于 2020-2-29 20:29
我花了好几行用来将2个字符串补齐,应该有更好的方法。

我绝对你这个足够强大了
太厉害了
我必须学习!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 21:05:37 | 显示全部楼层
来晚了
  1. def fun339(a,b):
  2.     def add(num1,num2):
  3.         result = ''
  4.         M = len(num1)
  5.         for i in range(0,M):
  6.             result += str(int(num1[i])+int(num2[i]))
  7.         return result
  8.     a_lenth = len(a)
  9.     b_lenth = len(b)
  10.     if a_lenth>b_lenth:
  11.         return a[0:(a_lenth-b_lenth)] + add(a[(a_lenth-b_lenth):],b)
  12.     else:
  13.         return b[0:(b_lenth-a_lenth)] + add(b[(b_lenth-a_lenth):],a)
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 21:07:44 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 21:24:12 | 显示全部楼层
zltzlt 发表于 2020-2-29 20:23
如果用递归则不能处理过大的数据
  1. def f339(a,b):
  2.     if len(a)>len(b):
  3.         a,b=b,a
  4.     return b[:-len(a)]+''.join([str(int(a)+int(b)) for a,b in zip(a,b[-len(a):])])  
复制代码

评分

参与人数 1荣誉 +2 鱼币 +2 收起 理由
zltzlt + 2 + 2

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 21:26:22 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 21:39:30 | 显示全部楼层
本帖最后由 kinkon 于 2020-2-29 21:58 编辑

没时间,后面再优化
  1. def f339(a, b):
  2.     a, b = a[::-1], b[::-1]
  3.     alen,blen = len(a), len(b)
  4.     if alen < blen:
  5.         M = alen
  6.     else:
  7.         M = blen
  8.     s = ''
  9.     for i in range(M):
  10.         s += str(int(a[i]) + int(b[i]))
  11.     s += a[M:] + b[M:]
  12.     return s[::-1]
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-2-29 21:40:42 | 显示全部楼层
kinkon 发表于 2020-2-29 21:39
没时间,后面在优化

输入 a = "99", b = "111" 结果有误
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 21:55:43 | 显示全部楼层
本帖最后由 kinkon 于 2020-2-29 23:54 编辑

这次应该对了吧
  1. def f339(a, b):
  2.     a, b = a[::-1], b[::-1]
  3.     alen,blen = len(a), len(b)
  4.     if alen < blen:
  5.         M = alen
  6.     else:
  7.         M = blen
  8.     s = ''
  9.     for i in range(M):
  10.         s += str(int(a[i]) + int(b[i]))[::-1]
  11.     s += a[M:] + b[M:]
  12.     return s[::-1]
复制代码


字符串不翻转试试会不会快一些
  1. def f339(a, b):
  2.     alen,blen = len(a), len(b)
  3.     if alen < blen:
  4.         M = alen
  5.     else:
  6.         M = blen
  7.     s = ''
  8.     for i in range(-M, 0):
  9.         s += str(int(a[i]) + int(b[i]))
  10.     s = a[:-M] + b[:-M] + s
  11.     return s
复制代码


再精简,好像会更快一些
  1. def f339(a, b):
  2.     M = min(len(a), len(b))
  3.     return a[:-M] + b[:-M] + ''.join([str(int(a[i]) + int(b[i])) for i in range(-M, 0)])
  4.    
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 21:56:26 | 显示全部楼层
  1. def fun339(a,b):
  2.     return ''.join([str(int(i[0])+int(i[1])) for i in list(zip(a.zfill(len(b)),b))]) if len(a)<len(b) else ''.join([str(int(i[0])+int(i[1])) for i in list(zip(a,b.zfill(len(a))))])
复制代码

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
zltzlt + 1 + 1

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:05:01 | 显示全部楼层
冬雪雪冬 发表于 2020-2-29 20:29
我花了好几行用来将2个字符串补齐,应该有更好的方法。

字符串zfill方法,或者假定a的长度大于b f'{b:0>(len(a)}'
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:07:33 | 显示全部楼层
fan1993423 发表于 2020-2-29 22:05
字符串zfill方法,或者假定a的长度大于b f'{b:0>(len(a)}'

是的
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:09:42 | 显示全部楼层
本帖最后由 jdzzj 于 2020-2-29 22:14 编辑
  1. def fun339(a,b):

  2.     res=""
  3.     a=list(a)
  4.     b=list(b)
  5.    
  6.     while len(a)!=len(b):
  7.         if len(a)>len(b):
  8.             b.insert(0,"0")
  9.         else:
  10.             a.insert(0, "0")

  11.     for i in range(len(a)):
  12.         res += str(int(a[i]) + int(b[i]))

  13.     return res
复制代码

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:10:59 | 显示全部楼层
  1. def fun339(a,b):
  2.     return ''.join([str(eval(i)+eval(j)) for i,j in zip(f'{a:0>{len(b)}}',b)]) if len(a)<len(b) else ''.join([str(eval(i)+eval(j)) for i,j in zip(a,f'{b:0>{len(a)}}')])
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:21:24 | 显示全部楼层
  1. def test(a, b):
  2.     figures = max([len(a), len(b)])
  3.     a = tuple(a.zfill(figures))
  4.     b = tuple(b.zfill(figures))
  5.     a_b = tuple(map(lambda x, y: str(int(x) + int(y)), a, b))
  6.     return ''.join(a_b)
复制代码

zfill眞好用

评分

参与人数 1荣誉 +5 鱼币 +5 收起 理由
zltzlt + 5 + 5

查看全部评分

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:23:04 | 显示全部楼层

啊,已经有人用了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:30:15 | 显示全部楼层
wcshds 发表于 2020-2-29 22:23
啊,已经有人用了

没事,我相信只是思路巧合,这个我一看完题就反应了zfill和f''两种方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-2-29 22:46:02 | 显示全部楼层
a=input('a=')
b=input('b=')
if len(a)>len(b):
     a,b=b,a
else:
     pass
f=''
b1=b[len(b)-len(a):len(b)]
for i in range(len(a)):
     c=int(a[i])+int(b1[i])
     f+=str(c)
b2=b[:len(b)-len(a)]
d=b2+f
print(d)
     
来了,怎么设置代码模式
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-13 17:22

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表