codeye
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高级函数优势平衡运算的效率性能,易读且易于理解; 优先考虑运用统计学的常见的平均数、中间数等的高级函数
作者介绍