1

私はPythonクラスを受講していますが、Pythonの経験はありません。インストラクターはドキュメントを教えるだけで、コード例を示すことを拒否します。私はC++を理解していますが、基本的に自分自身を教えているので、Pythonに非常に不満を感じています。

1行にランダムな文字列が1つ含まれているテキストファイルを開きたい。たとえば、長さは8、10、15、または20文字にすることができます。柔軟でなければなりません。テキストファイルには、不特定の数の文字列(行)が含まれる場合があります。

たとえば、テキストファイルは次のようになります。

HGAMONIHRA
AOMOKAWONS
NFROLBOBDN
ARFSIHCAGE
LNIEEWONOK
GOLFUNDTHC
KOCATAOHBI
AMRERCGANH
SLGFAMALLC
ALLIGATORX

たとえば、2d-array-> my array [2] [3]のようにアクセスできる、配列のような構造に各文字を配置する方法を理解したいだけです。

動作をテストするためだけに辞書を使って練習していました。ネストされたforループを持つ辞書を使用してから、タプルをキーとして使用し、文字列から解析された文字を値として渡すことができると思いました。これでうまくいくかもしれないと思っていましたが、辞書を1行だけで機能させようとすると、printステートメントではキーと値が1つだけ表示され、リストは表示されません。私は本当に混乱しています。これは苦痛だと思いますが、誰かが簡単な言葉で教えてくれませんか?Pythonは私の口に不快な味を残しています。

これは、テキストファイルの1行だけのテストコードでした。

count = 0
text = open("puzzle.txt")
line = text.readline()
for i in line:  #this is probably the problem
    mydict = dict()
    mydict.update({count:line[count-1]}) #was hoping to make many keys and values.
    count += 1

print mydict.values() #want to see there are multiple dict values, each as a char.
print count #just checking to see what count value was

私のインストラクターは教えてくれないので、誰かが教えてもらえますか?私は本当に学びたいです。

4

3 に答える 3

2

Python文字列は(タプルのように)不変のセットとして扱われるため、各行の文字列のセットを保持するだけで済みます。

count = 0
text = open("puzzle.txt", 'r')
myLines = text.readlines()

#Usage;
print myLines[0][0]
# Prints the first character

Python文字列は不変であるため、インデックス全体を新しい文字列として設定する必要があります

myLines[0] = mylines[0:1] + 'G' + myLines[2:]
于 2013-02-11T03:38:18.350 に答える
2

コードには、一見したところ明らかな問題が1つあります。mydictループを通過するたびに、次の行を使用して空のdictにリセットします。

    mydict = dict()

ループの直前になるように移動した場合は、さらにテストして、修正する必要のある他の問題があるかどうかを確認できます。

ただし、必要なことを実現するためのはるかに簡単な方法があります。

>>> with open("puzzle.txt") as f:
...     puzzle = [list(line.strip()) for line in f]

これにより、ファイルが開かpuzzle.txtれ、変数に割り当てられますf。次に、ファイル内の各行が文字列変数に読み込まれ、line空白(最後の改行を含む)が削除され、結果の文字列が文字のリストに変換され、最後にそれぞれが収集されます。それらのリストを、変数に割り当てる別のリストに追加しますpuzzle。最後に、これはすべてwithステートメント内で行われたため、ファイルは自動的に閉じられます。

上記のコードには、Pythonの重要な概念がいくつかあります。

pprintモジュールでpprint関数を使用すると、このコードの結果をより明確に確認できます。

>>> from pprint import pprint
>>> pprint(puzzle)
[['H', 'G', 'A', 'M', 'O', 'N', 'I', 'H', 'R', 'A'],
 ['A', 'O', 'M', 'O', 'K', 'A', 'W', 'O', 'N', 'S'],
 ['N', 'F', 'R', 'O', 'L', 'B', 'O', 'B', 'D', 'N'],
 ['A', 'R', 'F', 'S', 'I', 'H', 'C', 'A', 'G', 'E'],
 ['L', 'N', 'I', 'E', 'E', 'W', 'O', 'N', 'O', 'K'],
 ['G', 'O', 'L', 'F', 'U', 'N', 'D', 'T', 'H', 'C'],
 ['K', 'O', 'C', 'A', 'T', 'A', 'O', 'H', 'B', 'I'],
 ['A', 'M', 'R', 'E', 'R', 'C', 'G', 'A', 'N', 'H'],
 ['S', 'L', 'G', 'F', 'A', 'M', 'A', 'L', 'L', 'C'],
 ['A', 'L', 'L', 'I', 'G', 'A', 'T', 'O', 'R', 'X']]

...そしてあなたはあなたの質問で提案したのとまったく同じように個々のキャラクターにアクセスすることができます:

>>> puzzle[2][3]
'O'
于 2013-02-11T04:00:16.813 に答える
1

あなたはリストのリストでそれをすることができます:

>>> with open('puzzle.txt') as f:
...   a = [list(line.rstrip()) for line in f]
... 
>>> a[0,3]
>>> a[0][3]
'M'
>>> a[1][0]
'A'
于 2013-02-11T03:37:31.423 に答える