Программа расчета ошибок Python - PullRequest
0 голосов
/ 04 ноября 2010

Попросите пользователя ввести информацию о заработной плате для компании. Настройте цикл, который продолжает запрашивать информацию, пока они не введут «ВЫПОЛНЕНО». Для каждого сотрудника задайте три вопроса:

имя (имя и фамилия) часы отработали на этой неделе (только с 1 по 60) почасовая оплата (разрешено только с 6.00 до 20.00) ПРОВЕРЬТЕ отработанные часы и почасовую оплату, и убедитесь, что введено имя.

Рассчитайте зарплату каждого сотрудника и запишите ее в последовательный файл. Обязательно включите логику обработки ошибок ввода-вывода файла.

Включая только еженедельную оплату Еженедельная оплата рассчитывается: Для (1-40 часов) это почасовая ставка * отработанные часы Для (41-60 часов) это (отработанных часов - 40) * (почасовая ставка * 1,5) + почасовая ставка * 40

После того, как все сотрудники введены, прочитайте в последовательном файле список с именем PAY для еженедельной оплаты каждого сотрудника. Сортировать список. Теперь напечатайте самую низкую, самую высокую и среднюю недельную зарплату за неделю.

У меня очевидная проблема с этим кодом

while len(eName)>0:
     eName=raw_input("\nPlease enter the employees' first and last name. ")
     hWork=raw_input("How many hours did they work this week? ")
     hoursWork=int(hWork)
     if hoursWork < 1 or hoursWork > 60:
         print "Employees' can't work less than 1 hour or more than 60 hours!"

     else:
         pRate=raw_input("What is their hourly rate? ")
         payRate=int(pRate)
         if payRate < 6 or payRate > 20:
              print "Employees' wages can't be lower than $6.00 or greater than $20.00!"
         if hoursWork <=40:
              grossPay=hoursWork*payRate
         else:
              grossPay=((hoursWork-40)*(payRate*1.5))+(40*payRate)
         lsthours.append(grossPay)
     print grossPay
     print lsthours



     ePass=raw_input("Type DONE when finished with employees' information. ")
     ePass.upper() == "DONE"
     if ePass == "DONE":
          break
     else:
          continue

Ответы [ 4 ]

2 голосов
/ 04 ноября 2010

Есть несколько проблем с этим кодом:

  • Отступы повсюду.Например, цикл while заканчивается в этом первом операторе if
  • Проверка цикла while почти наверняка ложна (поскольку eName не инициализирована), поэтому цикл никогда не входит в
  • код в ePass.upper () == "DONE" пытается установить переменную ePass, что означает, что тест не будет работать.Вам необходимо:

    , если ePass.upper () == "DONE": перерыв

1 голос
/ 04 ноября 2010

попробуйте это:

lsthours = list()
eName = "start" # initialize to something to start the loop
while eName:
    eName = raw_input("\nPlease enter the employees' first and last name. ")
    if not eName:
        break #loop will exit also when blank name is inserted
    hWork = raw_input("How many hours did they work this week? ")
    hoursWork = int(hWork)
    if hoursWork < 1 or hoursWork > 60:
        print "Employees' can't work less than 1 hour or more than 60 hours!"
        continue #skip

    pRate = raw_input("What is their hourly rate? ")
    payRate = int(pRate)
    if payRate < 6 or payRate > 20:
        print "Employees' wages can't be lower than $6.00 or greater than $20.00!"
        continue #skip
    if hoursWork <= 40:
        grossPay = hoursWork * payRate
    else:
        grossPay = ((hoursWork - 40) * (payRate * 1.5)) + (40 * payRate)
    lsthours.append(grossPay)
    print grossPay
    print lsthours
    ePass = raw_input("Type DONE when finished with employees' information. ")
    if ePass.upper() == "DONE":
        break

В нем по-прежнему отсутствует проверка исключений, но он должен работать.

Проверки "ошибки данных" должны просто замкнуть основной цикл, это проще, но выможет иметь более сложный код и помещать их в собственный цикл.

1 голос
/ 04 ноября 2010

Несколько ошибок, как было указано:

В python отступы решают блоки кода

while:

while logic_test:
    # this is inside while loop
    ....
# this is outside while loop

Некоторые функции в строке не заменяют строку на месте, они возвращают другую строку через возвращаемое значение

upper:

>>> a = "done"
>>> a.upper()
'DONE'
>>> a
'done'
>>> 

Всегда инициализируйте ваши переменные.

Если вы используете методы последовательности, переменная должна была быть определена как последовательность ранее.

>>> t.append('ll')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 't' is not defined
>>> t = []
>>> t.append('ll')
>>> 

Укажите явную область действия

lsthours = []
while len(eName)>0:
    ........
    lsthours.append(grossPay)
1 голос
/ 04 ноября 2010

Ю может сделать что-то вроде этого:

grossPay = 0.0
lsthours = []

eName=raw_input("\nPlease enter the employees' first and last name (type 'PASS' to  exit): ") 

while eName.upper() != "PASS":      
   hWork=raw_input("How many hours did they work this week? ") 
   hoursWork=int(hWork)

   if hoursWork < 1 or hoursWork > 60: 
      print "Employees' can't work less than 1 hour or more than 60 hours!" 
   else: 
      pRate=raw_input("What is their hourly rate? ") 
      payRate=int(pRate) 

      if payRate < 6 or payRate > 20: 
         print "Employees' wages can't be lower than $6.00 or greater than $20.00!" 

      if hoursWork <=40: 
         grossPay=hoursWork*payRate 
      else: 
         grossPay=((hoursWork-40)*(payRate*1.5))+(40*payRate) 

      lsthours.append(grossPay) 

      print grossPay 
      print lsthours 

  eName=raw_input("\nPlease enter the employees' first and last name. (type 'PASS' to exit): ")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...