因此,我应该编写一个程序,以输入输入的夏威夷语单词并输出发音。
规则:
p,k,h,l,m,n的发音与英语相同。
W作为单词的开头或字母a,u或o之后的发音为w。但是,如果它在字母i或e之后,则发音为v。
对于元音:a的发音为“ ah”,e的发音为“ eh”,i的发音为“ ee”,o的发音为“ oh”,u的发音为“ oo”
对于组元音:ai的发音为“ eye”,ae的发音为“ eye”,ao的定义为“ ow”,au的定义为“ ow”,ei的定义为“ ay”,eu的定义为“ eh-oo”,iu的定义为“ ew”,oi是“ oyo”,ou是“ ow”和ui是“ ooey”
我要去的是:
因此,我已经能够识别元音和分组的元音并将其放入转换后的单词中,但是它完全跳过了不是元音或分组元音的字母。我很难找到我的错误。例如,如果我输入“ aloha”,则应输出“ ah-loh-hah”;如果输入“ mahalo”,则应输出“ mah-hah-loh”,但它会完全跳过一些字符。用我的代码,aloha只会打印出“ ah-ah”,这是错误的。
下面是我的代码:
consonants = ('p','k','h','l','m','n')
def check(valid, word):
for x in word:
x = x.lower()
if valid.count(x) == 0:
print(x, "is not a valid hawaiian word")
return False
return True
def convert(word):
convert = ""
x = 0
while x < len(word)-1:
word = word.lower()
if word[x] == "a":
after_x = word[x+1]
if after_x == "i" or after_x == "e":
convert = convert + "eye-"
x = x+1
elif after_x == 'o' or after_x == "u":
convert = convert + "ow-"
x=x+1
else:
convert = convert + "ah-"
elif word[x] == "e":
after_x = word[x+1]
if after_x == "i":
convert = convert + "ay-"
x = x+1
elif after_x == 'u':
convert = convert + "eh-oo-"
x= x+1
elif after_x == 'w': #
convert = convert + "v"
x=x+1
else:
convert = convert + "eh-"
elif word[x] == "i":
after_x = word[x+1]
if after_x == "u":
convert = convert + "ew-"
x = x+1
else:
convert = convert + "ee-"
elif word[x] == "o":
after_x = word[x+1]
if after_x == "i":
convert = convert + "oy-"
x = x+1
elif after_x == "u":
convert = convert + "ow-"
x = x+1
elif after_x == 'w': #
convert = convert + "v"
x = x+1
else:
convert = convert + "oh-"
elif word[x] == "u":
after_x = word[x+1]
if after_x == "i":
convert = convert + "ooey-"
x = x+1
else:
convert = convert + "oo-"
elif word[x] == consonants:
convert = convert + consonants
elif word[x] == " " and convert[len(convert)-1] == "-":
convert = convert[0:len(convert)-1] + " "
elif word[x] == "\'" and convert[len(convert)-1] == "-":
convert = convert[0:len(convert)-1] + "'"
else:
convert = convert + word[x]
x = x +1
if x < len(word):
m = word[len(word)-1]
m = m.lower()
if m == "a" or m == "e" or m == "o":
convert = convert + m + "h"
elif m == "i":
convert = convert + "ee"
elif m == "u":
convert = convert + "oo"
else:
convert = convert + m
if convert[len(convert)-1] == '-':
convert = convert[0:len(convert)-1]
convert = convert.upper()
return convert
def main():
valid = ['p','k','h','l','m','n','w','a','e','i','o','u',' ', '\'']
while True:
word = input("Enter a Hawaiian Word to Pronounce")
word = word.strip()
if(check(valid,word)):
converted_word = convert(word)
converted_word = converted_word.upper()
print(word + " is pronounced" , converted_word)
repeat = input("Would you like to enter another word Y/YES/N/NO")
repeat = repeat.upper()
if repeat == 'N' or repeat == 'NO':
break
else:
main()
main()
谢谢。
最佳答案
我认为在您的情况下,最好使用字典:
VOWELS = {
'a': 'ah',
'e': 'eh',
'i': 'ee',
'o': 'oh',
'u': 'oo'
}
VOWEL_PAIRS = {
'ai': 'eye',
'ae': 'eye',
'ao': 'ow',
'au': 'ow',
'ei': 'ay',
'eu': 'eh-oo',
'iu': 'ew',
'oi': 'oyo',
'ou': 'ow',
'ui': 'ooey',
'iw': 'v',
'ew': 'v'
}
这是一个将给定单词转换为转录的函数:
def pronounce(word):
chars = word.lower()
i = 0
result = []
while i < len(chars):
char = chars[i]
if i < len(chars) - 1:
pair = char + chars[i + 1]
tr = VOWEL_PAIRS.get(pair)
if tr is None:
tr = VOWELS.get(char)
else:
i = i + 1
else:
tr = VOWELS.get(char)
if tr is not None and i < len(chars) - 1:
tr = tr + '-'
result.append(tr or char)
i = i + 1
return ''.join(result)
结果如下:
>>> pronounce('aloha')
'ah-loh-hah'
>>> pronounce('mahalo')
'mah-hah-loh'