2015-12-28 5 views
7

私はしばらくの間これをやろうとしてきましたが、いつも違う失敗を抱えています。私は、ユーザーからの数値入力を取り、値を小さくして、リスト出力、それにそれを配置する必要があります:Pythonの数字のリストを逆に

bids = [] 
bid = input('Bid: ') 
while bid != '': 
    bids.append(bid) 
    bid = input('Bid: ') 
print('The auction has finished! The bids were:') 

for bid in bids: 
    bid = int(bid) 

for bid in reversed(bids): 
print(bid) 

だから、これはうまくほとんどの時間を働いていた、(私は数字2,3,4を使用しています入力として& 10が最初の数字のために順に番号を示し、ここで、私は問題を抱えてきたように)が、私は16、30、24に入力すると、それは、AS番号を表示します。

The auction has finished! The bids were: 
24 
30 
16 

ここで別のバージョンであります私は試みました:

bids = [] 
bid = input('Bid: ') 
while bid != '': 
    bids.append(bid) 
    bid = input('Bid: ') 
print('The auction has finished! The bids were:') 

for bid in bids: 
    bid = int(bid) 

bids.sort([::-1]) #Here is where the problem is at, I don't know 
        #what the correct syntax is for something like that 

for bid in bids: 
    print(bid) 

私はかなりPythonに新しいので、私のコースと苦労しているので、どんな助けも大歓迎です。

-Callum

+0

このパイソン2やPython 3か? 'input'はそれぞれに非常に異なることを行います。 – ShadowRanger

+0

私はpythonを信じています –

+0

@CPastuszak 'python --version'を実行してください – Daenyth

答えて

8

あなた

bids.append(bid) 

では、文字列のリストを取得します。あなたは、高い順に整数とソートにそれらを変換したい:

numerical_bids = [int(bid) for bid in bids] 
numerical_bids.sort(reverse=True) 

、今numerical_bidsは降順にソートされた整数のリストです。あなたのコードで

for bid in bids: 
    bid = int(bid) 

は何もしません。各bidを整数に変換し、すぐに忘れてしまいます。

そして

bids.sort([::-1]) 

sortメソッドを使用する方法ではありません。 list.sortのドキュメントを読んでください。

bids.sort(key=int, reverse=True) 

そして、あなたが垂直方向にそれを印刷する必要がある場合:

+0

ありがとう、ありがとう、私はそれを上のもののような垂直のフォーマットで並べ替えられたリストを印刷するリスト形式で –

+0

@ CPastuszakあなたがfor-loopでうまくいけば、リストを印刷する方法... – Copperfield

+0

@Copperfieldしかしforループをどこに挿入するのか分かりません。 –

2

これは逆に、番号順に、数値文字列の形での入札のあなたのリストのためにソートされます

print('\n'.join(bids)) 
+0

これは入札を並べ替えますが、文字列として残しておきます。 –

+0

さて、私はこの質問に答えて、Pythonをよく理解するように頼んだ人を助けようとしました。私は、質問に答える人々が何らかの方法で明示的に表現されなければ、意図について推測すべきだとは思わない。 – Lukasz

3

あなたの問題があります基本的にこのループの中で:

for bid in bids: 
    bid = int(bid) 

bids。毎回bidという名前の新しい整数インスタンスを作成します。これは何もしません。だから、後でbidsをソートすると、元の文字列要素がソートされているだけで、必要な整数はソートされません。

整数値をソートする場合は、いくつかの選択肢があります。一つは、彼らが来るとして整数に値を変換することです:

bids.append(int(bid)) 

一つは、右のあなたのprintループにソート変換することです:

for bid in sorted((int(x) for x in bids), reverse=True): 
    print(bid) 

あなたが利用したいと思われたアプローチはしているので、ワット人々の

intbids = [] 
for bid in bids: 
    intbids.append(int(bid)) 

ロット:代わりに、あなたはおそらく、あなたの元のループのような何かをしたいが、結果を捨てていない整数要素でbidsの文字列要素を置き換えます病気上記は、より簡潔

intbids = [int(bid) for bid in bids] 

として書かれていることを教えてくれ、私は何が起こっているのか、それを明確にするために別のリストとしてintbidsを使用。場所に」それは本当に、本当に重要な場合、各要素の交換を行うために

bids = [int(bid) for bid in bids] 

:あなたはちょうどあなたが整数入札リストを持っていたら、あなただけの同じ名前を使用することができ、文字列の入札リストを捨てるしたい場合「(意味が新しいリストを作成していない)、そして最も単純に理解の方法は、インデックスをループにおそらくある:

for i in range(len(bids): 
    bids[i] = int(bids[i]) 

(しかし、あなたは非常に経験豊富であり、データのトン、トンでの作業まで私の強くお勧めするのは、リストの "インプレース"アップデートを心配することではありません。それはPythonを書くのと同じくらい自然な方法ではありません。)

1

さて、私に説明させてください: あなたの入力をソートしていません!

2番目のケースでは、リストは[16,30,24]で、逆順で印刷しています24, 30, 16これは正しいです。

が、私は二つの問題を参照してください。
- あなたは
を印刷するための値をソートしていない - 新しい入札が以前のものよりも高い場合には、あなたがチェックしていない(つまり、入札のどのようなのですか?)

最初の部分については、リストをasumingすると、すでにあなたはそれをソートする必要があり、intが含まれています

bids.sort() 

それとも、あなたが逆の順序でそれをしたい場合:

第二部のために
bids.sort(reverse=True) 

、新しい入力がリストに追加する前に大きければちょうどチェックは:

while bid != '': 
    if bids and bid < bids[-1]: 
     print "Error: your bid must be higher than last bid. Last bid: {}".format(bids[-1]) 
    else: 
     bids.append(bid) 
    bid = input('Bid: ') 
関連する問題