私はPythonで友人を指導しています。この割り当ては、文字 "p"を追加した後にすべての母音シーケンスを繰り返すエイリアン言語を逆にするスクリプトを書くことです。いくつかの例:サブストリングの交換に関するbeginner pythonスクリプトの最適化
tomato -> topomapatopo
groovy->groopoovy
とbeautiful -> beaupeautipifupul
の目標は、これを逆にすることです。 groopoovy -> groovy
から。
オランダの割り当てであるため、「ij」は母音として認識されます。だからblijpij -> blij
(多くのことを複雑にする、私は見つける)
私のソリューションは私にとって非常に嵩張っているようだと私はより良い、より洗練されたソリューションに興味があります。これはプログラミングの導入コースなので、残念ながら基本が重要です。
word = input()
vowels = ('a', 'e', 'i', 'o', 'u')
position = 0
solution = ""
while position < len(word):
if word[position] == 'p': # obviously, search for the letter 'p'
add = 1 # keep track of the sub string size
group = ""
while True: # loop to get consecutive vowels
if word[position + add] in vowels:
group += word[position + add]
if word[position + add] == 'i' and word[position + add + 1] == 'j': # recognize the "ij"
group += 'j'
add += 1
add += 1
else:
break
if position+add == len(word): # stay within the bounds of the string
break
add -= 1
if word[position - add:position].lower() == group.lower() and group != "":
position += add
else:
solution += 'p'
else:
solution += word[position]
position += 1
print(solution)
これは一行にも当てはまります。これは確かに私が探していたよりエレガントなソリューションです。ありがとうポール。 'c == 'p''のときに左右の部分をチェックするために少し微調整が必要でした。そうでなければ'岬 'という言葉が破られました。 –
プログラムは、入力語がレシピに従ってフォーマットされているとみなし、構文やスペルミスをチェックしません。あなたのバージョンはそれをチェックしません。 "岬"は有効な入力ではありません。 "capapepe" *は有効であり、正しく "cape"という結果を返します。 –