为什么我只得到循环中的最后一项?



所以我用于工资单问题的代码似乎缺少一些东西,因此它可以计算所有用户。我不确定这是否是缩进问题。我得到了最后一个用户,但不是前 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之后,使用变量的值namehourspay在循环的最后一次传递中计算。

编辑:更准确地说,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内并且您读取一个空行,它将再次打印最后处理员工的姓名,工时和工资。

最新更新