2012-12-29 17 views
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() 

如果我輸入的句子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 
+0

這是您的實際代碼?如果我運行它,我會從第23行('for'循環的開始)得到錯誤「TypeError:len()只需要一個參數(0給定)」。 – Blair

+0

是的這是完全一樣的代碼 –

+0

不,它不能 - 你粘貼的代碼不運行,而你聲稱獲得一些輸出。我想你在範圍內的位置(len()):'它應該是'我在範圍內(len(splited)):'。我已經把它打掃得盡善盡美。 – Blair

回答

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 
+0

感謝它現在的作品! –

+0

我想你的意見,但我需要1更多的聲譽像它,我需要15,我有14和是的,我會刪除NOOB。非常感謝 –

+0

但是,當我得到的最終產品,它擁有所有奇怪的ü是這樣的:[ ü 「 ^ h 我 」 , ü 「 我 」 , ü ' 一個 米 ' , ü ' 一個 ˚F 甲 ˚F A F ' ](但它的垂直) –

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') 
+0

thanKS bro,它的工作原理 –

+0

@AfaqQamar很高興我可以幫助 - 不要忘記[接受答案](http://meta.stackexchange.com/questions/5234/如何-不接受-的回答工作)。 – arshajii

2

OK,而不是給代碼高爾夫風格的答案,如果你願意,我會解釋的錯誤,如果你需要,可以輕鬆地添加這種額外的換行符!

splited = str(sentence.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') 
相關問題