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

6vl6ewon  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(330)

因此,我用于工资问题的代码似乎缺少某些内容,因此它会计算所有用户。我不确定这是否是压痕问题。我得到的是最后一个用户,但不是前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
q9rjltbz

q9rjltbz1#

是的,这是一个缩进问题: print 语句必须“在”内部 for 环正如您所看到的,print语句只在 for ,使用变量的值 name , hours , pay 在最后一次通过循环时计算。
编辑:更准确地说,是 print 语句应该在 if 内部声明 for 环如果一行是空的,您不想打印任何内容,当然也不想再次打印上一行(使用上一次迭代中的值,您会这样做)。

68de4m5k

68de4m5k2#

你的 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 当你读到一个空行时,它会再次打印最后一个处理过的员工的姓名、工作时间和工资。

相关问题