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']

私はそうありたいのに

やあ
私
午前
ファファフ
4

3 に答える 3

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')
于 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() は を返す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 に答える