鱼C论坛

 找回密码
 立即注册
查看: 2226|回复: 10

[已解决]请问想实现以下目的,代码应该怎么写

[复制链接]
发表于 2020-4-27 22:11:52 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
1.所有投标金额的算术平均值记为A1;
2.凡是超过A1[0.8-1.2]范围的金额剔除;
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))

最佳答案
2020-4-28 21:04:11
时刻三七 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-27 23:41:35 | 显示全部楼层
本帖最后由 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-28 20:54:26 | 显示全部楼层
txxcat 发表于 2020-4-27 23:41
问题实在太多,只好推倒重来:

谢谢你的回答,还有个问题麻烦再帮解决一下
现在这个函数只能输入整数,而且最好输出的分数也是整数,请问要在哪里改动可以接受浮点数
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-28 21:04:11 | 显示全部楼层    本楼为最佳答案   
时刻三七 发表于 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)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-28 21:07:39 | 显示全部楼层
txxcat 发表于 2020-4-27 23:41
问题实在太多,只好推倒重来:

我输入一下值时,fenshu(199999,1983243,1897543,179999)
报出如下错误:ZeroDivisionError: division by zero
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-28 21:35:37 | 显示全部楼层
txxcat 发表于 2020-4-28 21:04
输入没有限制,浮点数也可以输入,输出也是浮点数,只是最后print使用了整数格式,改一改最后的格式就可 ...

明白了,还有一点,如果我想读取一个文件里的报价,我应该怎么改呢,
f = open(r'E:\a.txt', encoding='utf-8')    # 加上 encoding 参数
baojia = str(f.read())
我现在是这样写的,但读取的类型好像不对
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-28 21:54:57 | 显示全部楼层
时刻三七 发表于 2020-4-28 21:35
明白了,还有一点,如果我想读取一个文件里的报价,我应该怎么改呢,
f = open(r'E:\a.txt', encoding=' ...

你读出来的就是字符串,需要分解然后转成数字,具体怎么写要看文件格式。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-4-29 21:23:24 | 显示全部楼层
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)

请问还有什么问题吗
我的文本格式就是第一个报价 空格 第二个报价
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 21:25:09 | 显示全部楼层
时刻三七 发表于 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('没有符合条件的金额,请检查金额。')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-4-29 21:54:27 | 显示全部楼层
本帖最后由 txxcat 于 2020-4-30 08:03 编辑

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-4-29 22:00:41 | 显示全部楼层
时刻三七 发表于 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('请检查报价文件。')
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-1-11 19:46

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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