python代码,请大佬指点

P5719 【深基4.例3】分类平均

PavelChen @ 2022-11-05 11:07:45

intDList = []   # 能被k整除的列表
intNList = []   # 不能被k整除的列表
intAvgD = 0     # 能被k整除的平均数
intAvgN = 0     # 不能被k整除的平均数

n,k = map(int,input().split())
if ((n<1) & (n>10000)) | ((k<0) & (k>100)):
    exit()

for index in range(1,n+1):
    if index % k == 0:
        intDList.append(index)
    else:
        intNList.append(index)

intAvgD = sum(intDList)/len(intDList)   # 求平均数
intAvgN = sum(intNList)/len(intNList)   # 求平均数

print(round(intAvgD,1),round(intAvgN,1))    # 保留1位小数

by Terrible @ 2022-11-05 11:17:11

这不过了吗?

①你不必检验数据是否合乎题面

if ((n<1) & (n>10000)) | ((k<0) & (k>100)):
    exit()

round不完全等于输出格式中保留一位小数,如果round第一个参数是整数,这种方式不会输出一位小数,另外当浮点数比较大的时候也不会输出保留一位小数的样子。

可以用"%.1f"%Avg"{:.1f}".format(Avg)转化为格式化字符串形式。


by shuai_ge @ 2022-11-05 11:20:28

我记得map返回的应该是一个对象,而非直接一个列表。所以你想把它具体化,应该使用list()

但是按照你接下来的代码来看,你想指定的n和k大概是一个值,而非一个list。所以我建议你理清思路再写代码。


by shuai_ge @ 2022-11-05 11:27:57

split()函数如果不加第一个参数,等于没有。如果你的意思是想要将每一个字符分割出来,我建议你

n=list(map(int,list(input())))
k=list(map(int,list(input())))

当然这建立在你的想法是将n和k设为列表的时候。

如果要将n和k设为一个值,那不更简单。

n=int(input())
k=int(input())

by Terrible @ 2022-11-05 11:53:53

@shuai_ge ???


by shuai_ge @ 2022-11-05 11:57:59

@Terrible 干啥。


|