0

単語を入力すると、入力された単語の各母音の前に特定のテキストが追加されるプログラムを作成しました。プログラムは、いいえを表す「n」が入力されるまで、ユーザーにもう一度プレイするように求めます。

ただし、「y」が入力されると再生が続けられますが、何が起こるかは次のとおりです。

プログラムを初めて実行する場合:

Enter first syllable: ip
Enter second syllable: *zz
Enter word to translate: gibberish
Your translated word is: gipibbezzerizzish
Would you like to play again(y/n)? y
Enter first syllable: ip
Enter second syllable: *zz
Enter word to translate: gibberish
Your translated word is: gizzibbezzerizzish
Would you like to play again(y/n)? 

最初の結果「gipibbezerizzish」は正解です。2 回目に実行するとエラーが発生し、正しくない "gizzibbezzerizzish" という結果になります。

ループの最後で私がしたことは make final_str = "" なので、バックアップを開始すると空になりますが、何らかの理由でこれは機能しませんか? ここで何が問題なのですか?

Python 3.2.3 を使用しています。

コード:

vowels = "aeiou"
playagain = ""
wildcard = '*'
final_str = ""
vowelcount = 0
first_vowel_count = True
second_vowel_count = False

while playagain != "n": ## If playagain is not no, then keep going.
    first_syl = input('Enter first syllable: ')
    second_syl = input('Enter second syllable: ')
    word = input('Enter word to translate: ')
    for ch in word: ## Run loop for all characters in the entered word.
        if ch.lower() not in vowels: ## Checks if ch is vowel or not in word.
            first_vowel_count = True
            vowelcount += 1
        elif wildcard in first_syl and vowelcount <=2: ## Checks for first wildcard.
            final_str += ch + first_syl[1::] ## For first wildcard, remove * and add the vowel (ch) and the first_syl.
            first_vowel_count = False
            second_vowel_count = True
        elif first_vowel_count and vowelcount <= 2: ## If there is no wildcard, but a vowel, run this loop.
            final_str += first_syl       
            first_vowel_count = False
            second_vowel_count = True
        elif wildcard in second_syl: ## For second wildcard, remove * and add the vowel (ch) and the first_syl.
            final_str += ch + second_syl[1::]     
            first_vowel_count = False
            second_vowel_count = True
        elif second_vowel_count: ## If there is no wildcard, but a vowel, run this loop.
            final_str += second_syl
            second_vowel_count == False
        final_str += ch ## Finally, this is the resulting string to be printed.
    if playagain != "n": ## Ask user to play again.
        print("Your translated word is:", final_str) ## Print the word that has just been translated.
        playagain = input("Would you like to play again(y/n)? ") ## Then ask user to play again.
        final_str = "" ## Reset the string if playagain = "y" and start from the top.
4

2 に答える 2

2

ループ内でリセットされていない変数がたくさんあります: vowelcountfirst_vowel_count、およびsecond_vowel_count.

于 2012-09-25T02:56:46.353 に答える
2

一番下のステートメントにそのコードを含めるif必要はありませplayagain'n'

とにかく、final_str間違いなくそこでリセットされますがvowelcount、 、first_vowel_count、およびもリセットする必要がありますsecond_vowel_count。DRYになるように、ループの最初にそれらを設定する方がおそらく良いでしょう。

于 2012-09-25T02:59:07.613 に答える