diyer6 发表于 2019-9-19 09:44

初学Pyhon,有几个问题,请大家指正,谢谢。

'''
一、背景:

1、现有15万元奖励资金,要分配给4户企业,但不能平均分配。
2、4户企业都不同程度自己购买了新设备。
3、领导决定:(1)哪户企业自己花的钱多,就给哪户企业分配的多。
             (2)15万元,一毛钱都不能剩,全部分配给企业。

二、思路:奖励总额÷(4户企业投资总和) ×该企业投资额

三、求助:初学Pyhon,有几个问题,请大家指正,谢谢。

1、因为4户企业名称长短不一,为了好看,怎么让 投资额 都右对齐?我都是用空格敲的...
2、需求很简单,我感觉我代码写的很繁复,有没有更简便的写法?
3、我英语小学水平,名字不会起,都是百度翻译的,麻烦看下我这种起名方式对不对?应该怎样改进?
4、这段程序下来,企业分得的金额,小数点后面数字太多,钱现金不好给。
   但是企业花钱肯定不是整数,怎么能让钱好给,又能把15万元分的一毛不剩?
   
'''

print(' '*5 + '计算4户企业奖励分配','\n')
reward = 150000   # 奖励资金15万元
shendu_yinxian = float(input('申都引线 请输入您的投资额:'))# 取得 申都引线 的投资额
sen_huang = float(input('    森煌 请输入您的投资额:'))       # 取得 森煌 的投资额
sheng_de_xing = float(input('盛德兴 请输入您的投资额:'))   # 取得 盛德兴 的投资额
jin_feng = float(input('    金凤 请输入您的投资额:'))      # 取得 金凤 的投资额
print()
print('申都引线 的投资额为:',shendu_yinxian,'\n',
      '   森煌 的投资额为:',sen_huang,'\n',
      ' 盛德兴 的投资额为:',sheng_de_xing,'\n'
      '    金凤 的投资额为:',jin_feng)
four_sum = shendu_yinxian+sen_huang+sheng_de_xing+jin_feng    # 计算取得 4户企业 的投资总额
print('\n','4户烟花爆竹生产企业投资总和为:',four_sum)
weight = reward/(shendu_yinxian+sen_huang+sheng_de_xing+jin_feng)# 计算取得 4户企业 的分配权重或比例(专业术语不知道叫啥?)
print('\n','奖励分配权重为:',weight)
reward_shendu_yinxian = weight * shendu_yinxian               # 计算取得 申都引线 的奖励分配
reward_sen_huang = weight * sen_huang                         # 计算取得 森煌 的奖励分配
reward_sheng_de_xing = weight * sheng_de_xing               # 计算取得 盛德兴 的奖励分配
reward_jin_feng = weight * jin_feng                           # 计算取得 金凤 的奖励分配
print('\n','申都引线 的奖励金额为:',reward_shendu_yinxian,'\n',
      '    森煌 的奖励金额为:',reward_sen_huang,'\n',
      '盛德兴 的奖励金额为:',reward_sheng_de_xing,'\n'
      '   金凤 的奖励金额为:',reward_jin_feng)
reward_four_sum = reward_shendu_yinxian+reward_sen_huang+ \
                  reward_sheng_de_xing+reward_jin_feng      # 计算奖励分配的资金总和(15万元一毛都不能剩)
print('\n','4户企业分配的奖励总和为:',reward_four_sum)

diyer6 发表于 2019-9-19 09:49

本帖最后由 diyer6 于 2019-9-19 11:33 编辑

这个怎么办?谢谢

井右寺 发表于 2019-9-19 10:10

打包exe pyinstaller
1、对齐,没有比较好的办法,用图形化可以。。。或者input("输入?\n__")这样子,把问题放一行,输入提到下一行去
2、这一点都不复杂啊
3、命名这个参照自己的规范,不冲突、不覆盖库函数、清晰、风格一致就行
4、Math,四舍五入还是别的什么,精确到哪一位,由你的需求决定。。。。

ssynihao 发表于 2019-9-19 11:22

尾差有没有考虑过,毕竟到最后金额最小单位都是分,四舍五入什么的是要的,那如果出现尾差1分的情况没有处理机制,可能就会剩1分没有分,或者多分1分了

