所以我用于工资单问题的代码似乎缺少一些东西,因此它可以计算所有用户。我不确定这是否是缩进问题。我得到了最后一个用户,但不是前 2 个。
file_name = input("Enter the file name: ")
print('n%-15s%-10s%-10s' % ('Name', 'Hours', 'Total Pay'))
for line in open(file_name):
line = line.strip()
if line != '':
(name, wage, hours) = line.split()
wage = float(wage)
hours = float(hours)
pay = wage * hours
print('%-15s%-10d%-10.2f' %(name,hours,pay))
Lambert 34 10.50
Osborne 22 6.25
Giacometti 5 100.70
我的输出:
Name Hours Total Pay
Giacometti 100 503.50
是的,这是一个缩进问题:print
语句需要"在"for
循环中。正如你所看到的,print语句只执行一次,在for
之后,使用变量的值name
,hours
,pay
在循环的最后一次传递中计算。
编辑:更准确地说,print
语句应该在for
循环中的if
语句内。如果一行只是空白,您不想打印任何内容,当然也不想再次打印前一行(使用上一次迭代中的值,您会打印)。
您的print()
未正确缩进。它应该是:
for line in open(file_name):
line = line.strip()
if line != '':
(name, wage, hours) = line.split()
wage = float(wage)
hours = float(hours)
pay = wage * hours
print('%-15s%-10d%-10.2f' %(name,hours,pay))
在 for 循环之前的方式是获取文件中当前行中的员工的工资、工时、姓名和工资,然后再次执行循环替换旧值。循环完成后,它将打印您的变量,其中包含最后一个员工的姓名、工资和工时。
编辑:顺便说一句,您的打印功能应该在if
内,因为如果它只在for
内并且您读取一个空行,它将再次打印最后处理员工的姓名,工时和工资。