вложенный цикл для разбиения строки на основе нескольких разделителей - PullRequest
0 голосов
/ 19 декабря 2011

Я работаю над назначением Python, которое требует, чтобы текст был разделен, отсортирован и напечатан следующим образом:

  • предложения разделены .
  • фразами на ,
  • затем напечатано

То, что я сделал до сих пор:

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

Подсказка и / или простой пример приветствуются.

Ответы [ 4 ]

2 голосов
/ 19 декабря 2011

Ошибка типа: не все аргументы, преобразованные во время форматирования строки

Это подсказка.

У вас все нормально.

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

не так.

Посчитайте спецификации преобразования %d и %s. Подсчитать значения после оператора % /

Числа не совпадают, не так ли? Это TypeError.

2 голосов
/ 19 декабря 2011

Вы, вероятно, хотите:

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

А во внутреннем цикле вы наверняка захотите разбить предложение , а не текст снова

1 голос
/ 19 декабря 2011

Есть несколько проблем с вашим фрагментом кода

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. Если я вас правильно понимаю, вы хотите разделить предложение на разделитель ..Затем каждое из этих предложений вы хотите разбить на фразы, которые опять-таки разграничены на ,.Таким образом, вторая строка должна фактически разделить вывод перечисления внешних циклов.Что-то вроде

    for p, phrase in enumerate(sentence.split(',')):
    
  2. Заявление о печати.Если вы когда-нибудь увидите ошибку типа TypeError, вы можете быть уверены, что пытаетесь присвоить переменную одного типа другому типу.Ну а нет никаких заданий?Это косвенное назначение для конкатенации печати.Вы обязались предоставить 3 параметра, из которых первые два были бы Integers(%d), а последний - string(%d).Но в итоге вы указали 3 Integers (s+1, p+1, len(sentence), phrase), что не соответствует спецификатору формата печати.Либо вы удаляете третий параметр (len(sentence)), например

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

    , либо добавляете еще один спецификатор формата в оператор печати

    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)) 
0 голосов
/ 19 декабря 2011
>>> 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.']

Вы можете преобразовать этот неназначенный вывод по своему вкусу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...