我创建了一个程序,您输入一个单词,并在输入单词中的每个元音之前添加某些文本。该程序将要求用户再次播放,直到输入“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)?
第一个结果,“gipibbezzerizzish”是正确的。它第二次运行时出现错误,导致“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.
答案 0 :(得分:2)
在循环中有许多变量没有被重置:vowelcount
,first_vowel_count
和second_vowel_count
。
答案 1 :(得分:2)
在底部的if
语句中包含该代码是不必要的,如果playagain
为'n'
,则不会在while循环中。
无论如何,final_str
肯定会在那里重置 - 但您还需要重置vowelcount
,first_vowel_count
和second_vowel_count
。你可能最好只在循环开始时设置它们以便干掉。