1370607278 发表于 2022-3-8 13:09:08

python的问题

times =
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 - times
      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)
for a,x in enumerate(result_times):
    if x == min_times :
      alpha_min.append(names)
print("速度最快的是:",alpha_min,"耗费的时间是:",min_times)
print("速度最慢的是:",alpha_max,"耗费的时间是:",max_times)





times =
names = ["A", "B", "C", "D", "E", "F", "G"]
   
max_name = ]
min_name = ]
max_time = times
min_time = times
   
for i in range(1, len(names)):
    each_name = names
    each_time = times - times
   
    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 =
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.下面的是答案的代码,请问和我的有啥区别,我的代码是否也能满足答案的代码的要求?

wp231957 发表于 2022-3-8 13:09:09

times =
names = ["A", "B", "C", "D", "E", "F", "G"]
times.insert(0,0)
s=-times 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)
    return ta
print(find(s,min(s)),"用时最少,用时:",min(s))
print(find(s,max(s)),"用时最长,用时:",max(s))

wp231957 发表于 2022-3-8 13:49:59

本帖最后由 wp231957 于 2022-3-8 14:28 编辑

答案对就行呗,我这个代码量好像少一些:
times =
names = ["A", "B", "C", "D", "E", "F", "G"]
times.insert(0,0)
s=-times for x in range(len(times)-1) ]   
def find(lst,x):
    ta=[]
    for y in range(len(lst)):
      ifx==lst: ta.append(y)
    return ta      
print( for x in find(s,min(s))],"用时最少,用时:",min(s))
print( for x in find(s,max(s))],"用时最长,用时:",max(s))

elven08 发表于 2022-3-8 14:23:53

只要没有代码行数要求,运行一次答案对了就行,然后是学到了什么。
例子主要是教if……elif……elif……else 的循环运用。
2楼大佬主要是教函数的运用。

傻眼貓咪 发表于 2022-3-8 14:34:24

times =
names = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
result = []
for n in range(len(names)):
        result.append((names, times - times))
result.sort(key = lambda x: x)
print(f"{result} 用时最少, 用时 {result}")
print(f"{result[-1]} 用时最长, 用时 {result[-1]}")

wp231957 发表于 2022-3-8 14:39:24

傻眼貓咪 发表于 2022-3-8 14:34


你这个有多个最小也可以吗{我没运行你代码}

傻眼貓咪 发表于 2022-3-8 14:44:38

wp231957 发表于 2022-3-8 14:39
你这个有多个最小也可以吗{我没运行你代码}

不能,只能输出一个{:10_266:},因为我用手机写,没有测试

wp231957 发表于 2022-3-8 14:48:30

傻眼貓咪 发表于 2022-3-8 14:44
不能,只能输出一个,因为我用手机写,没有测试

我问了一下度娘,好像检索所有符合条件的索引值,咋的也得写个函数

傻眼貓咪 发表于 2022-3-8 14:54:35

wp231957 发表于 2022-3-8 14:39
你这个有多个最小也可以吗{我没运行你代码}

已修改:times =
names = ['A', 'B', 'C', 'D', 'E', 'F', 'G']
result = dict()
for n in range(len(names)):
        t = times - times
        if t in result:
                result.append(names)
        else:
                result = ]
m, n = max(result.keys()), min(result.keys())
print(f"{result} 用时最少, 用时 {n}")
print(f"{result} 用时最长, 用时 {m}")

1370607278 发表于 2022-3-8 15:01:47

wp231957 发表于 2022-3-8 14:39
你这个有多个最小也可以吗{我没运行你代码}

我的这个有多个最小也可以把。
页: [1]
查看完整版本: python的问题