让用户写一个句子并将其垂直发送到文件

时间:2012-12-29 00:02:06

标签: python

我想创建一个打印用户编写的句子的程序,并将其垂直打印到文件中。我目前的代码是:

# Create a program that takes sentence from user, and splits 
# the words into a list.
# Then write the list into a a file vertically.

# Take sentence from user
sentence = raw_input('Write a sentence :')

# Split the words of sentence
splited = str(sentence.split())
print splited

# Write to file
f=open('C:\Users\QamarAli\Desktop\HelloFile.txt', 'w')
for i in range(len(splited)):
    f.writelines(splited)
    f.writelines("\n")
f.close()

如果我输入句子Hi i am aFAFAF,则文本文件的内容为:

[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']
[u'Hi', u'i', u'am', u'aFAFAF']

而我希望它是

Hi
i
am 
aFAFAF

3 个答案:

答案 0 :(得分:3)

就像

一样简单
f.write('\n'.join(sentence.split()))

甚至无需创建splited变量(如果您愿意,您甚至可以删除sentence变量:f.write('\n'.join(raw_input().split())))。


如果你想坚持for循环,你可能想做这样的事情:

splited = sentence.split()  # notice no `str`

for i in range(len(splited)):
    f.write(splited[i])
    f.write('\n')

或更简单:

for s in sentence.split():
    f.write(s + '\n')

请注意,此方法将始终保留尾随换行符,而f.write('\n'.join(sentence.split()))则不会。如果需要,可以使用

轻松添加此额外的换行符
f.write('\n'.join(sentence.split()) + '\n')

答案 1 :(得分:2)

您正在将列表“打印”到文件中,而您应该遍历列表。

     # your code. get rid of your own for loop and replace it with this one
     for part in splited:
            #this is the part which I am talking about
            f.writelines(part)
            f.writelines("\n")
     # your code

答案 2 :(得分:2)

好的,如果您愿意,我会解释错误,而不是提供代码高尔夫风格的答案!

splited = str(sentence.split())

您不应将所有内容转换为字符串,split()会返回list,因此请将其保留为单词列表:

words = sentence.split()

接下来,你的循环错了:

for i in range(len()):

您选择的是for i in range(len(words)),但您可以for word in words:


所以你可以试试:

for word in sentence.split():
   f.write(word + '\n')