2016-10-08 16 views
0

私は以下のクラスを持っていますが、意図した通りにスクリプトを動作させるのに苦労しています。メソッドの未加工入力の実装

class firstClass: 
    def test(self): 
     enter = raw_input() 
     books = enter.split() 
     books = [] 
     for index in range(len(books)): 
     print 'Current Books :', books[index] 

mybooks = firstClass() 
mybooks.test() 

私の最終目標は、私は等々book1book2book3を入力した場合、私は(私は3冊にそれを制限したくない)

Current Books, book1 
Current Books, book2 
Current Books, book3 
のような結果を得る事態を持つことです
+1

'books = []'のポイントは何ですか? – arshajii

+0

'range(len(...))'のポイントは何ですか? –

答えて

2

booksは、books = enter.split()という行で正しく設定しています。次の行books = []は、この値を空の配列で上書きするため、ループは起こりません。引数なし

>>> class firstClass: 
... def test(self): 
...  enter = raw_input() 
...  books = enter.split() 
...  for index in range(len(books)): 
...   print 'Current Books :', books[index] 
... 
>>> mybooks = firstClass() 
>>> mybooks.test() 
book1 book2 book3 
Current Books : book1 
Current Books : book2 
Current Books : book3 

あなたはおそらく知っているように、split()は空白で分割されますので、これは、入力が、間に空白が入力されていることを前提としています

予想通り1行は、それが動作することを取り外します。そうであれば、別の区切り文字(カンマのような)を明示的に指定する必要があります。

もう1つの注意点として、index for range(len(arr))は、ほとんど常に避けるべき、Pythonのアンチパターンです。 forループは、読みやすくするために次のように書き直すことができます。

for book in books: 
    print 'Current Books :', book 
+0

ありがとうbrianpck。私は 'books = []'行を含めて、エントリをリストに取り込むことが必要だと考えました。私の間違い。 – jebjeb

+0

Splitは不要なリストを返します。あなたは前にそれをしていた可能性があります – brianpck

0

5行目を削除するだけで、コードは正常に動作します。

class firstClass: 
    def test(self): 
     enter = raw_input() 
     books = enter.split() 
     for index in range(len(books)): 
     print 'Current Books :', books[index] 

mybooks = firstClass() 
mybooks.test() 
関連する問題