簡體   English   中英

如何實現一個函數來打印所有相似的字符串?

[英]How can I implement a function to print out for all similar strings?

所以我寫了這段代碼,它返回總時間parse_time和總距離parse_int ,這是我的代碼。

def getDigits(s):
answer = []
for char in s.split(";"):
    k = ""
    for split_s in char:
        if split_s.isdigit():
            k += split_s
    if k:
        answer.append(k)
return answer

def parse_time(s):
    l = getDigits(s)
    r = (int(l[0])//100)*60
    t = ((int(l[0])//100)*100)
    s = int(l[0])-t
    return r+s
print(parse_time(s='cycling;time:1,49;distance:2'))

def parse_dist(s):
    l = getDigits(s)
    return l[1]+ 'km'
print(parse_dist(s='cycling;time:1,49;distance:2'))

def jogging_average(activities: list[str]):

現在我只想知道如何jogging_average(activities: list[str])函數jogging_average(activities: list[str])來返回每個有慢跑的字符串的parse_distparse_time 我怎樣才能做到這一點??

順便說一下,所有的輸入都將來自activities: list ,它是

activities = [
"cycling;time:1,49;distance:2",
"jogging;time:40,11;distance:6",
"swimming;time:1,49;distance:1.2",
"jogging;time:36,25;distance:5.3",
"hiking;time:106,01;distance:8.29"
]

會為你循環排序嗎?

for activity in activities:
    if "jogging" in activity:
       print(parse_dist(activity))
       print(parse_time(activity))

使用實際的數據結構很容易。 查看Activity

from typing import NamedTuple,List 
from statistics import mean

class Activity(NamedTuple):
  type: str
  time: int
  distance: float

def get_digits(s):
  answer = []
  for char in s.split(";"):
      k = ""
      for split_s in char:
          if split_s.isdigit():
              k += split_s
      if k:
          answer.append(k)
  return answer

def parse_time(l):
    l = get_digits(l)
    r = (int(l[0])//100)*60
    t = ((int(l[0])//100)*100)
    s = int(l[0])-t
    return r+s

def parse(test:str) -> Activity:
  fields = test.split(';')
  type = fields[0]
  time = parse_time(fields[1][fields[1].find(':')+1:])
  distance = float(fields[2][fields[2].find(':')+1:])
  return Activity(type,time,distance)


def get_avg_time(lst:List[Activity],activity_type:str) -> float:
  return mean(act.time for act in lst if act.type == activity_type)

activities = [
"cycling;time:1,49;distance:2",
"jogging;time:40,11;distance:6",
"swimming;time:1,49;distance:1.2",
"jogging;time:36,25;distance:5.3",
"hiking;time:106,01;distance:8.29"
]
activities: List[Activity] = [parse(act) for act in activities]
activity_type = 'jogging'
avg_time: float = get_avg_time(activities,activity_type)
print(f'Avg activity time of {activity_type} is {avg_time}')

輸出

Avg activity time of jogging is 2298

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM