鱼C论坛

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

[已解决]python的问题

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



times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ["A", "B", "C", "D", "E", "F", "G"]
    
max_name = [names[0]]
min_name = [names[0]]
max_time = times[0]
min_time = times[0]
    
for i in range(1, len(names)):
    each_name = names[i]
    each_time = times[i] - times[i-1]
    
    if each_time > max_time:
        max_name.clear()
        max_name.append(each_name)
        max_time = each_time
    elif each_time == max_time:
        max_name.append(each_name)
    elif each_time < min_time:
        min_name.clear()
        min_name.append(each_name)
        min_time = each_time
    elif each_time == min_time:
        min_name.append(each_name)
    
print(f"速度最快的是:{min_name},耗费时间是:{min_time}")
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
times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ["A", "B", "C", "D", "E", "F", "G"]
times.insert(0,0)
s=[times[x+1]-times[x] for x in range(len(times)-1) ]    
def find(lst,x):
    ta=[]
    tmp=-1
    for y in range(lst.count(x)):
        tmp=lst.index(x,tmp+1,len(lst))
        ta.append(names[tmp])
    return ta
print(find(s,min(s)),"用时最少,用时:",min(s))
print(find(s,max(s)),"用时最长,用时:",max(s))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-3-8 13:09:09 | 显示全部楼层    本楼为最佳答案   
times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ["A", "B", "C", "D", "E", "F", "G"]
times.insert(0,0)
s=[times[x+1]-times[x] for x in range(len(times)-1) ]    
def find(lst,x):
    ta=[]
    tmp=-1
    for y in range(lst.count(x)):
        tmp=lst.index(x,tmp+1,len(lst))
        ta.append(names[tmp])
    return ta
print(find(s,min(s)),"用时最少,用时:",min(s))
print(find(s,max(s)),"用时最长,用时:",max(s))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

答案对就行呗,我这个代码量好像少一些:
times = [1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ["A", "B", "C", "D", "E", "F", "G"]
times.insert(0,0)
s=[times[x+1]-times[x] for x in range(len(times)-1) ]   
def find(lst,x):
    ta=[]
    for y in range(len(lst)):
        if  x==lst[y]: ta.append(y)
    return ta        
print([names[x] for x in find(s,min(s))],"用时最少,用时:",min(s))
print([names[x] for x in find(s,max(s))],"用时最长,用时:",max(s))
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

使用道具 举报

发表于 2022-3-8 14:34:24 From FishC Mobile | 显示全部楼层
times = [0, 1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
result = []
for n in range(len(names)):
        result.append((names[n], times[n+1] - times[n]))
result.sort(key = lambda x: x[1])
print(f"{result[0][0]} 用时最少, 用时 {result[0][1]}")
print(f"{result[-1][0]} 用时最长, 用时 {result[-1][1]}")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

你这个有多个最小也可以吗{我没运行你代码}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

不能,只能输出一个,因为我用手机写,没有测试
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我问了一下度娘,好像检索所有符合条件的索引值,咋的也得写个函数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

已修改:
times = [0, 1, 3, 3.5, 6.5, 9.5, 10, 10.8]
names = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
result = dict()
for n in range(len(names)):
        t = times[n+1] - times[n]
        if t in result:
                result[t].append(names[n])
        else:
                result[t] = [names[n]]
m, n = max(result.keys()), min(result.keys())
print(f"{result[n]} 用时最少, 用时 {n}")
print(f"{result[m]} 用时最长, 用时 {m}")
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

我的这个有多个最小也可以把。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-12 04:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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