2017-12-27 18 views
0

私は、入力テキストをDiscards regional_indicatorの絵文字に変換するプログラムを作成していますが、「cab」などの単語が入力された場合、 abc "と表示されます。単語を入力するとアルファベット順にソートされないようにプログラムを変更する方法はありますか? (私はテスト目的のための最初の3つの文字をプログラムしてきました。IDLEはPython 3.5でコーディング)要するにアルファベット順にプログラムを印刷する方法を停止する方法

import sys 
sentence = input("Enter a sentence:") 
sentenceLower = sentence.lower() 
sentenceList = list(sentenceLower) 
sentenceListLength = len(sentenceList) 
while sentenceListLength > 0: 
    if "a" in sentence: 
     sys.stdout.write(":regional_indicator_a:") 
     sentenceListLength = sentenceListLength - 1 
    if "b" in sentence: 
     sys.stdout.write(":regional_indicator_b:") 
     sentenceListLength = sentenceListLength - 1 
    if "c" in sentence: 
     sys.stdout.write(":regional_indicator_c:") 
     sentenceListLength = sentenceListLength - 1 

を文字はその文に表示され、それがにテキストを出力した場合、プログラムは文、小切手を受け取りますDiscordにコピーして貼り付ける。

+0

私はあなたがしようとしていることを理解していませんが、おそらく、文章中の文字を探す代わりに、文章中の文字を繰り返し処理したいと思います。 –

+0

これは、私が頭の中で短期間で出くわすことができる最も効率的でない方法よりも効率的でない方法です。 –

答えて

2

文字数をループするのではなく、文章内の文字をループする必要があります。

for c in sentence: 
    if c == "a": 
     sys.stdout.write(":regional_indicator_a:") 
    elif c == "b": 
     sys.stdout.write(":regional_indicator_b:") 
    elif c == "c": 
     sys.stdout.write(":regional_indicator_c:") 

あなたは、文字列内の文字が存在する場合だけチェックしてやっているので、それがバックオーダーのうち、あなたに手紙を与えるだろう。

+0

私はあなたが正確な質問にどのように答えたのが好きですが、複数の「if」の美学と非効率性については言及していませんでした。 +1 –

+0

あなたは少なくとも「elif」に切り替えました。 –

+0

'if'sを削除する必要があります... –

1

一つの方法は、

import sys 
sentence = input("Enter a sentence:") 
sentenceLower = sentence.lower() 
sentenceListLength = len(sentenceLower) 
for i in range(sentenceListLength) : 
    c = sentenceLower[i] 
    if (("a" <= c) and (c <= "z")) : 
     sys.stdout.write(":regional_indicator_"+c+":") 
    else : 
     # Do your stuff 
     pass 

あなたは

for c in sentenceLower : 

代わりの

for i in range(sentenceListLength) : 
    c = sentenceLower[i] 

(と、それは通常よりニシキヘビと見なされる)を持つだけでなくトラバース文字は可能性があります。整数インデックスを使用する方が柔軟性があり、多用途になることもあります(これはあなた次第です)。

+0

インデックスが必要な場合でも、通常は範囲ではなく列挙によって得られます。 –

+0

@MadPhysicist - これは主に味の問題です。スピードもマイナーな問題です。https://stackoverflow.com/questions/11901081/only-index-needed-enumerate-or-xrangeとhttps://stackoverflow.com/questions/11990105/rangelenlist-or-を参照してください。 enumeratelist、例えば –

+0

enumerateのように思えるのは、毎回 '__getitem__'を呼び出すよりも速いです。 –

関連する問題