複数の区切り文字に基づいて文字列を分割するためのforループ

私は、区切られ、ソートされ、印刷されるテキストを必要とするPythonの割り当てに取り組んでいます:

  • sentences are delimited by .
  • phrases by ,
  • then printed

これまで私がしてきたこと:

text =  "what time of the day is it. i'm heading out to the ball park, with the kids, on this nice evening. are you willing to join me, on the walk to the park, tonight." 


for i, phrase in enumerate(text.split(',')):
   print('phrase #%d: %s' % (i+1,phrase)):


phrase #1: what time of the day is it. i'm heading out to the ball park
phrase #2:  with the kids
phrase #3:  on this nice evening. are you willing to join me
phrase #4:  on the walk to the park
phrase #5:  tonight.

私はネストされたforループが必要であり、試してみた:

for s, sentence in enumerate(text.split('.')):
     for p, phrase in enumerate(text.split(',')):
         print('sentence #%d:','phrase #%d: %s' %(s+1,p+1,len(sentence),phrase)) 

TypeError: not all arguments converted during string formatting

ヒントや簡単な例が歓迎されます。

0
適切な代名詞 "I"は "I"と綴られています。自分を参照するときは「私」を使用してください。常に。
追加された 著者 S.Lott,

4 答え

TypeError:文字列書式中にすべての引数が変換されない

ヒントです。

あなたのループは大丈夫です。

'sentence #%d:','phrase #%d: %s' %(s+1,p+1,len(sentence),phrase) 

間違っている。

%d %s の変換仕様を数えます。 の演算子/

数字は同じではありませんか?これは TypeError です。

2
追加された

あなたはおそらくしたい:

'sentence #%d:\nphrase #%d: %d %s\n' %(s+1,p+1,len(sentence),phrase)

内側のループでは、確かに文章を分割するのではなく、文章を分割したいと考えています

2
追加された

コードスニペットにはいくつかの問題があります

for s, sentence in enumerate(text.split('.')):
     for p, phrase in enumerate(text.split(',')):
         print('sentence #%d:','phrase #%d: %s' %(s+1,p+1,len(sentence),phrase)) 
  1. If I understand you correctly, you want to split the sentence by delimited .. Then Each of these sentences you want to split on phrases which is again delimited by ,. So second line of your should actually split the output of the outer loops enumeration. Something like

    for p, phrase in enumerate(sentence.split(',')):
    
  2. The Print Statement. If you ever See an Error Like TypeError, you can be sure that you are trying to assign a variable of one type onto another type. Well but there is no assignments? Its an indirect assignment to the print concatenation. What you committed to the print is that, you would be supplying 3 parameters out of which first two would be Integers(%d) and the last a string(%d). But you ended up supplying 3 Integers (s+1, p+1, len(sentence),phrase) which is inconsistent with your print format specifier. Either you drop the third parameter (len(sentence)) like

    print('sentence #%d:, phrase #%d: %s' %(s+1,p+1,phrase)) 
    

    or add one more Format Specifier to the print statement

    print('sentence #%d:, phrase #%d:, length #%d, %s' %(s+1,p+1,len(sentence),phrase)) 
    

前者が欲しいと思っているとすれば、

for s, sentence in enumerate(text.split('.')):
     for p, phrase in enumerate(text.split(',')):
         print('sentence #%d:, phrase #%d:, length #%d, %s' %(s+1,p+1,len(sentence),phrase)) 
1
追加された
@Abhijit私は宿題に答えるためにS.Lottスタイルを好む。 メタを参照してください。
追加された 著者 joaquin,
多くの皆さんありがとうございました。私は、提供された洞察をもとに適切なディスカード・オーダーを調理することができました。
追加された 著者 lcruzero,
>>> sen = [words[1] for words in enumerate(text.split(". "))]
>>> for each in sen: each.split(", ")
['what time of the day is it']
["i'm heading out to the ball park", 'with the kids', 'on this nice evening']
['are you willing to join me', 'on the walk to the park', 'tonight.']

この割り当てられていない出力を好きなものに変換するのはあなた次第です。

0
追加された