如何在Python中没有尾随空格进行打印

时间:2015-11-09 20:35:46

标签: python string

我写了一个程序,用户可以在其中输入任何字符串。它应该:

  1. 删除所有元音。
  2. 插入字符“。”在每个辅音之前。
  3. 用相应的小写辅音替换所有大写辅音。
  4. 这是我写的代码:

    s=raw_input()
    k=s.lower()
    listaa=[]
    for x in k:
        listaa.append(x)
        if x=='a':
        listaa.remove('a')
        if  x=='o':
            listaa.remove('o')
        if x=='y':
            listaa.remove('y')
        if x=='e':
            listaa.remove('e')
        if x=='u':
            listaa.remove('u')
        if x=='i':
            listaa.remove('i')
    for a in listaa:
    print '.%s'%(a),
    

    此代码工作正常,但例如,如果我使用输入tour,则输出为.t .r。虽然这是对的,但这并不是我想要的。我想删除它们之间的空格。我希望输出看起来像:.t.r

    我该怎么做?

4 个答案:

答案 0 :(得分:2)

如果在打印后放置逗号,则会为print语句添加空格。要不打印空格或换行符,请使用sys.stdout.write()

固定代码:

import sys

s=raw_input()
k=s.lower()
listaa=[]
for x in k:
    listaa.append(x)
    if x=='a':
        listaa.remove('a')
    if  x=='o':
        listaa.remove('o')
    if x=='y':
        listaa.remove('y')
    if x=='e':
        listaa.remove('e')
    if x=='u':
        listaa.remove('u')
    if x=='i':
        listaa.remove('i')
for a in listaa:
    sys.stdout.write('.%s' % a)

注意:您需要添加import sys语句才能使用sys.stdout.write

答案 1 :(得分:1)

在python中使用print elem,使用空格的分隔符,这意味着它会在每次打印调用后自动打印一个空格。通过制作单个字符串只需调用print一次就可以避免这种情况:

print ''.join(listaa)

str.join(list)是一个内置的字符串方法,它将list的元素与str连接在一起。问题在于它在每个辅音之前都没有一段时间。

您的逻辑也可以更改为删除if语句。最好的方法是将你的逻辑改为add if not in种方式:

s=raw_input()
k=s.lower()
listaa=[]
for x in k:
    if x not in ['a','e','i','o','u']: listaa.append('.'+x.lower())

所有这一切都是检查x是否是元音,如果没有添加由句点组成的字符串x

你也可以在一行中完成这一切:

print ''.join('.'+x.lower() for x in raw_input() if x not in 'aeiou')

答案 2 :(得分:1)

避免使用remove,因为它会删除第一次出现的项目。 相反,在追加之前确定需要追加的内容:

if x in 'bcdfghjklmnpqrstvwxyz':
    listaa.append('.')
    listaa.append(x)
elif x not in 'aeiou':
    # If x is neither a vowel nor a consonant, it is appended.
    listaa.append(x) 

此外,最后将列表转换回字符串会很好:

result = ''.join(listaa)
print result

答案 3 :(得分:1)

正则表达式(包含在re库中)旨在完成这类工作。

import re
import string

alphabet = string.ascii_lowercase
vowels = 'aeiou'

consonants = "".join(set(alphabet)-(set(vowels)))
vowelre = re.compile("["+vowels+"]", re.IGNORECASE)
consonantre = re.compile("(["+consonants+"]){1}", re.IGNORECASE)

text = "Mary had a little lamb The butcher killed it DEAD"

print(vowelre.sub("", text))
print(consonantre.sub(".", text))

我注意到您已在查询中添加了Python 2.7标记。如果您使用的是2.7,那么我建议您习惯使用Python 3样式的打印功能。要启用此功能,您可能需要一行

from __future__ import print_function

代码。

tim@merlin:~$ python retest.py
Mry hd  lttl lmb Th btchr klld t DD
.a.. .a. a .i...e .a.. ..e .u...e. .i..e. i. .EA.

HTH