2016-03-31 9 views
0

こんにちは、これは初めてのPythonコードです。私はパーセンテージをユーザに尋ねるコードを書いており、受け入れ可能な入力がユーザによって入力されるまで質問を続ける。しかし、私がこれを実行すると、入力した入力の種類にかかわらずwhileループは中断しません。ループはPythonで連続して実行されていますが、良い入力か悪いですか?

import math 

while True: 
    try: 
     entered = float(raw_input("Please enter the velocity (as a percentage of the speed of light): ")) 
    except ValueError: 
     print("Sorry, an acceptable input was not entered. Try again.") 
     continue 

    if entered > 100: 
     print("Sorry, a velocity greater than the speed of light cannot be used. Try again.") 
     continue 
    elif entered <= 0: 
     print("Sorry, a percent cannot be negative. Try again.") 
     continue 
    else: 
     #the percent entered is valid, break out of while loop 
     break 

print("Ship is traveling at ", entered, "% the speed of light.") 
print(" ") 

speedOfLight = 299792458       #speed of light constant 
percentage = entered/100      #turn entered percent into decimal 
speed = speedOfLight * percentage    #actual speed (in m/s)   
denominator = math.sqrt(1 - (percentage ** 2)) #denominator of factor equation 
factor = 1/denominator      #solve for given factor equation 

shipWeight = 70000 * factor      #given ship weight * factor 
alphaCentauri = 4.3/factor      # given times divided by the factor 
barnardsStar = 6.0/factor 
betelgeuse = 309 /factor 
andromeda = 2000000/factor 

print("At this speed: ") 
print(" Weight of the shuttle is ", shipWeight) 
print(" Perceived time to travel to Alpha Centauri is ", alphaCentauri, " years.") 
print(" Perceived time to travel to Barnard's Star is ", barnardsStar, " years.") 
print(" Perceived time to travel to Betelgeuse is ", betelgeuse, " years.") 
print(" Perceived time to travel to Andromeda Galaxy is ", andromeda, " years.") 
+0

で、必要に応じて、我々はあなたを助けることができるようにインデントを修正するには時間がかかるしてください動作します。 – Dzhao

答えて

2

あなたのインデントが少しグラグラで、コードはbreakに達することはありませんあなたはcontinueの前にループしているからです。幸いにも、あなたはそれを動作させるためにキーワードを使用してelseことができます。

while True: 
    try: 
     entered = float(raw_input("Please enter the velocity (as a percentage of the speed of light): ")) 
    except ValueError: 
     print("Sorry, an acceptable input was not entered. Try again.") 
     continue 
    else: # no exception 
     if entered > 100: 
      print("Sorry, a velocity greater than the speed of light cannot be used. Try again.") 
      continue 
     elif entered <= 0: 
      print("Sorry, a percent cannot be negative. Try again.") 
      continue 
     else: 
      #the percent entered is valid, break out of while loop 
      break 
+0

私の悪い私はこのウェブサイトにコードを入力すると常にインデントをぶち壊します。しかし、それは魅力のように働いてくれてありがとう! – Clarisa

+0

@Clarisaあなたが字下げに慣れると、Pythonはそこで最もよく設計された言語の1つです。楽しめ :) – Ben

3

あなたのexcept内のデータの入力をチェックしている:

は、ここに私のコードです。 floatへのキャストがValueErrorにならない限り、決してあなたの中に入ることはありません。

あなたは単にあなたがfloatキャストを渡すデータを確認することができますので、exceptブロックの外にあなたの条件を移動したい:

while True: 
    try: 
     entered = float(input("Please enter the velocity (as a percentage of the speed of light): ")) 
    except ValueError: 
     print("Sorry, an acceptable input was not entered. Try again.") 
     continue 

    if entered > 100: 
     print("Sorry, a velocity greater than the speed of light cannot be used. Try again.") 
     continue 
    elif entered <= 0: 
     print("Sorry, a percent cannot be negative. Try again.") 
     continue 
    else: 
     #the percent entered is valid, break out of while loop 
     break 
+0

質問に書かれているように無効な構文なので、編集者がそれを乱してしまったと思います。 – TinyTheBrontosaurus

0

あなたも/この仕事をするために壊し続ける必要はありません。また、whileループから抜け出すと、「数学を読み込む」必要があります。

あなたがする必要があるのは、インデントを見ることです。 try/exceptは、コードが実際にどのように記述されているかを反映していれば、あなたの決して終わっていないwhileループの原因となります。

以下だけインデントの修正及び「輸入数学」

import math 

valid = False 

while not valid: 
    try: 
      entered = float(raw_input("Please enter the velocity (as a percentage of the speed of light): ")) 
    except ValueError: 
      print("Sorry, an acceptable input was not entered. Try again.") 
      continue 

    if entered > 100: 
     print("Sorry, a velocity greater than the speed of light cannot be used. Try again.") 
    elif entered <= 0: 
     print("Sorry, a percent cannot be negative. Try again.") 
    else: 
     #the percent entered is valid, break out of while loop 
      valid = True 

print("Ship is traveling at ", entered, "% the speed of light.") 
print(" ") 

speedOfLight = 299792458       #speed of light constant 
percentage = entered/100      #turn entered percent into decimal 
speed = speedOfLight * percentage    #actual speed (in m/s)   
denominator = math.sqrt(1 - (percentage ** 2)) #denominator of factor equation 
factor = 1/denominator      #solve for given factor equation 

shipWeight = 70000 * factor      #given ship weight * factor 
alphaCentauri = 4.3/factor      # given times divided by the factor 
barnardsStar = 6.0/factor 
betelgeuse = 309 /factor 
andromeda = 2000000/factor 

print("At this speed: ") 
print(" Weight of the shuttle is ", shipWeight) 
print(" Perceived time to travel to Alpha Centauri is ", alphaCentauri, " years.") 
print(" Perceived time to travel to Barnard's Star is ", barnardsStar, " years.") 
print(" Perceived time to travel to Betelgeuse is ", betelgeuse, " years.") 
print(" Perceived time to travel to Andromeda Galaxy is ", andromeda, " years.") 
関連する問題