2017-01-07 2 views
0

whileループを使用して給与計算機を作成しようとしています。私はその過程で道路ブロックを打った。何が欠けていますか? whileループ

name='1' 
    print('We pay your employees payroll!') 
    while name != '0': 
     name=input("\nEnter employee or Enter '0' to quit: ") 
     pr=float(input("Enter Payrate: ")) 
     hrs=float(input("Enter Hours Worked: ")) 
     if hrs <= 40: 
      print("Hours Worked: ", hrs) 
      print("Payrate: ", pr) 
      print("Basepay:", hrs*pr) 
     elif hrs > 40: 
      print('Hours Worked: ', hrs) 
      print("Payrate: ", pr) 
      print("Overtime Rate: ", pr*1.5) 
      print("Overtime Hours: ", hrs-40) 
      print("Basepay: ", (hrs-40)*pr) 
      print("Overtime Pay: ", (pr*1.5)*(hrs-40)) 
      print("Grosspay: ", (pr*1.5)*(hrs-40)+(pr*hrs)) 
    print("Employees Paid, Goodbye!") 

ループがうまくいき、「0」を入力するとループがすぐに終了しないという問題があります。代わりに '0'を入力すると、最初の 'if'文を実行する前にhrs(入力)とpr(入力)を求め続け、「従業員はさようなら」とプログラムを終了します。

+0

@Angelica。 – Tagc

+0

@Steven 'name'の入力後に 'loop break condition'をチェックする必要があります。 –

+0

と思うと、コードはうまくいきます。私は休憩状態が存在するかどうか分からなかった。 – Steven

答えて

1

問題は、whileループ条件が評価されないことです。これは、ループ本体が実行される前の最初のとき以外は評価されません。 nameが '0'に設定されている場合、条件name != 0は偽になりますが、残りのwhileループ本体はもう一度実行されます。

コードは、以下のユーザーは、従業員の名前を入力するとすぐにこの状態をテストし、ユーザが入力した場合、早期ループ本体の外に分割することによって、問題を修正する「0」

print('We pay your employees payroll!') 
while True: 
    name = input("\nEnter employee or Enter '0' to quit: ") 

    if name == '0': 
     break 

    pr = float(input("Enter Payrate: ")) 
    hrs = float(input("Enter Hours Worked: ")) 
    if hrs <= 40: 
     print("Hours Worked: ", hrs) 
     print("Payrate: ", pr) 
     print("Basepay:", hrs * pr) 
    elif hrs > 40: 
     print('Hours Worked: ', hrs) 
     print("Payrate: ", pr) 
     print("Overtime Rate: ", pr * 1.5) 
     print("Overtime Hours: ", hrs - 40) 
     print("Basepay: ", (hrs - 40) * pr) 
     print("Overtime Pay: ", (pr * 1.5) * (hrs - 40)) 
     print("Grosspay: ", (pr * 1.5) * (hrs - 40) + (pr * hrs)) 
print("Employees Paid, Goodbye!") 

出力

We pay your employees payroll! 

Enter employee or Enter '0' to quit: 1 
Enter Payrate: 2 
Enter Hours Worked: 2 
Hours Worked: 2.0 
Payrate: 2.0 
Basepay: 4.0 

Enter employee or Enter '0' to quit: 0 
Employees Paid, Goodbye! 
0

ご質問がはっきりわかりません。私は正解が掲載されていることを知っていますが、私は間違いを訂正しました。

print('We pay your employees payroll!')  
while True: 
    n = raw_input("\nEnter employee or Enter '0' to quit: ") 
    if n.strip() == '0': 
     break 

    pr=float(input("Enter Payrate: ")) 
    hrs=float(input("Enter Hours Worked: ")) 

    if hrs <= 40: 
     print("Hours Worked: ", hrs) 
     print("Payrate: ", pr) 
     print("Basepay:", hrs*pr) 
    elif hrs > 40: 
     print('Hours Worked: ', hrs) 
     print("Payrate: ", pr) 
     print("Overtime Rate: ", pr*1.5) 
     print("Overtime Hours: ", hrs-40) 
     print("Basepay: ", (hrs-40)*pr) 
     print("Overtime Pay: ", (pr*1.5)*(hrs-40)) 
     print("Grosspay: ", (pr*1.5)*(hrs-40)+(pr*hrs)) 

print("Employees Paid, Goodbye!") 

正しく動作します。間違った説明だ

​​

出力

We pay your employees payroll! 
Enter employee or Enter '0' to quit: 1 
Enter Payrate: 10.5 
Enter Hours Worked: 2 
('Hours Worked: ', 2.0) 
('Payrate: ', 10.5) 
('Basepay:',21.0)              
Enter employee or Enter '0' to quit: 0 
Employees Paid, Goodbye! 
+0

これは問題を解決しませんが、ループはすぐに終了します。 – Tagc

+0

@Tagcは私の間違いを整理しました、指してくれてありがとう。 – Angelica

+0

あなたのコードはまだ問題があります。あなたは実際にそれを実行しようとしましたか? 0 終了コード0で終了しました "退職するには「従業員を入力してください」と入力するか「0」を入力してください: – Tagc

関連する問題