2013-08-30 3 views
3

Я создал простой скрипт в python, который сдвигает буквы в 5 пространств в таблице ASCII с помощью chr и ord. Смотрите ниже:Удалить пробел в цикле

word = "python" 

print 'Shifted 5 letters are: ' 
for letters in word:  
    print chr(ord(letters)+5), 

Выход:

Shifted 5 letters is: 
u ~ y m t s 

Выход велик, но как я могу остановить цикл положить пространства в промежутках между каждой буквы?

ответ

9

Если вам не нужно использовать для цикла, просто сделать это:

print ''.join([chr(ord(letter) + 5) for letter in word]) 

вместо всего цикла.

+2

спасибо, это работает, но как это работает? О чем мне нужно читать? Это струнные манипуляции? спасибо – BubbleMonster

+5

[This] (http://docs.python.org/2/library/stdtypes.html#str.join) должен предоставить вам информацию о '. '.join' и [this] (http://docs.python.org/2/tutorial/datastructures.html#list-comprehensions) для остальной части. – qaphla

4

Невозможно остановить инструкцию Python 2.x print от печати пробела при использовании «магической запятой».

Это часть print функции Reason Python 3.x является более гибким, используя именованные аргументы вместо магического синтаксиса:

for letters in word:  
    print(chr(ord(letters)+5), end='') 

Если вы действительно хотите, вы можете получить такое же поведение в Python 2 .x с from __future__ import print_function (или с использованием сторонней библиотеки six).

Однако, если у вас возникли проблемы с использованием print, чтобы сделать то, что вы хотите, решение состоит в том, чтобы сначала форматировать вашу строку, а затем распечатать ее. Итак:

output = '' 
for letters in word: 
    output += chr(ord(letters)+5) 
print output 

Это обычно более вещий (и быстрее) построить list строк, и вызов join в конце концов, вместо того, чтобы постоянно добавляя в строку:

output = [] 
for letters in word: 
    output.append(chr(ord(letters)+5)) 
print ''.join(output) 

И вы можете сделать что проще (и даже более fasterer) путем поворота петли в comprehension вместо заявления:

print ''.join(chr(ord(letters) + 5) for letters in word) 
+1

Между прочим, я использовал выражение генератора вместо понимания списка, потому что он делает более концептуальным смысл «присоединяться» к итератору. (Конечно, под обложками 'join' просто собирается называть' list' на нем, но я бы не ожидал, что у всех это будет у них в голове, поэтому, если разница в производительности не изменится, я думаю итератор более ясен.) – abarnert

1

Я не знаю, если я получаю что вы спрашиваете 100%, но эта работа вокруг возвращали буквы без пробелов:

def no_space(word) : 
new_word = "" 
for letter in word : 
    new_word += chr(ord(letter) + 5) 
return new_word 

Затем вызовите функцию:

no_space("python") 

Результат: 'U ~ ymts'