2015-04-23 72 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