L_yj 发表于 2019-9-19 11:31

格式的话试试这个方式:https://www.cnblogs.com/zhz-8919/p/9767357.html

羊毛丶 发表于 2019-9-19 12:53

最后一行加个 input('按任意键退出')就不会消失了

井右寺 发表于 2019-9-19 13:59

diyer6 发表于 2019-9-19 09:49
这个怎么办?谢谢

因为程序已经执行完了啊
执行完了肯定会回收所有的资源的
要么,你就加个input阻塞程序在那个位置
一般这个样子
while True:
    #你的逻辑
    _input = input("按Q退出程序,或者任意键继续")
    if _input in ('Q','q'):
      break

diyer6 发表于 2019-9-29 11:50

ssynihao 发表于 2019-9-19 11:22
尾差有没有考虑过,毕竟到最后金额最小单位都是分,四舍五入什么的是要的,那如果出现尾差1分的情况没有处 ...

谢谢,确实出现这个情况了,应该怎么处理啊?

excel 里面无论什么数字,都可以做到15万。

可在程序里,用 round 不保留小数点,出现了149999??

当然几率很小,但我真的试出来了......

应该怎么解决?谢谢

diyer6 发表于 2019-9-29 11:53

print('\n\n',' '*5 + '计算4户生产企业奖励分配','\n')
reward = 150000   # 奖励资金15万元
shendu_yinxian = float(input('申都引线 请输入您的投资额:'))# 取得 申都引线 的投资额
sen_huang = float(input('    森煌 请输入您的投资额:'))       # 取得 森煌 的投资额
sheng_de_xing = float(input('盛德兴 请输入您的投资额:'))   # 取得 盛德兴 的投资额
jin_feng = float(input('    金凤 请输入您的投资额:'))      # 取得 金凤 的投资额
print()
print('申都引线 的投资额为:',shendu_yinxian,'\n',
      '   森煌 的投资额为:',sen_huang,'\n',
      ' 盛德兴 的投资额为:',sheng_de_xing,'\n'
      '    金凤 的投资额为:',jin_feng)
four_sum = shendu_yinxian+sen_huang+sheng_de_xing+jin_feng    # 计算取得 4户企业 的投资总额
print('\n','4户生产企业投资总和为:',four_sum)
weight = reward/(shendu_yinxian+sen_huang+sheng_de_xing+jin_feng)# 计算取得 4户企业 的分配权重或比例(专业术语不知道叫啥?)
print('\n','奖励分配权重为:',weight)
reward_shendu_yinxian = round(weight * shendu_yinxian)               # 计算取得 申都引线 的奖励分配
reward_sen_huang = round(weight * sen_huang)                         # 计算取得 森煌 的奖励分配
reward_sheng_de_xing = round(weight * sheng_de_xing)               # 计算取得 盛德兴 的奖励分配
reward_jin_feng = round(weight * jin_feng)                           # 计算取得 金凤 的奖励分配
print('\n','申都引线 的奖励金额为:',reward_shendu_yinxian,'\n',
      '    森煌 的奖励金额为:',reward_sen_huang,'\n',
      '盛德兴 的奖励金额为:',reward_sheng_de_xing,'\n'
      '   金凤 的奖励金额为:',reward_jin_feng)
reward_four_sum = reward_shendu_yinxian+reward_sen_huang+ \
                  reward_sheng_de_xing+reward_jin_feng      # 计算奖励分配的资金总和(15万元一毛都不能剩)
print('\n','4户生产企业分配的奖励总和为:',reward_four_sum)
input('\n\n按任意键退出')

ssynihao 发表于 2019-9-29 14:50

diyer6 发表于 2019-9-29 11:50
谢谢,确实出现这个情况了,应该怎么处理啊?

excel 里面无论什么数字,都可以做到15万。


以实际分红分下来的钱减去一开始设定的总分红,存在差值即做尾差处理,少1分或多1分则将这1分分给分红最多的或者随机。尾差大于1分情况下,以1分1分的方式来分尾差,保证公平,做好除法,以差值/0.01,得到处理次数,1分1分分下去,设定好循环机制,保证分完
页: [1] 2
查看完整版本: 初学Pyhon,有几个问题,请大家指正,谢谢。