2017-03-21 20 views
1

私はユーザの文章を取り込み、ユーザの文章の単語をその位置に置き換えて新しい文章を表示するこのプログラムをコーディングしました。 しかし、私はそれを実行するプログラムは正常に動作しますが、文に9つ以上の異なる単語が含まれている場合、より多くの桁を含む位置が別々に表示されます。 「この文は、以上の10個の単語が含まれていますが、出力は私が言うことかわからない間違っている」 予想される出力は次のようになります:出力間隔エラー

私はこの文を入力する場合

UserSentence = input("Please enter sentence: \n") 
UniqueWords = [] 
NewSentence = "" 

splitsentence = UserSentence 
splitsentence = splitsentence.lower().split() 

for word in splitsentence: 
    if word not in UniqueWords: 
     UniqueWords.append(word) 

for word in splitsentence: 
    NewSentence += str(UniqueWords.index(word)+1) 

NewSentence = ' '.join(NewSentence) 
print (NewSentence) 

:ここのコードです

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

しかし、その代わりに、私はすべて一緒にすべての数字がさえ二桁の数字は、スペースで区切られ得る:

1 2 3 4 5 6 7 8 9 1 0 1 1 1 2 1 3 1 4 1 5 1 6 1 7 1 8 1 9 

は、誰かが私にトンを助けることができますoこれを修正しますか?

+0

'join()'の呼び出しの前に 'print(NewSentence)'を試してください。 –

+0

私はすでに試みましたが、まだ出力が得られますが、このようにクラスタ化されました12345678910111213141516171819 –

+0

NewSentenceを 'list'にして' NewSentence.append(str(UniqueWords.index(word)+1)) 'を追加してください。 – davedwards

答えて

1

の文章は、1234...111213のようになります。join()は、NewSentenceをそれぞれの文字に分割します。代わりにjoin()を呼び出す代わりに、各ループの後にNewSentenceにスペースを追加する必要があります。これはあなたが望むものでなければなりません:

UserSentence = input("Please enter sentence: \n") 
UniqueWords = [] 
NewSentence = "" 

splitsentence = UserSentence 
splitsentence = splitsentence.lower().split() 

for word in splitsentence: 
    if word not in UniqueWords: 
     UniqueWords.append(word) 

for word in splitsentence: 
    NewSentence += str(UniqueWords.index(word)+1) + " " 

print(NewSentence) 
+0

しかし、これは私の答えと同じです...しかし、私はとにかくそれをupvoted – Veltro

+0

@リーム私はした後に答えを提出:||。あなたは+1 –

+0

@ downvotersをありがとうございました....いつもあなたがなぜdownvote –

3

私はあなたが問題をよく考えていると思います。

一意の値(問題ありません)を使用する場合は、set()を使用してください。

sentence = input("Please enter sentence: \n") 
words = sentence.lower().split() 
unique_words = set(words) 

次に、数字のリストが必要ですか?単語そのものは問題ではなく、そのコレクションのサイズだけです。

new_sentence = range(1, len(unique_words)+1) 

print(' '.join(map(str, new_sentence))) 

出力

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 

注文&言葉は問題なかった場合は、リストを引き続き使用しますが、最終的な出力はより簡潔

new_sentence = [ str(unique_words.index(word)+1) for word in unique_words ] 
new_sentence = ' '.join(new_sentence) 
1

があったことを行うことができます13行目のエラー:

あなたは、スペーサーを追加し、一度自分のコードを行わなければならない
NewSentence += str(UniqueWords.index(word)+1) 

は次のようになります。他の回答のように

UserSentence = raw_input("Please enter sentence: \n") 
UniqueWords = [] 
NewSentence = "" 

splitsentence = UserSentence 
splitsentence = splitsentence.lower().split() 

for word in splitsentence: 
    if word not in UniqueWords: 
     UniqueWords.append(word) 

for word in splitsentence: 
    NewSentence += str(UniqueWords.index(word)+1)+" " 

print NewSentence 
+1

あなたは気にしないことを願っていますが、これは私の答えと同じです... –

1

が提案、あなたは上に複雑です。スペース内に区切られた一連のインクリメンタルな数字の文字列を出力する必要があります。この数字は、その文の各単語の1つの数字です。

まず、言葉で文の長さを取得:

length = len(UserSentence.split()) 

その後、その範囲での文字列を作成:

newSentence = ' '.join([str(i+1) for i in range(length)]) 

joinメソッドの引数はリスト内包であります;これは1行でリストを作成することを可能にします)

次に、それを印刷してください:

print(newSentence) 
+1

+1は、与えられた仕事のための非常に良いアプローチです。私はまったく同じ方法でやりましたが、私はOPが扱っていた問題を説明したかったのです –