2016-10-20 24 views
0

私はPythonのタプルのコンポーネントを比較してビッグ・サイズと最小サイズを比較していますが、私のコードではタプルの最新の2つのコンポーネントが返されています。なぜですか?タプルとPythonのintを比較する

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 
numbers2=numbers.split() 
numbers2=tuple(numbers2) 
i=0 
gran=numbers2[0] 
petit=numbers2[0] 
for i in range (len(numbers2)): 
    if numbers2[i]>gran: 
    gran=numbers2[i] 
print(gran) 
j=0 
for j in range (len(numbers2)): 
    if numbers[j]<petit: 
    petit=numbers2[j] 
print(petit) 
resultat= gran+" "+petit 
print(resultat) 

「6 -6」が返されました。どんな助け?ありがとう

+1

タプルは整数の組ではなく、文字列のタプルです。タプルを整数のタプルに変換します。 –

答えて

1

分割された文字列をタプルに変換する前に整数に変換してください。

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 
numbers2=[int(x) for x in numbers.split()] 
numbers2=tuple(numbers2) 
... 

また、これら2つの操作を1行にマージすることもできます。

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 
numbers2=tuple([int(x) for x in numbers.split()]) 
... 
0

あなたのタプルは、整数のタプルではなく、タプルの文字列です。

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 
numbers2=numbers.split() 
numbers2 = [int(i) for i in numbers2] # convert tuple of strs to tuple of ints 

完全に動作するプログラム:あなたは、整数のタプルにあなたのタプルを変換する必要があり

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 
numbers2=numbers.split() 
numbers2 = [int(i) for i in numbers2] # convert tuple of strs to tuple of ints 
numbers2=tuple(numbers2) 
i=0 
gran=numbers2[0] 
petit=numbers2[0] 
for i in range (len(numbers2)): 
    if numbers2[i]>gran: 
     gran=numbers2[i] 
print(gran) 
j=0 
for j in range (len(numbers2)): 
    if numbers2[j]<petit: 
     petit=numbers2[j] 
print(petit) 
resultat= str(gran)+" "+str(petit) 
print(resultat) 

出力:

542 
-214 
542 -214 
>>> 

は、私はあなたのプログラムは、はるかに簡単に書くことができ、注意してください現在のものよりも:

numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 

# convert the numbers string to a tuple of integers 
num_lst = tuple([int(i) for i in numbers.split()]) 

# take a guess and say the 
# highest and lowest are both 
# the first element in num_lst 
lowest = num_lst[0] 
highest = num_lst[0] 

# iterate through the 
# num_lst. No need to 
# initizalize i beforehand 
for i in num_lst: 
    # if we find a higher number 
    # then our guess of the highest 
    # number, reassign highest to that number 
    if i > highest: 
     highest = i 
    # if we find a lower number 
    # then our guess of the lowest 
    # number, reassign lowest to that number 
    elif i < lowest: 
     lowest = i 

# print the highest and lowest number 
print("Highest:", highest, " Lowest:", lowest) 
2

他の人はすでに項目を整数に変換する必要があると述べています。私はまた、minmaxの機能が利用可能であることを言及したかった。

>>> numbers="4 5 29 54 4 0 -214 542 -64 1 -3 6 -6" 
>>> numbers_tuple=tuple(int(i) for i in numbers.split()) 
>>> min(numbers_tuple) 
-214 
>>> max(numbers_tuple) 
542 

これは、以前の回答の多くのような初期リストを作成するが、tuple()インスタンス化でジェネレータ式ではなく、リストの内包表記を使用して回避。

+0

リストのようなタプルのジェネレータ式があることはわかりませんでした。ニース:D –

+0

ジェネレータの式は単独で扱うものです。 'print(iは範囲(10)にある)'または 'print(iは範囲(10)にあります)を試してください。 –

0

これは、単純な二行まで取ることができる:文字列は、従って、比較を行うために整数にキャストされなければならないような値が最初に挿入され

numbers=tuple([int (a) for a in "4 5 29 54 4 0 -214 542 -64 1 -3 6 -6".split()]) 
print(str(max(numbers)) + ' ' + str(min(numbers))) 

。結果を印刷するときに、同じ行にスペースを入れて同じ行に印刷したい場合は、数字を文字列にキャストすることができます。

これを行うには、文字列を使用しないでください代わりに配列を使用してください。

numbers=tuple([4, 5, 29, 54, 4, 0, -214, 542, -64, 1, -3, 6, -6]) 
print(str(max(numbers)) + ' ' + str(min(numbers)))