【问题标题】:How can I let my code return the average of the numbers?如何让我的代码返回数字的平均值?
【发布时间】:2021-11-06 06:01:09
【问题描述】:

所以我编写了一个代码,它将返回与parse_dist(s) 的距离和parse_time(s) 的总时间。但是,我定义了另一个函数jogging_average(activities),它将返回activities: list 中每个字符串的距离和时间。

现在我想让 jogging_average(activities: list) 返回 (x+x)/(y+y) (基本上是平均值)。如何修改我的代码以找到这样的平均值??

【问题讨论】:

  • 与您的问题无关,如果您使用 python 的正则表达式模块,您的解析代码 (get Digits & parse_time) 会简单得多。如果正则表达式令人生畏或不熟悉,我们都曾经在那里。网络上有很多很好的资源可以帮助学习。
  • 首先,使用tour 并阅读How to Ask。然后,提供给您问题的代码的minimal reproducible example,以及它产生的完整输出和您期望的输出。另外,您一般如何计算平均值?在 Python 中这样做的问题在哪里?

标签: python list tuples


【解决方案1】:
def jogging_average(activities: list[str]):
    cum_dist = cum_time = 0
    for activity in activities:
        if activity.startswith("jogging"):
            cum_dist += float(parse_dist(activity))
            cum_time += parse_time(activity)
    return cum_time/cum_dist

【讨论】:

  • cum_dist += float(parse_dist(activity)) cum_time += float(parse_time(activity))
  • 严格来说,float(parse_time(activity)) 不是必需的,因为返回结果已经是 int(我假设 OP 使用的是 python 3.x)
  • 当我使用 OP 的代码运行时,它会给出 str 所以浮动编辑:是的,时间在 int 中
  • 还有statistics.mean...
【解决方案2】:

与您的问题无关,关于您的解析功能,您可能会考虑

import re
def parse_time(s: str) -> float:
    result = list(map(int,re.search("(?<=time:)(\d+(,\d+)?)").group(0).split(",")))
    return result[0]*60 + (0 if len(result) < 2 else result[1])

def parse_dist(s: str) -> int:
    return float(re.search("(?<=distance:)(\d+(.\d+)?)").group(0))

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-11-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多