2011-12-19 3 views
0

Я работаю на уступки Python, который требует текст, который будет ограничен, сортируют и печатается как:вложен цикл для spliting строки на основе нескольких разделителей

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

Что я сделал до сих пор:

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 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 

намек и/или простой пример будет приветствоваться.

+1

Собственное местоимение «Я» написано «Я». Пожалуйста, используйте «Я», когда обращаешься к себе. Всегда. –

ответ

1

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

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) и последним a 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

Спасибо большое всем, мне удалось подготовить правильный порядок воспроизведения с предоставленной проницательностью. – lcruzero

+0

@Abhijit Я предпочитаю стиль S.Lott для ответа на домашние задания. См. [Meta] (http://meta.stackexchange.com/questions/10811/how-to-ask-and-answer-homework-questions) – joaquin

2

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

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

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

2

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

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

Ваши петли в порядке.

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

не соответствует действительности.

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

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

0
>>> 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.'] 

Это зависит от вас, чтобы преобразовать этот неназначенный результат по своему вкусу.

Смежные вопросы