【问题标题】:converting iteration into a function将迭代转换为函数
【发布时间】:2015-04-23 05:18:50
【问题描述】:

我是 Python 和一般计算机语言的初学者,我完全不知道如何将此迭代格式化为函数。迭代将某人的出生年、月和日的总和相加,以创建这些数字的总和,然后第二次迭代将第一个和相加,将这些数字加在一起以创建最终的总和。这个

我让用户输入他们的出生年份、月份和日期(全部转换为 int),这是第一个总和的代码(示例:1997 年 1 月 1 日的生日 = 1999 年):

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)

【问题讨论】:

  • 迭代和函数是完全不同的东西。你想把什么做成一个函数,为什么要这样做?
  • 很难理解你真正需要什么

标签: python function iteration


【解决方案1】:

您可以将有趣的部分分解为它们自己的功能。

我可能会这样写:

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)

【讨论】:

  • 好答案。但是对于 Python 新手和一般编程的人来说可能有点难以理解?
  • 我喜欢这个答案,它简洁易读。对python新用户多了解一点python也有好处。
  • 我也认为这是一个很好的答案,但不适合初学者,它让我以另一种方式思考(递归方式)。
【解决方案2】:

我认为这应该可以完成工作:

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)

顺便说一句,这样做(对我来说)是一种奇怪的方式

编辑: 为了添加到 Anonymous 的功能方式,一种递归方式(带有列表理解)。

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

【讨论】:

  • 这正是我所需要的!你能解释一下函数创建过程吗?我对整个过程感到非常困惑。
  • 除第一行和最后一行外的所有内容都是您的代码,因此第一行定义函数(名称和 z 是传递给它的参数),最后一行是函数应返回的值(变量) .
猜你喜欢
  • 2020-08-08
  • 2015-05-30
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多