2014-10-29 57 views
0

我有一个关于我的Python程序的问题。我无法在这个程序中找到总数和总数。休息工作正常。有什么办法可以解决这个问题吗?我很快就有了这个计划。我会很感激任何提示我可以得到:d感谢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() 
+0

我得到的解决方案为0为em – spuriousarbiter 2014-10-29 23:01:44

+0

您能显示输入,预期输出和当前输出吗? – 2014-10-29 23:04:38

+0

共有教师工资:$ 1,310,555.15 新的总工资单系:$ 0.00 平均加薪:$ -59,570.69 我得到下面说 – spuriousarbiter 2014-10-29 23:06:45

回答

0

默认情况下,分配给在Python的名字是当地在声明它们的功能。所以,如果您有:

def main(): 
    total = 0 

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

那么你有命名total独立的值。解决方法之一是让全球:

total = 0 

def main(): 
    global total 
    total = 0 

def payIncrease(): 
    global total 
    total += amount 

请注意,你不希望分配total = 0payIncrease(),因为那样会跑步的总重为0。你可能补充说,当你打破了你代码到payIncrease()函数中,因为Python没有给你一个错误。

+0

我必须让ntotal一个全局变量以及修复错误? – spuriousarbiter 2014-10-29 23:12:16

+0

你觉得怎么样?如果你不这样做,它会起作用吗? – 2014-10-29 23:12:39

+0

我需要再次查看我的代码。我得到的是平均加薪的负数,我的ntotal打印的是最后一个newSal – spuriousarbiter 2014-10-29 23:18:49

0
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) 
+0

都能跟得上我写这一次我我的代码更新的答案之一。我试图通过调用另一个函数来简化我的代码。否则它工作得很好 – spuriousarbiter 2014-10-29 23:05:25

+0

谢谢你!这也适用。希望我可以像你一样编写代码蟒蛇大师!有一天,我猜大声笑 – spuriousarbiter 2014-10-29 23:27:16