我在python中创建了一个简单的脚本,它使用chr和ord将字母在ASCII表中向上移动了5个空格。见下文:
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
输出很棒,但是如何停止for循环在每个字母之间放置空格?
答案 0 :(得分:9)
如果您不需要使用for循环,只需执行以下操作:
print ''.join([chr(ord(letter) + 5) for letter in word])
而不是整个循环。
答案 1 :(得分:4)
当您使用“魔术逗号”时,无法阻止Python 2.x的print
语句打印空格。
这是Python 3.x的print
函数更灵活的部分原因,使用关键字参数而不是魔术语法:
for letters in word:
print(chr(ord(letters)+5), end='')
如果您真的想要,可以使用from __future__ import print_function
(或使用第三方six
库)在Python 2.x中获得相同的行为。
但是,通常情况下,当您遇到问题与print
进行斗争以达到您想要的效果时,解决方法是首先格式化您的字符串,然后打印它。所以:
output = ''
for letters in word:
output += chr(ord(letters)+5)
print output
通常更加pythonic(和更快)建立一个list
字符串,并在结尾调用join
,而不是重复追加到字符串:
output = []
for letters in word:
output.append(chr(ord(letters)+5))
print ''.join(output)
你可以通过将循环转换为comprehension而不是语句来使这更简单(甚至更紧固):
print ''.join(chr(ord(letters) + 5) for letters in word)
答案 2 :(得分: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'