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

2024-06-10 21:54:34 发布

您现在位置:Python中文网/ 问答频道 /正文

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

Tags: 代码用户namelinefloatpayfiletotal
2条回答

是的,这是一个缩进问题:print语句需要位于for循环的“内部”。正如您所看到的,print语句只在for之后执行一次,使用在最后一次循环中计算的变量namehourspay的值

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

相关问题 更多 >