2016-09-15 11 views
1

基本的には、大文字のファイルを取り込む必要があるプログラムを作成しています。空白や改行で区切られていても、区切られていなくてもかまいません。例えばPythonでジェネレータの実装が正しくないのはなぜですか?

Z FM 
TM CC 

は "Z"、 "F"、 "M"、 "T"、 "M"、 "C"、 "C" の出力で発電機を返す

この関数はジェネレータである必要があります。そのため、ファイル全体ではなく、一度に1文字ずつ読み込まれます。

とにかく、ここまでは私がこれまで持っていたものです。誰か私が間違っていた場所を教えてください?

def buildGen: 
    with open(filename) as sample: 
     for word in sample: 
      for ch in word: 
       yield ch 
+0

インデントが間違っている、インデントする必要がありますWITH' '下のコード'dna'が定義されていない場合、おそらく' sample'でしょう。 – TessellatingHeckler

+0

は固定されていますが、何もしません。 –

答えて

2

あなたのコードで多くの問題があります。

  1. あなたは間違った構文で関数を定義しているが(def buildGen: < - 括弧が続く必要があります)。

  2. 出力のあなたの説明では、空白文字に対処する必要があることを意味します。

次は(あなたのファイルがstuff.txtであると仮定して)あなたの例の出力を出力します。私の理解によると、ファイルや歩留まりを読み取ろうとしているとして、ここで

# Note `buildGen` takes now `filename`. 
def buildGen(filename): 
    with open(filename) as sample: 
     for word in sample: 
      for ch in word: 
       # Only yield non-whitespace. 
       if ch.strip(): 
        yield ch 

print list(buildGen('stuff.txt')) 
+0

"*改行で区切られている場合とされない場合があります*" - そうでない場合、 'for word in sample'はファイル全体を1行として読み込みます。 – TessellatingHeckler

+0

私はこれを行い、同じ機能のリストにコンテンツを保存する方法はありますか? –

+0

@TessellatingHecklerそれは良い点です。 'open(filename)を反復する。read() 'は改行があってもいなくても動作しますが、もちろん、すべてのものがロードされます(ある程度ジェネレータの目的に反する)。 –

0

間違ったインデントと誤った変数名dnaを使用しています。あなたはこのような何かを書く必要があります。

def buildGen: 
    with open(filename) as sample: 
     for line in sample.read().splitlines(): 
      for ch in line.split(): 
       yield ch 
+0

'def buildGen:'は 'SyntaxError:invalid syntax'を返します。 –

+0

これはいくらか動作します。私はジェネレータにそれをもたらすことができ、同じメソッドのリストに内容を保存する方法はありますか? –

-1

あなたのロジックは、間違っていますあなたのbuildGen関数を呼び出すことによってファイル内のすべての文字。

with文を使用しているので、毎回ファイルが閉じられ、常に1行目のみになります。別のポイントは、ファイルをサンプルとして開き、dnaとしてエラーをスローすることです。

あなたはこの

fp = open('sample.txt') 
# generator for the data 
data_generator = (c for c in fp.read()) 
for char in data_generator: 
    print char 


def read_chars(fp): 
    for line in fp 
+0

"*関数はジェネレータでなければならないので、ファイル全体ではなく一度に1文字ずつ読み込まれます。*" - 'fp.read()'はファイル全体を一度に読み込みます。 – TessellatingHeckler

0

を使用して同じことを達成することができる唯一のuppercase lettersが出力にしてonly load in letters at a time instead of the entire file含まれることになると想定します

​​
関連する問題