2017-10-10 23 views
2

私は月に$ 20のために使うことができる400分を持っているセラーの携帯電話計画でプログラムを作っています。ユーザーが1ヶ月で400分以上を使用する場合、彼らの計画で400分を超えて1分間に5セントが課金されます。今月使用した分の数をユーザに知らせ、その請求書を計算します。その人が負の整数を入力したかどうかを確認してください(次に、 "負の数を入力しました")。私に間違った答えを与えるPythonプログラム

マイコード:

def main(): 
    # the bill will always be at least 20 
    res = 20 
    # again is a sentinel 
    # we want the user to at least try the program once 
    again = True 
    while again: 
     minutes = int(input("How many minutes did you use this month? ")) 
     # error correction loop 
     # in the case they enter negative minutes 
     while minutes < 0: 
      print("You entered a negative number. Try again.") 
      # you must cast to an int 
      # with int() 
      minutes = int(input("How many minutes did you use this month? ")) 
     # get the remainder 
     remainder = minutes - 400 
     # apply five cent charge 
     if remainder > 0: 
      res += remainder * 0.05 
     print("Your monthly bill is: ","$",res) 

     det = input("Would you like to try again? Y/N: ") 
     again = (det == "Y")  
main() 

私は600に入力した場合、私は$ 30は、正しい答えを得ます。それが再び行くように頼んだら、私はYと答えて、500のような何かを入力してください。もう一度yをタイプして値段を下げると値段が上がります。分が下がったときのように見えますが、分が上がると価格は上がるはずです。

私は間違っています。そして、あなたの時間をありがとう。

答えて

2

resをループ内に移動してリセットする必要があります。このように:

#!/usr/bin/env python3.6 


def main(): 
    # again is a sentinel 
    # we want the user to at least try the program once 
    again = True 
    while again: 
     res = 20 # Reset this variable 
     minutes = int(input("How many minutes did you use this month? ")) 
     # error correction loop 
     # in the case they enter negative minutes 
     while minutes < 0: 
      print("You entered a negative number. Try again.") 
      # you must cast to an int 
      # with int() 
      minutes = int(input("How many minutes did you use this month? ")) 
     # get the remainder 
     remainder = minutes - 400 
     # apply five cent charge 
     if remainder > 0: 
      res += remainder * 0.05 
     print("Your monthly bill is: ", "$", res) 

     det = input("Would you like to try again? Y/N: ") 
     again = (det == "Y") 


main() 

あなたはそれを持っていた方法で、resはちょうど20

+0

オハイオ州の男私はそれをキャッチしませんでした...ありがとう!今は完璧に動作します。 – Matticus

1

あなたは各試行の間にresをリセットしないので、すべてのループが追加されます。すべてのループが互いに独立しているように見えるので、この動作は予期せぬものになります。

while again:の下で、resはそれだけで今までのループの範囲内で使われているように見えるので、あなたはおそらく、最初の場所でのループのres外を宣言する必要はありません20にそれを再割り当てすることリセットします。

+0

にリセットされたことがない、永遠にインクリメント保た説明 – Matticus

+0

@Matticus Npをいただき、ありがとうございます。質問を解決済みとするために私たちの回答のどちらかを受け入れるべきです。 – Carcigenicate

関連する問題