鱼C论坛

 找回密码
 立即注册
查看: 2592|回复: 13

[已解决]写了一段简单的代码,可以怎么提高效率?

[复制链接]
发表于 2016-9-9 22:00:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
def code(n):
    a=[]
    for i in list(n):
        a.append(int(i))
        if len(a)==len(list(n)):
            return int(str(sum(a))[0])+int(str(sum(a))[1])

之前看了一本是讲生命密码的,生命密码就是把你出生的年月日的数字加起来,如果和是两位,就把这两位相加,得出来的数字就是你的生命数字。
花了好长时间写了一段代码,左看右看觉得效率都是不高的那种。
如果要提高效率要怎么改进?
最佳答案
2016-9-10 11:21:20
这样~~~~~

  • n = input('输入生日,格式:yyyymmdd\n')
  • while len(n)>1:
  •     n = str(sum((int(x)for x in n)))
  • print(n)


小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-9-9 22:11:46 | 显示全部楼层

回帖奖励 +5 鱼币

列表解析
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-10 11:21:20 | 显示全部楼层    本楼为最佳答案   
这样~~~~~

  • n = input('输入生日,格式:yyyymmdd\n')
  • while len(n)>1:
  •     n = str(sum((int(x)for x in n)))
  • print(n)


小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 0 反对 1

使用道具 举报

 楼主| 发表于 2016-9-10 14:20:47 | 显示全部楼层

按错了反对
谢谢~
自己自学也有一段时间,就是一些知识记住了,但不会或者很少可以用到解决问题,编程还是要在操作中学才学得快觉得,除了小甲鱼的课后题还可以哪儿有比较好的练习?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 14:38:27 | 显示全部楼层


怎么好像不行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-10 14:39:41 | 显示全部楼层

你把它删了,就知道了~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 14:58:46 | 显示全部楼层
终于试到可以了,但是现在问题是,把年月日加起来后如果结果大于10,就把两位数字想加这一步没有解决
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-10 15:19:48 | 显示全部楼层
609861054 发表于 2016-9-10 14:58
终于试到可以了,但是现在问题是,把年月日加起来后如果结果大于10,就把两位数字想加这一步没有解决

帖代码,别扯淡~
我那段代码是没问题的,不知道你改了什么地方
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 15:41:25 | 显示全部楼层
SixPy 发表于 2016-9-10 15:19
帖代码,别扯淡~
我那段代码是没问题的,不知道你改了什么地方

代码是没问题的,但现在的问题是,打个比方说输入19901105,输出的结果是26,现在规则是如果大于10,就把这两位数字再想加,结果应该是8而不是26
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-10 15:46:28 | 显示全部楼层
609861054 发表于 2016-9-10 15:41
代码是没问题的,但现在的问题是,打个比方说输入19901105,输出的结果是26,现在规则是如果大于10,就把 ...

叫你 帖代码,别扯淡~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 15:51:08 | 显示全部楼层
def code(n):
    a=[]
    for i in list(n):
        a.append(int(i))
        if len(a)==len(list(n)):
            return int(str(sum(a))[0])+int(str(sum(a))[1])

小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 15:51:42 | 显示全部楼层
SixPy 发表于 2016-9-10 15:46
叫你 帖代码,别扯淡~


def code(n):
    a=[]
    for i in list(n):
        a.append(int(i))
        if len(a)==len(list(n)):
            return int(str(sum(a))[0])+int(str(sum(a))[1])
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2016-9-10 15:53:36 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-9-10 16:18:38 | 显示全部楼层
终于懂了,我把它转换成函数,总是得出是26,再瞧一瞧,原来return给多了一个缩进,这个缩进很容易弄乱啊,return缩进前一个和缩进后一个的结果原来是不同的,如下:
def code_1(x):
    while len(x)>1:
        x = str(sum((int(x) for x in x)))
    return x
g='19901105'
print(code_1(g))
return的缩进位置和while对齐,结果得出是8,正确。

def code_1(x):
    while len(x)>1:
        x = str(sum((int(x) for x in x)))
        return x
g='19901105'
print(code_1(g))
但这段代码的结果就是26了,没有返回8,结果不正确。

希望自己学到的同时可以帮到别人吧~
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2026-2-22 16:59

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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