鱼C论坛

 找回密码
 立即注册
查看: 1330|回复: 9

[已解决]python的问题

[复制链接]
发表于 2022-3-8 13:09:08 | 显示全部楼层 |阅读模式
6鱼币
  1. times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
  2. names = ["A", "B", "C", "D", "E", "F", "G"]
  3. i = 0
  4. result_times = []
  5. result_names = []
  6. alpha_max = []
  7. alpha_min = []
  8. k = 1
  9. for each in names:
  10.     result_names.append(each)
  11.     result_times.append(round(k,2))
  12.     if i < len(names) - 1:
  13.         k = times[i + 1] - times[i]
  14.         i += 1
  15. max_times = max(result_times)
  16. min_times = min(result_times)
  17. for a,x in enumerate(result_times):
  18.     if x == max_times :
  19.         alpha_max.append(names[a])
  20. for a,x in enumerate(result_times):
  21.     if x == min_times :
  22.         alpha_min.append(names[a])
  23. print("速度最快的是:",alpha_min,"耗费的时间是:",min_times)
  24. print("速度最慢的是:",alpha_max,"耗费的时间是:",max_times)
复制代码




  1. times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
  2. names = ["A", "B", "C", "D", "E", "F", "G"]
  3.    
  4. max_name = [names[0]]
  5. min_name = [names[0]]
  6. max_time = times[0]
  7. min_time = times[0]
  8.    
  9. for i in range(1, len(names)):
  10.     each_name = names[i]
  11.     each_time = times[i] - times[i-1]
  12.    
  13.     if each_time > max_time:
  14.         max_name.clear()
  15.         max_name.append(each_name)
  16.         max_time = each_time
  17.     elif each_time == max_time:
  18.         max_name.append(each_name)
  19.     elif each_time < min_time:
  20.         min_name.clear()
  21.         min_name.append(each_name)
  22.         min_time = each_time
  23.     elif each_time == min_time:
  24.         min_name.append(each_name)
  25.    
  26. print(f"速度最快的是:{min_name},耗费时间是:{min_time}")
  27. print(f"速度最慢的是:{max_name},耗费时间是:{max_time}")
复制代码


任务: 假设有一个密室,每次只能放一个人进去,在进去之前和出来之后都要求摁一下门口的打卡机按钮,打卡机会依次将名字和进出时间戳记录为以下的格式:
times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ["A", "B", "C", "D", "E", "F", "G"]
A 君是从时间戳为 0 的时候进入,从时间戳为 1 的时候出来,总共耗时为 1
B 君是从时间戳为 1 的时候进入,从时间戳为 3 的时候出来,总共耗时为 2
C 君是从时间戳为 3 的时候进入,从时间戳为 3.5 的时候出来,总共耗时为 0.5
G 君是从时间戳为 10 的时候进入,从时间戳为 10.8 的时候出来,总共耗时为 0.8

OK,现在要求大家编写代码,统计给定的数据,打印耗时最长和最短的人员名称。


我的问题:
1. 上面的是我的代码,请问下大佬有没有什么bug或者值得改进的地方?
2.下面的是答案的代码,请问和我的有啥区别,我的代码是否也能满足答案的代码的要求?
最佳答案
2022-3-8 13:09:09
  1. times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
  2. names = ["A", "B", "C", "D", "E", "F", "G"]
  3. times.insert(0,0)
  4. s=[times[x+1]-times[x] for x in range(len(times)-1) ]   
  5. def find(lst,x):
  6.     ta=[]
  7.     tmp=-1
  8.     for y in range(lst.count(x)):
  9.         tmp=lst.index(x,tmp+1,len(lst))
  10.         ta.append(names[tmp])
  11.     return ta
  12. print(find(s,min(s)),"用时最少,用时:",min(s))
  13. print(find(s,max(s)),"用时最长,用时:",max(s))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 13:09:09 | 显示全部楼层    本楼为最佳答案   
  1. times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
  2. names = ["A", "B", "C", "D", "E", "F", "G"]
  3. times.insert(0,0)
  4. s=[times[x+1]-times[x] for x in range(len(times)-1) ]   
  5. def find(lst,x):
  6.     ta=[]
  7.     tmp=-1
  8.     for y in range(lst.count(x)):
  9.         tmp=lst.index(x,tmp+1,len(lst))
  10.         ta.append(names[tmp])
  11.     return ta
  12. print(find(s,min(s)),"用时最少,用时:",min(s))
  13. print(find(s,max(s)),"用时最长,用时:",max(s))
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 13:49:59 | 显示全部楼层
本帖最后由 wp231957 于 2022-3-8 14:28 编辑

答案对就行呗,我这个代码量好像少一些:
  1. times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
  2. names = ["A", "B", "C", "D", "E", "F", "G"]
  3. times.insert(0,0)
  4. s=[times[x+1]-times[x] for x in range(len(times)-1) ]   
  5. def find(lst,x):
  6.     ta=[]
  7.     for y in range(len(lst)):
  8.         if  x==lst[y]: ta.append(y)
  9.     return ta        
  10. print([names[x] for x in find(s,min(s))],"用时最少,用时:",min(s))
  11. print([names[x] for x in find(s,max(s))],"用时最长,用时:",max(s))

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 14:23:53 | 显示全部楼层
只要没有代码行数要求,运行一次答案对了就行,然后是学到了什么。
例子主要是教if……elif……elif……else 的循环运用。
2楼大佬主要是教函数的运用。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 14:34:24 From FishC Mobile | 显示全部楼层
  1. times = [0, 1, 3, 3.5, 6.5, 9.5, 10, 10.8]
  2. names = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
  3. result = []
  4. for n in range(len(names)):
  5.         result.append((names[n], times[n+1] - times[n]))
  6. result.sort(key = lambda x: x[1])
  7. print(f"{result[0][0]} 用时最少, 用时 {result[0][1]}")
  8. print(f"{result[-1][0]} 用时最长, 用时 {result[-1][1]}")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 14:39:24 From FishC Mobile | 显示全部楼层
傻眼貓咪 发表于 2022-3-8 14:34

你这个有多个最小也可以吗{我没运行你代码}
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 14:44:38 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-3-8 14:39
你这个有多个最小也可以吗{我没运行你代码}

不能,只能输出一个,因为我用手机写,没有测试
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 14:48:30 From FishC Mobile | 显示全部楼层
傻眼貓咪 发表于 2022-3-8 14:44
不能,只能输出一个,因为我用手机写,没有测试

我问了一下度娘,好像检索所有符合条件的索引值,咋的也得写个函数
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 14:54:35 From FishC Mobile | 显示全部楼层
wp231957 发表于 2022-3-8 14:39
你这个有多个最小也可以吗{我没运行你代码}

已修改:
  1. times = [0, 1, 3, 3.5, 6.5, 9.5, 10, 10.8]
  2. names = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
  3. result = dict()
  4. for n in range(len(names)):
  5.         t = times[n+1] - times[n]
  6.         if t in result:
  7.                 result[t].append(names[n])
  8.         else:
  9.                 result[t] = [names[n]]
  10. m, n = max(result.keys()), min(result.keys())
  11. print(f"{result[n]} 用时最少, 用时 {n}")
  12. print(f"{result[m]} 用时最长, 用时 {m}")
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-3-8 15:01:47 | 显示全部楼层
wp231957 发表于 2022-3-8 14:39
你这个有多个最小也可以吗{我没运行你代码}

我的这个有多个最小也可以把。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-30 00:57

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表