2015-04-23 98 views
0

我是Python的初学者,一般使用计算机语言,而且我完全难以将这种迭代格式化为函数。迭代采用某人的出生年份,月份和日期的总和,并将它们加在一起以创建这些数字的总和,然后第二次迭代获得第一次总和并将这些数字相加以创建最终总和。此将迭代转换为函数

我有用户输入他们的birthyear,月和日(全部转换为INT),这是用于第一和的代码(例如:01/01/1997 = 1999甲BDAY):

first_sum=b_yr + b_dy + b_mo 

然后第一次迭代花费的总和,并将该号码一起(例如:1999 = 1 + 9 + 9 + 9 = 28):

z = first_sum 
zstr1=str(z) 
accum1=0 
for x in zstr1: 
    accum1 += int(x) 
(accum1) 

然后第二次迭代开出第一总和,并增加了那些再次创建最终总和(例如:28 = 2 + 8 = 10):

str2=str(accum1) 
accum2=0 
for cnt2 in str2: 
    accum2 += int(cnt2) 
+0

迭代和函数是完全不同的东西。你想成为一个功能是什么,为什么你想要做到这一点? – Raniz

+1

很难理解你真正需要的是什么 – therealprashant

回答

0

我想这应该做的工作:

def numerology(z): 
    zstr1=str(z) 
    accum1=0 
    for x in zstr1: 
     accum1 += int(x) 
    str2=str(accum1) 
    accum2=0 
    for x in str2: 
     accum2 += int(x) 
    return accum2 

调用函数

numerology(first_sum) 

BTW是一种奇怪的方式(对我来说)

编辑: 添加到匿名的功能方式,一个递归的(与列表理解)。

def numerology(z): 
    zstr1=list(str(z)) 
    res=sum([int(i) for i in zstr1]) 
    if res>10: 
     res=numerology(res) 
    return res 
+0

这正是我需要的!你能解释一下函数创建过程吗?我对整个过程感到困惑。 –

+0

除第一行和最后一行之外的所有内容都是您的代码,因此第一行定义函数(name和z是传递给它的参数),最后一行是函数返回值(变量)的值。 – UberKaeL

2

您可能会将有趣的部分归因于它们自己的功能。

我可能会写这样的:

def sum_digits(n): 
    return sum(map(int, str(n))) 

def magic(y, m, d): 
    return sum_digits(sum_digits(y + m + d)) 

print magic(1997, 1, 1) 
+0

好的答案。但是对于刚接触python的人以及一般编程人员来说,可能有点难以理解? –

+0

我喜欢这个答案,它简洁明了。对于新的python用户来说,了解更多关于python的知识也很好。 – xirururu

+0

我也认为是一个很好的答案,但不适合初学者,它让我以另一种方式思考(递归的方式)。 – UberKaeL