2017-05-13 9 views
3

印刷アウト( '542'、 '-214')予期しない最大数が、私は起こるしたいどのような正しい分番号

現在何が起こっている:プリントアウト(6 ''、「 - 214 ')

なぜ最小数が正しいのかわかりませんが、6が最大値として使用されています。

私のPythonコード:

def high_and_low(numbers): 

    numbers = numbers.split(" ") 
    maxNumbers = max(numbers) 
    minNumbers = min(numbers) 

    numbers = maxNumbers, minNumbers 

    return numbers 

print(high_and_low("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")) 

私はこれを変更しようとしている:

maxNumbers = int(max(numbers)) 
minNumbers = int(min(numbers)) 

しかし6は、まだ戻ってきます。

+4

文字列ではなく、intであるため、 – jezrael

+1

jezraelのコメントに続いて。 'map(float、numbers.split())'または 'map(int、numbers.split())'に 'numbers.split(" ")'を置き換えればOKです。 – Kanak

+2

文字列を辞書順に取得しています。 '-214'が' min() 'から出てくるのは、数値比較によるものではなく、運がいいです。 '-1'で追加すると、代わりに返されます。 –

答えて

3

これは私の作品:

def high_and_low(numbers): 

    numbers = [int(n) for n in numbers.split(" ")] 
    maxNumbers = max(numbers) 
    minNumbers = min(numbers) 

    numbers = maxNumbers, minNumbers 

    return numbers 

print(high_and_low("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")) 

結果:あなたはintとしてmax()min()をキャストしようとしたときの値の評価は既にベースに発生したとして

(542, -214) 

は、あなたが、手遅れでしたあなたのリストのさまざまな文字列のランクにランクを評価する前に値をintとしてキャスティングするのは、探している結果を得るための適切な方法です。

+1

良いキャッチです。私はこれを修正した。 – JacobIRR

+1

また、 'numbers.split(" ")'の代わりに 'numbers.split()'を使用することもできます – jezrael

1

まあ、あなたはintではなく文字列をソートしています。 `int(max(numbers))でやってみたことは、「最大文字列」をintに変更するだけです。

最大値と最小値を確認する前に値をintに変更する必要があります。これは動作します:

def high_and_low(numbers): 

    numbers = [int(x) for x in numbers.split(" ")] 
    maxNumbers = max(numbers) 
    minNumbers = min(numbers) 

    numbers = maxNumbers, minNumbers 

    return numbers 

print(high_and_low("4 5 29 54 4 0 -214 542 -64 1 -3 6 -6")) 
0

書式設定がうまくいけば、ごめんなさい。数値型(整数、浮動小数点型)に文字列をキャストする必要があります。

def high_and_low(numbers): 
    a =[int(i) for i in numbers.split(" ")] 
    return max(a), min(a) 
関連する問題