0

たとえば、特定の単語(ieやeiのような連続した母音ではない)に母音を含むテキストを追加しようとしています。

単語:「奇妙な」

母音の前に追加するテキスト:'ib'

結果:'wibeird'

したがって、テキスト「ib」が母音「e」の前に追加されました。母音が連続しているときにテキストを追加したくないので、「i」を「ib」に置き換えなかったことに注意してください。

しかし、私がこれを行うとき:

単語:「犬」

母音の前に追加するテキスト:'ob'

結果:'doboog'

正しい結果は次のようになります:'dobog'

プログラムをデバッグしようとしていますが、「wibeird」と「dobog」が正しく出力されることを確認するためのロジックを理解できないようです。

これが私のコードです。最初に「weird」で実行した後、first_sylを「ob」に、wordを「dog」に置き換えます。

first_syl = 'ib'
word = 'weird'

vowels = "aeiouAEIOU"
diction = "bcdfghjklmnpqrstvwxyz"
empty_str = ""
word_str = ""
ch_str = ""
first_vowel_count = True

for ch in word:
    if ch in diction:
        word_str += ch
    if ch in vowels and first_vowel_count == True:
        empty_str += word_str + first_syl + ch
        word_str = ""
        first_vowel_count = False
    if ch in vowels and first_vowel_count == False:
        ch_str = ch
    if word[-1] not in vowels:
        final_str = empty_str + ch_str + word_str 

print (final_str)

Python3.2.3を使用しています。また、インポートされたモジュールを使用したくないので、Pythonの文字列とループの基本を理解するためにこれを実行しようとしています。

4

2 に答える 2

2

正規表現を検討しましたか?

import re

print (re.sub(r'(?<![aeiou])[aeiou]', r'ib\g<0>', 'weird')) #wibeird
print (re.sub(r'(?<![aeiou])[aeiou]', r'ob\g<0>', 'dog')) #dobog
于 2012-09-23T21:31:59.770 に答える
1

必要がない場合は、正規表現を使用しないでください。有名な引用があります

問題に直面したときに、「わかっている、正規表現を使用する」と考える人もいます。今、彼らは2つの問題を抱えています。

これは、基本的なif-thenステートメントで簡単に解決できます。使用されているロジックを説明するコメント付きバージョンは次のとおりです。

first_syl = 'ib' # the characters to be added
word = 'dOg'     # the input word

vowels = "aeiou" # instead of a long list of possibilities, we'll use the 
                 # <string>.lower() func. It returns the lowercase equivalent of a 
                 # string object.
first_vowel_count = True # This will tell us if the iterator is at the first vowel
final_str = ""           # The output.

for ch in word:
    if ch.lower() not in vowels:     # If we're at a consonant, 
        first_vowel_count = True     # the next vowel to appear must be the first in 
                                     # the series.

    elif first_vowel_count:          # So the previous "if" statement was false. We're 
                                     # at a vowel. This is also the first vowel in the 
                                     # series. This means that before appending the vowel 
                                     # to output, 

        final_str += first_syl       # we need to first append the vowel-
                                     # predecessor string, or 'ib' in this case.
        first_vowel_count = False    # Additionally, any vowels following this one cannot 
                                     # be the first in the series.

    final_str += ch                  # Finally, we'll append the input character to the 
                                     # output.
print(final_str)                     # "dibOg"
于 2012-09-23T23:48:08.617 に答える