1

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

# 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()

如果我输入了 sentence 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']

而我希望它是

你好
一世
是
一个FAFAF
4

3 回答 3

3

这很简单

f.write('\n'.join(sentence.split()))

甚至不需要创建变量(如果你想,splited你甚至可以消除变量:) 。sentencef.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')
于 2012-12-29T00:09:34.240 回答
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
于 2012-12-29T00:08:08.560 回答
2

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

splited = str(sentence.split())

您不应该将所有这些都转换为字符串, split() 返回 a 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')
于 2012-12-29T00:14:04.330 回答