3

数字の行を含むテキスト ファイルがあります。私のプログラムは、コード行を抽出してリストに入れようとしています。各リストは、ファイル内のその行を構成する数字で構成されており、これらすべてのリストを 1 つのリストに入れています(この三角形と呼びましょう)。それらに関数を適用しますが、Pythonインタープリターは、Triangle[x]それを操作しようとすると整数型であると言いますが、尋ねるとtype(Triangle[x]、それはリストであると言います。私のコードは以下の通りです:

def compare(a,b):
"""Returns the larger of a and b"""
if a > b:
    return a
else:
    return b

doc = open('C:/Users/Joseph/My Documents/Programming fun/Python/Project Euler/18triangle.txt')

Triangle = []

for line in doc:
    Triangle.append( map( int, line.split() ) )

doc.close()

Triangle.reverse()

for i in xrange(len(Triangle) - 1):
    for j in xrange(len(Triangle[i]) - 1):              # Here it says that 'type int has no len'
        TEMP = compare(Triangle[i][j],Triangle[i][j + 1])
        Triangle[i+1] = TEMP

あなたが提供できるアドバイスを事前に感謝します。

4

3 に答える 3

4

これは疑わしいようです:

TEMP = compare(Triangle[i][j],Triangle[i][j + 1])
Triangle[i+1] = TEMP

Triangleメンバーとして整数のリストから始めますが、作業を進めていくと、要素が整数になるように割り当てられます。実際、これは 以外の各要素で発生するため、Triangle[0]に到達するとすぐに常に発生i1ます。


ちなみに、これはドキュメントを読むためのやや良い方法です。

with open('C:/Users/Joseph/My Documents/Programming fun/Python/Project Euler/18triangle.txt') as doc:
    Triangle = [map(int, line.split()) for line in doc]

そして、あなたのcompare関数は標準max関数のサブセットです。代わりにそれを使用できます(コメントで@BrendenBrownが指摘したように)。

また、標準の Python スタイルに従うTriangle必要があります。triangle

于 2012-08-17T22:18:02.433 に答える
1

問題は、TEMP が整数を取得し、それを Triangle に入れることです。そのため、Triangle にはリストではなく整数の要素が含まれるようになりました。多分あなたは次のようなものが欲しい

Triangle[i+1] = [TEMP]

それ以外の

Triangle[i+1] = TEMP
于 2012-08-17T22:18:26.613 に答える
1

for i in xrange(len(Triangle) - 1)これはあまりpythonicではありません。

一度に 2 つのオブジェクトを比較したいので、最初にリストを調整する方がよい場合があります。このスニペットは、リストを 2 タプルのリストに変換します

>>> from itertools import izip_longest, islice
>>> x
[1, 2, 3, 4, 5]
>>> list(izip_longest(islice(x,0,None,2),islice(x,1,None,2)))
[(1, 2), (3, 4), (5, None)]

その形式のリストを取得したら、次のようにステップスルーできます。

for i,j in two_list:
   # rest of your loop
于 2012-08-17T23:09:42.783 に答える