Python重复结构和文件

2024-10-01 07:13:08 发布

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

我有一个关于python程序的问题。我在这个程序中找不到总数和总数。休息很好。有什么办法我能修好吗?我很快就要交这个节目了。如果能给我一些建议,我会很感激的

midSalary = 50000
maxSalary = 60000

def main():

    inFile = open('program7.txt', 'r')    
    lineRead = inFile.readline()
    total = 0.0
    ntotal = 0.0
    count = 0

    while lineRead != '':
       words = lineRead.split()
       for word in words:
          num = float(word)
          total += num
          count += 1          
          print("\nFaculty Member # ",count, ": $" , format(num, '.2f'), sep ="")
          if num >= maxSalary:
              payIncrease(num, .04)
          elif num >= midSalary:
              payIncrease(num, .07)
          else:
              payIncrease(num , .055)
       lineRead = inFile.readline()
   #averagePayRaise = (ntotal - total) / count
    inFile.close()
    for divider in range(45):
        print("-", end ='')
    print("\nTotal Faculty payroll : $", format(total , ",.2f"),sep ="")
    print("The New Total Faculty payroll : $", format(ntotal , ",.2f"),sep ="")
    print("Average Pay Raise : $", format(averagePayRaise, ",.2f"), sep ="")

def payIncrease(amount, prcnt):
    print("Pay Raise Percent : ", format(prcnt*100, ".1f")+"%")
    total = 0.0
    ntotal = 0.0
    count = 0
    salRaise = amount * prcnt
    newSal = amount + salRaise
    print("Pay Raise : $", format(salRaise, ',.2f'), sep ="")
    print("New Salary : $", format(newSal, ',.2f'), sep = "")
    total += amount
    count += 1
    ntotal += newSal
    averagePayRaise = (ntotal - total) / count

main()

Tags: formatcountamountpaynuminfileseptotal
2条回答
def payIncrease(salary):
    if current_sal >= maxSalary: return 0.04
    if current_sal >= midSalary: return 0.07
    return 0.055

def processSalaryData(line):
    """take a line and return current salary and new salary (note that a line is actually just a float)"""
    try:
        current_sal = float(line)
    except ValueError:
         return None

    return current_sal,current_sal + current_sal*payIncrease(current_sal)

def main():
    salaryData = [processSalaryData(line) for line in open("salaries.txt")]
    salaryData = filter(None,salaryData) #filter out invalid data
    adjustments = [b-a for a,b in salaryData]
    old_salaries,new_salaries = zip(*salaryData)

    print "OLD TOTAL PAYROLL :",sum(old_salaries)
    print "NEW TOTAL PAYROLL :",sum(new_salaries)
    print "AVG ADJUSTMENT:",sum(adjustments)/len(adjustments)
    print "MAX SALARY:",max(new_salaries)
    print "MIN SALARY:",min(new_salaries)

默认情况下,在Python中指定的名称是声明它们的函数的local。所以,如果你有:

def main():
    total = 0

def payIncrease():
    total = 0
    total += amount

然后有两个名为total的独立值。解决这一问题的一种方法是使其全球化:

^{pr2}$

请注意,您不希望在payIncrease()内分配total = 0,因为这样会将运行总数重置为0。您可能在将代码分解为payIncrease()函数时添加了这一点,因为Python没有这样做就给了您一个错误。在

相关问题 更多 >