2014-10-15 2 views
-1

это код, который я использую до сих пор.Python Кодирование для реверсивных предложений

translated = [] 
line = input('Line: ') 
while line != '': 
    for word in line.split(): 
    letters = list(word) 
    letters.reverse() 
    word = ''.join(letters) 
    translated.append(word) 
    if line == '': 
    print(' '.join(translated)) 
    elif line: 
    line = input('Line: ') 

Предполагается читать строки ввода от пользователя. Пустая строка предполагает обозначение конца любых входов. Затем программа должна читать все строки, а затем воспроизводить их в исходном порядке, при этом каждое слово меняется на место.

For example if i was to input: Hello how are you 
Its output shout be: olleH woh era uoy 

В настоящее время он запрашивает ввод данных, а затем останавливается, когда есть пустая строка, но ничего не производит. Никаких обратных слов нет ничего.

Может ли кто-нибудь сказать мне, что я делаю неправильно, и помочь мне с моим кодом?

+0

Какую версию python вы используете? –

ответ

0

, как @Flav указывает, чтобы прочитать все строки перед пустой строкой, чтобы завершить ввод. Я отредактировал решение, как указано ниже:

lines = [] # to store all line inputs 
while True: 
    line = raw_input('Line: ') # input if using python3 or raw_input if python2.6/7 
    if line == '': 
     break 
    lines.append(line) 
for line in lines: 
    print (' '.join([word[::-1] for word in line.split(' ')])) 
+0

Вы проверили ваш код? –

+0

Я тестировал в python2.7, заменив 'input' на' raw_input', и он работает. почему downvote? – Anzel

+1

«Пустая строка означает обозначить конец любых входов. Тогда программа должна читать все строки, а затем воспроизводить их в исходном порядке, когда каждое слово будет отменено на месте». это не то, что делает ваш код. –

1

Оператор print должен находиться вне цикла. Ваше условие цикла гарантирует, что line никогда не будет '' внутри цикла, поэтому условие if никогда не выполняется.

По этой же причине вам необходимо переосмыслить elif.

0

Возможно, вы можете сделать это так.

' '.join([ i[::-1] for i in line.split(' ') ]) 
  1. Сплит строку на слова
  2. Обратный каждое слово
  3. Поместите их вместе
-1

Это работает идеальный

a = "Hello how are you" 
" ".join([ "".join(reversed(x)) for x in re.findall('\w+',a) ]) 
+0

OP хочет сохранить порядок слов, это не сработает. –

+0

Это не дает ответа на вопрос. Чтобы критиковать или запросить разъяснения у автора, оставьте комментарий ниже своего сообщения - вы всегда можете прокомментировать свои собственные сообщения, и как только у вас будет достаточно [репутации] (http://stackoverflow.com/help/whats-reputation), вы будете быть в состоянии [прокомментировать любое сообщение] (http://stackoverflow.com/help/privileges/comment). – Springrbua

+0

Ой, извините, я все прочитал, он хочет зарезервировать позицию слова, в этом случае он не будет работать, спасибо за разъяснение – Hackaholic

0

Вопрос заключается в том, что, когда линия пуст, ваш цикл while останавливается. Вы должны избавиться от if/else, которые бесполезны здесь.

Полный сценарий:

translated = [] 
line = input('Line: ') 
while line != '': 
    for word in line.split(): 
     letters = list(word) 
     letters.reverse() 
     word = ''.join(letters) 
     translated.append(word) 
    #The above for loop could be done in one line with: 
    #translated.extend([word[::-1] for word in line.split()]) 
    line = input('Line: ') 

print(' '.join(translated)) 
Смежные вопросы