3

以下程序的目的是将 4 个字符中的单词从 转换"This""T***",我已经完成了使该列表和 len 工作的困难部分。

问题是程序逐行输出答案,我想知道是否可以将输出存储回列表并将其作为一个完整的句子打印出来?

谢谢。

#Define function to translate imported list information
def translate(i):
    if len(i) == 4: #Execute if the length of the text is 4
        translate = i[0] + "***" #Return ***
        return (translate)
    else:
        return (i) #Return original value

#User input sentense for translation
orgSent = input("Pleae enter a sentence:")
orgSent = orgSent.split (" ")

#Print lines
for i in orgSent:
    print(translate(i))
4

3 回答 3

3

使用列表理解和join方法:

translated = [translate(i) for i in orgSent]
print(' '.join(translated))

列表推导基本上将函数的返回值存储在列表中,这正是您想要的。你可以做这样的事情,例如:

print([i**2 for i in range(5)])
# [0, 1, 4, 9, 16]

map函数也可能很有用——它将函数“映射”到可迭代的每个元素。在 Python 2 中,它返回一个列表。但是在 Python 3(我假设您正在使用)中,它返回一个map对象,该对象也是您可以传递给join函数的可迭代对象。

translated = map(translate, orgSent)

join方法将括号内可迭代的每个元素与.. 例如:

lis = ['Hello', 'World!']
print(' '.join(lis))
# Hello World!

它不限于空间,你可以做一些像这样疯狂的事情:

print('foo'.join(lis))
# HellofooWorld!
于 2013-01-20T04:07:43.853 回答
3

在 py 2.x 上,您可以添加,after print

for i in orgSent:
    print translate(i),

如果您使用的是 py 3.x,请尝试:

for i in orgSent:
    print(translate(i),end=" ")

的默认值end是换行符(\n),这就是为什么每个单词都打印在新行上的原因。

于 2013-01-20T04:14:44.477 回答
1
sgeorge-mn:tmp sgeorge$ python s
Pleae enter a sentence:"my name is suku john george"
my n*** is s*** j*** george

您只需要使用 打印,。请参阅下面粘贴的代码部分的最后一行。

#Print lines
for i in orgSent:
    print (translate(i)),

为了您的更多理解:

sgeorge-mn:~ sgeorge$ cat tmp.py 
import sys
print "print without ending comma"
print "print without ending comma | ",
sys.stdout.write("print using sys.stdout.write ")

sgeorge-mn:~ sgeorge$ python tmp.py 
print without ending comma
print without ending comma | print using sys.stdout.write sgeorge-mn:~ sgeorge$
于 2013-01-20T04:11:04.967 回答