2016-04-20 3 views
1

私は、情報科学のためのPythonの練習用に以下のようなPythonコードを作成しました。コードは実行されますが、数値が1より大きいユーザーの入力フォームは認識されません。いかなる援助も感謝します。Python 3 - コードは1より大きいユーザー入力を数値として認識しません

def isfloat(string): 
    try: 
     float(string) 
     if float(string) == True: 
      return True 
    except ValueError: 
     return False 

user_input = input('Please enter a real number. Type \"done\" to exit and tally your entries \n> ') 
data = 0 
count = 0 

while isfloat(user_input) == True: 
    data = data + float(user_input) 
    count = count + 1 
    user_input = input("Please enter another value \n> ") 
    isfloat(user_input) 

else: 
    if (isfloat(user_input) == False) and (user_input == "done"): 
     print("The sum of your entries is: " + str(data)) 
     print("The number of entries was: " + str(count)) 
     exit() 
    else: 
     print("The entry was not a numeric value \n") 
     print("The sum of your valid entries is: " + str(data)) 
     print("The number of valid entries was: " + str(count)) 
     exit() 

答えて

0

問題はfloat(string)Trueを返すことはありませんという事実にあります。 floatまたはの数値を返します。入力をfloatに変換できない場合はValueErrorになります。

これを修正するには、あなたのif文を削除し、単にあなたのisfloat機能でfloat(string)を呼び出した後Trueを返却する必要があります。 float(string)ValueErrorを発生させる場合、isfloatは、期待通りにFalseを返します。それ以外の場合は、処理を進めてTrueを返します。

def isfloat(string): 
    try: 
     float(string) 
     return True 
    except ValueError: 
     return False 
+0

'float型(文字列)STRING'はは' true'ので、 ' "1" または' ' "1.0"' 'である場合== true'には通過します値 '1'を持つ 'int'サブクラスです。しかし、それはひどいテストです。 – ShadowRanger

+0

私は同意しますが、残りのコードを変更するつもりはありませんでした。私は、OPが尋ねた問題を解決するつもりでした。私はそれをより明確にするために自分の投稿を変更します。 – caleb531

0

isfloatに問題があります。 floatの結果とTrueの結果を比較しないでください。あなたが実際にfloatの戻り値を持つ何もする必要はありません

def isfloat(string): 
    try: 
     float(string) 
     return True 
    except ValueError: 
     return False 

:代わりのような何かを行います。その呼び出しでエラーが発生しない場合は、浮動小数点数を持つので、Trueを返してください。

ほとんど作業が、これはばかげている"0"

+0

ありがとうジョン。私は霧がまだちょうど持ち上げられていないので、約1週間しかかかりません。それは問題を絶対に修正した。 –

1

誤分類しまうでしょうライン

if float(string): return True 

に使用するように誘惑される場合があります。floatが変換かどうかをチェックだ

if float(string) == True: 

値はTrue(数値は1 )。

ただ、例外をチェックしに行く:

def isfloat(string): 
    try: 
     float(string) 
    except ValueError: 
     return False 
    else: 
     return True 
関連する問題