| 
 | 
 
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册  
 
x
 
""" 
【操作】要求输入员工的薪资,若薪资小于0则重新输入。 
最后打印出录入员工的数量和薪资明细,以及平均薪资 
""" 
- empNum = 0
 
 - salarySum = 0
 
 - salarys = []
 
 - while True:
 
 -         s = input("请输入员工的薪资(按Q或q结束)")
 
 -         if s.upper() == 'Q':
 
 -                 print("录入完成,退出")
 
 -                 break
 
 -         if float(s) < 0:
 
 -                 continue
 
 -         empNum += 1
 
 -         salarys.append(float(s))
 
 -         salarySum += float(s)
 
 - print(f'员工人数: 总计 {empNum} 人')
 
 - print('录入薪资: ',salarys)
 
 - print(f'平均薪资: {salarySum/empNum:.2f}')
 
  复制代码 
 
 
我想让录入薪资的列表各元素保留2位小数(不能是字符串),能否实现? 
 
= RESTART: D:\Users\Administrator\Desktop\新建 文本文档.py 
请输入员工的薪资(按Q或q结束)1 
请输入员工的薪资(按Q或q结束)2 
请输入员工的薪资(按Q或q结束)3 
请输入员工的薪资(按Q或q结束)4 
请输入员工的薪资(按Q或q结束)5 
请输入员工的薪资(按Q或q结束)q 
录入完成,退出 
员工人数: 总计 5 人 
录入薪资:  [1.0, 2.0, 3.0, 4.0, 5.0] 
平均薪资: 3.00
 本帖最后由 isdkz 于 2023-1-6 17:08 编辑 
他的输出形式是由底层的C代码来决定的,既然 1.00 和 1.0 的值都一样,他就没必要显示 1.00, 
 
这样显得有点多余,你在 python 中 print 一下 1.00 你就可以看到输出的结果会变成 1.0, 
 
 
 
当然,如果你对 c 语言比较熟悉的话,你可以去修改 python 的源码再重新编译,以达到你想要的输出格式, 
 
除此之外 python 也提供了相应的接口,可以让我们改变一些默认的行为,那就是魔法方法。 
 
其中 __str__ 就是在输出的时候会被调用的魔法方法,你可以通过重写这个魔法方法改变它默认的输出行为。 
 
对于你的诉求,通过重写列表的 __str__ 方法来实现 
 
- class Nlist(list):
 
 -     def __str__(self):
 
 -         return f'[{", ".join(map(lambda x: f"{x:.2f}", self))}]'
 
 - # 一、新加上面几行代码
 
  
- empNum = 0
 
 - salarySum = 0
 
 - salarys = Nlist()             # 二、改了这里
 
 - while True:
 
 -         s = input("请输入员工的薪资(按Q或q结束)")
 
 -         if s.upper() == 'Q':
 
 -                 print("录入完成,退出")
 
 -                 break
 
 -         if float(s) < 0:
 
 -                 continue
 
 -         empNum += 1
 
 -         salarys.append(float(s))
 
 -         salarySum += float(s)
 
 - print(f'员工人数: 总计 {empNum} 人')
 
 - print('录入薪资: ',salarys)
 
 - print(f'平均薪资: {salarySum/empNum:.2f}')
 
  复制代码 
 
 
 |   
 
 
 
 |