2017-08-16 49 views
0

私は自分の割り当てとしてこれを得た: -不一致エラー

ユーザーが「完了」に入るまで繰り返し整数のためにユーザに要求するプログラムを作成。 「完了」が入力されると、数字のうち最大値と最小値を印刷します。ユーザーが有効な番号以外のものを入力した場合は、try/exceptでキャッチして適切なメッセージを出し、その番号を無視します。 7,2、bob、10、および4と入力し、以下の出力と一致させます。
無効な入力
最大出力 - 理想の
は10
最小2

です私はそれがあまりにも正常に動作しているsame-

largest = None 
smallest = None 
count=0 
while True: 
    num = input("Enter a number: ") 

    if num == "done" : 
     break 
    try: 
     fval=float(num) 
     count=count+1 

     if(fval == None): 
      largest=None 
      smallest=None 

     if(largest<fval): 
      largest=int(fval) 
     if(count==1): 
      smallest=fval      
     else: 
      if(int(fval) < smallest): 
        smallest=int(fval) 



    except: 
     print("Invalid input") 
     continue 






print("Maximum is", largest) 
print("Minumum is", smallest) 

次のコードを書きました。私は最小と最大のエントリを取得することができます。しかし、結局、編集者はこのコードを受け入れていません。コードロジックのあらゆる可能なエラー?

ありがとうございました。

+0

。あなたがここに投稿したものを実行してみてください。 –

+0

先生、どこで私が間違っているのか教えていただけますか? –

+0

これをpython2.xまたはpython 3.yで実行していますか? – rocksteady

答えて

3

私はあなたのpythonのバージョンとコードの裁判官は、あなたのコードを評価するために動作するバージョンの間に不一致があると信じています。

違いは何ですか? Noneは整数と比較することができます(実際には、ほとんどすべてがpython2に匹敵します)。これを見て:

のPython 2.xの

In [211]: None < 123456 
Out[211]: True 

のPython 3.xの

In [152]: None < 123456 
--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-152-cf9ae210e7ad> in <module>() 
----> 1 None < 123456 

TypeError: unorderable types: NoneType() < int() 
> <ipython-input-152-cf9ae210e7ad>(1)<module>() 
----> 1 None < 123456 

はどのようにあなたにそのこと?さて、最初の反復のために、このコード行:

if(largest < fval): 

Noneの初期値を有し、largestfvalを比較します。

python2とpython3でinputを気にするだけです。 2つの動作は異なっています。文字列を入力すると、前者はNameErrorとなります。


私はこのように、有効な値にごlargestsmallestを初期化推薦:

largest = float('-inf') 
smallest = float('inf') 
+0

私はPy2の 'input'が入力を評価しようとしているので、' done'をタイプすると 'NameError'が投げられます。 – Vovanrock2002

+0

Python2ではコードがさらに悪くなります。 – Goyo

+0

ありがとうございました!これは、最大= float( ' - inf')と smallest = float( 'inf')で機能しました。 –

1

私は入力が整数であると私は、私のプログラムの終了時に、minmaxを呼び出すためにlist内のすべての要素を格納するかどうかを確認するためにisinstanceを使用します。ここで

は動作するコードです:

import ast 

inputs = [] 
while True: 
    num = input("Enter a number: ") 

    if num == "done" : 
     break 
    try: 
     # Check if the input is a number 
     if num.isnumeric(): 
      # If so, convert the string to a number 
      number = ast.literal_eval(num) 
      # If it's an int, store it in the list 
      if isinstance(number, int): 
       inputs.append(number) 
      else: 
       # If not, raise and exception 
       raise ValueError("Not an integer!") 

    except ValueError as ve: 
     print(ve) 

# Show the desired output 
print("Maximum is", max(inputs)) 
print("Minumum is", min(inputs)) 
+0

これも機能します。どうもありがとうございます。 –

1

一部がアドバイス:

  • のみ、あなたが実際に期待try - ブロック内のコードを入れて例外を発生させる。
  • ポケモンの例外処理をしないでください。実際に予想される例外のみを処理します。
  • 整数を確認する必要がある場合は、なぜユーザー入力をfloatに変換しますか(しようとしますか)。
  • float(num)は決してNoneになることはありませんので、それを確認することは意味がありません。

最後に、私が思い付くだろう:それは正常に動作しません

if __name__ == '__main__': 
    minimum = maximum = None 

    while True: 
     user_input = input('Enter a number: ') 

     if user_input == 'done': 
      break 

     try: 
      integer = int(user_input) 
     except ValueError: 
      print('Invalid input') 
     else: 
      if minimum is None or integer < minimum: 
       minimum = integer 

      if maximum is None or integer > maximum: 
       maximum = integer 

    print('Maximum is', maximum) 
    print('Minimum is', minimum) 
関連する問題