【问题标题】:How to calculate the average of digit in Python如何在Python中计算数字的平均值
【发布时间】:2014-11-01 23:22:25
【问题描述】:

我有一个计算机课的作业,其中一个问题要求我们编写一个代码,该代码将计算数字的平均值,直到它变成一个字母(字母)。

这是描述:

此函数接收一个包含数字或字母的字符串作为输入。 该函数应返回一个浮点数,该浮点数包含从字符串中的第一个位置开始考虑字符串中的所有数字并考虑所有数字直到找到一个字母或直到到达字符串末尾的平均值。如果没有数字,函数应该返回值0.0

所以我想出了以下代码:

def avgUntilLetter (st):
    digits1 = [int(x) for x in st if x.isdigit()]
    total = sum(digits1)
    if digits1:
        avg = float(total) / len(digits1)
        return avg
    if st.isalpha():
        return 0.0

例如,对于答案,如果 CodeWrite 放入 avgUntilLetter('123a456'),我应该得到 2.0 作为返回值。我得到了所有数字的平均值,我需要在我的代码中输入什么来解决这个问题?

【问题讨论】:

  • 就目前而言,当到达非数字时,您的代码不会尝试停止;发生这种情况时,您需要在某个地方break
  • 我对此投了赞成票,因为 OP 做出了合理的尝试来自己解决这个问题,并包含了他们的代码、预期的输出以及他们得到的结果。跨度>

标签: python string loops


【解决方案1】:

您正在获取所有位数字,而不仅仅是开始时的数字。遇到第一个非数字时需要停止计算。

如果您只是逐个遍历所有字符并在到达第一个非数字时中断,这是最简单的:

def avgUntilLetter(st):
    total = count = 0
    for x in st:
        if not x.isdigit():
            break
        count += 1
        total += int(x)
    if not count:
        return 0.0
    return float(total) / count

这里count 跟踪我们在开始时找到了多少个数字;如果仍然是0,则找不到数字。

演示:

>>> def avgUntilLetter(st):
...     total = count = 0
...     for x in st:
...         if not x.isdigit():
...             break
...         count += 1
...         total += int(x)
...     if not count:
...         return 0.0
...     return float(total) / count
... 
>>> avgUntilLetter('123a456')
2.0

【讨论】:

  • 哦,谢谢,我们的教授并没有真正教我们 enumerate() 函数,所以我还在自学那个函数。
  • @Dennis:实际上我使用它是错误的;如果字符串中有一个字符,它总是会计算 one too many。我已经删除了。
  • 哦,好的。谢谢你的帮助:)
猜你喜欢
  • 2013-12-18
  • 1970-01-01
  • 2011-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多