c

codeye

V1

2022/09/22阅读:9主题:默认主题

mean mediant

描述。 你是一个当地田径协会(C.A.A.)的 "计算机专家"。许多团队的选手来参加比赛。每次你都会得到一串每队人马的所有比赛结果。例如,这里有一个字符串,显示一个由5名选手组成的团队的个人成绩。

"01|15|59, 1|47|6, 01|17|20, 1|32|34, 2|3|17"

字符串的每一部分都是这样的形式:h|m|s,其中h、m、s(h代表小时,m代表分钟,s代表秒)是正整数或空整数(用字符串表示),有一个或两个数字。输入字符串中的子字符串用 、 或 、 分隔。

为了比较各小组的结果,要求你提供三个统计数据;范围、平均数和中位数。

范围:最低值和最高值之间的差异。在{4, 6, 9, 3, 7}中,最低值是3,最高值是9,所以范围是9-3=6。

平均值或平均数:为了计算平均值,将一组中的所有数字相加,然后用总和除以数字的总数。

中位数:在统计学中,中位数是将数据样本的上半部分与下半部分分开的数字。当观察值为奇数时,可以通过将所有观察值从最低值到最高值排列,并挑选中间的一个来找到有限的数字列表的中位数(例如,{3,3,5,9,11}的中位数是5)。如果观察值是偶数,那么就没有单一的中间值;那么中位数被定义为两个中间值的平均值({3, 5, 6, 9}的中位数是(5 + 6)/ 2 = 5.5)。

你的任务是返回一个给出这三个值的字符串。对于上面的例子,字符串的结果将是

"范围。00|47|18 平均。01|35|15 中位数。01|32|34"

的形式。"范围:hh|mm|ss 平均:hh|mm|ss 中位数:hh|mm|ss"`。

其中hh, mm, ss是整数(用字符串表示),每2位。

备注。 如果一个秒数的结果是ab.xy...,它将被截断为ab。 如果给定的字符串是"",你将返回""。 基础知识字符串统计学数学数据科学 相似的卡塔。

你有一个8风的指南针,像这样。

你收到你所面对的方向(8个方向之一:N,NE,E,SE,S,SW,W,NW)和一定的转角(45的倍数,在-1080和1080之间);正数表示顺时针,负数表示逆时针。

返回你在转弯后将面临的方向。

例子

from statistics import mean, median
def convert_ToInt(s):
    v = s.split('|')
    return sum(int(v[i]) * 60 ** (2 - i) for i in range(3))

def convert_ToStr(n):
    return "{:0>2}|{:0>2}|{:0>2}".format(*map(int, (n // 3600, n % 3600 // 60, n % 60)))

def stat(strg):
    if not strg: return ""

    data = list(map(convert_ToInt, strg.split(', ')))
    return "Range: {} Average: {} Median: {}".format(
        *map(convert_ToStr, [max(data) - min(data), mean(data), median(data)]))

下面的代码test is ok,但是规模测试 fail to attempt

试试找到原因?

import datetime as dt

def transTime(timeseq)->list:
    hms = list(map(int,timeseq.split(",")))
    return hms

def deltaTime(seq)->list:
    H,M,S = seq
    return dt.timedelta(hours=H, minutes=M, seconds=S)

def form(s):
    if type(s) == list:
        s = ':'.join([str(c) for c in s])
    return '|'.join(['{:0>2}'.format(i) for i in s.split(":")])


def stat(strg):
    statics = [c.replace('|',','for c in strg.split(",")]
    ts = sorted([transTime(i) for i in statics])

    Range = form(str(deltaTime(max(ts)) - deltaTime(min(ts))))

    average = sum([t.seconds for t in list(map(deltaTime,ts))]) // len(ts)
    Average = form(str(dt.timedelta(seconds=average)))

    mid = len(ts)//2
    median = ts[mid:mid+(1 + int(len(ts)%2==0))]

    Median = sum([t.seconds for t in list(map(deltaTime,median))])/len(median)
    Median = form(str(dt.timedelta(seconds = Median)))

    return f"Range: {Range} Average: {Average} Median: {Median}"

总结:

Python高级函数优势平衡运算的效率性能,易读且易于理解; 优先考虑运用统计学的常见的平均数、中间数等的高级函数

分类:

后端

标签:

后端

作者介绍

c
codeye
V1