请问想实现以下目的,代码应该怎么写
1.所有投标金额的算术平均值记为A1;2.凡是超过A1范围的金额剔除;
3.计算剩下投标金额的算术平均值记为A2;
4.输出投标得分=100-100*n*abs(投标金额-A2)/A2,当投标金额大于A2时,n=1,反之n=0.75
我写的代码是这样的,显然不能运行,请大家帮忙看看有哪些问题,谢谢
def fenshu(baojia):
leng = str(baojia)
changdu1 = leng.count()
baojia2 = []
n = 0
for A0 in range(changdu1):
A0 += A0
A1 = A0 % changdu1
A11 = A1*0.8
A12 = A1*1.2
if A0 > A12 or A0 < A11:
none
else:
baojia2.append(a0)
changdu2 = baojia2.count()
for A02 in range(changdu2):
A02 += A02
A2 = A02 % changdu2
if A02 > A2:
n =1
else:
n=0.75
AO3 = abs(A02 - A2)
print('报价得分为:%d' %(100-100*n*A03/A2))
本帖最后由 txxcat 于 2020-4-28 11:00 编辑
问题实在太多,只好推倒重来:
def fenshu(*baojia): #加*才能接受多参数
A1=sum(baojia)/len(baojia) #计算金额平均数
bj_min=A1*0.8
bj_max=A1*1.2
newbaojia=[]
for i in baojia: #剔除不合条件的金额
if bj_min<=i<=bj_max:
newbaojia.append(i)
A2=sum(newbaojia)/len(newbaojia) #计算符合条件的金额平均数
for j in newbaojia:
n=1 if j>A2 else 0.75 #计算n值
print('投标金额:%d 报价得分:%d' % (j,(100-100*n*abs(j-A2)/A2)))
#测试
fenshu(8999,9999,12000,12500,13000,13888,14000,16000)
txxcat 发表于 2020-4-27 23:41
问题实在太多,只好推倒重来:
谢谢你的回答,还有个问题麻烦再帮解决一下
现在这个函数只能输入整数,而且最好输出的分数也是整数,请问要在哪里改动可以接受浮点数 时刻三七 发表于 2020-4-28 20:54
谢谢你的回答,还有个问题麻烦再帮解决一下
现在这个函数只能输入整数,而且最好输出的分数也是整数,请 ...
输入没有限制,浮点数也可以输入,输出也是浮点数,只是最后print使用了整数格式,改一改最后的格式就可以了:
def fenshu(*baojia): #加*才能接受多参数
A1=sum(baojia)/len(baojia) #计算金额平均数
bj_min=A1*0.8
bj_max=A1*1.2
newbaojia=[]
for i in baojia: #剔除不合条件的金额
if bj_min<=i<=bj_max:
newbaojia.append(i)
A2=sum(newbaojia)/len(newbaojia) #计算符合条件的金额平均数
for j in newbaojia:
n=1 if j>A2 else 0.75 #计算n值
print('投标金额:%.2f 报价得分:%.2f' % (j,(100-100*n*abs(j-A2)/A2))) #假设输出2位小数
#测试
fenshu(89.99,99.99,120.5,125.48,130.80,138.88,140.6,166.66)
txxcat 发表于 2020-4-27 23:41
问题实在太多,只好推倒重来:
我输入一下值时,fenshu(199999,1983243,1897543,179999)
报出如下错误:ZeroDivisionError: division by zero txxcat 发表于 2020-4-28 21:04
输入没有限制,浮点数也可以输入,输出也是浮点数,只是最后print使用了整数格式,改一改最后的格式就可 ...
明白了,还有一点,如果我想读取一个文件里的报价,我应该怎么改呢,
f = open(r'E:\a.txt', encoding='utf-8') # 加上 encoding 参数
baojia = str(f.read())
我现在是这样写的,但读取的类型好像不对 时刻三七 发表于 2020-4-28 21:35
明白了,还有一点,如果我想读取一个文件里的报价,我应该怎么改呢,
f = open(r'E:\a.txt', encoding=' ...
你读出来的就是字符串,需要分解然后转成数字,具体怎么写要看文件格式。 txxcat 发表于 2020-4-28 21:54
你读出来的就是字符串,需要分解然后转成数字,具体怎么写要看文件格式。
f = open(r'E:\a.txt', encoding='utf-8') # 加上 encoding 参数
b = list(f.read())
baojia = []
for each in b:
if each != ' ':
baojia.append(each)
请问还有什么问题吗
我的文本格式就是第一个报价 空格 第二个报价 时刻三七 发表于 2020-4-28 21:07
我输入一下值时,fenshu(199999,1983243,1897543,179999)
报出如下错误:ZeroDivisionError: division b ...
金额相差太悬殊,1和4是十万级,2和3是百万级,平均之后全都不符合标准,所有报除0错,我猜你应该是金额输错了,不过在代码里加个判断比较好:
def fenshu(*baojia): #加*才能接受多参数
A1=sum(baojia)/len(baojia) #计算金额平均数
bj_min=A1*0.8
bj_max=A1*1.2
newbaojia=[]
for i in baojia: #剔除不合条件的金额
if bj_min<=i<=bj_max:
newbaojia.append(i)
if newbaojia:
A2=sum(newbaojia)/len(newbaojia) #计算符合条件的金额平均数
for j in newbaojia:
n=1 if j>A2 else 0.75 #计算n值
print('投标金额:%.2f 报价得分:%.2f' % (j,(100-100*n*abs(j-A2)/A2))) #假设输出2位小数
else:
print('没有符合条件的金额,请检查金额。')
本帖最后由 txxcat 于 2020-4-30 08:03 编辑
{:10_277:} 时刻三七 发表于 2020-4-29 21:23
f = open(r'E:\a.txt', encoding='utf-8') # 加上 encoding 参数
b = list(f.read())
baojia = []
def fenshu(baojia): #去掉*,因为参数本身就是一个数组
A1=sum(baojia)/len(baojia) #计算金额平均数
bj_min=A1*0.8
bj_max=A1*1.2
newbaojia=[]
for i in baojia: #剔除不合条件的金额
if bj_min<=i<=bj_max:
newbaojia.append(i)
if newbaojia:
A2=sum(newbaojia)/len(newbaojia) #计算符合条件的金额平均数
for j in newbaojia:
n=1 if j>A2 else 0.75 #计算n值
print('投标金额:%.2f 报价得分:%.2f' % (j,(100-100*n*abs(j-A2)/A2))) #假设输出2位小数
else:
print('没有符合条件的金额,请检查金额。')
bj = []
baojia = []
with open(r'E:\a.txt', encoding='utf-8') as f:
for i in f: #读取每一行
bj.extend(i.split()) #把每行数据分解
if bj: #如果为空,说明报价文件错误
for j in bj:
baojia.append(float(j))#转换成数字
fenshu(baojia)
else:
print('请检查报价文件。')
页:
[1]