Trebuie să scriu un cod care să verifice un cuvânt pentru anumite silabe (exemple: în, ex, sunt). În cazul în care cuvântul este alcătuit numai din aceste silabe, codul returnează „Da” și „Nu” în caz contrar (dacă cuvântul conține și alte silabe). Sarcina îmi cere să folosesc un while true
buclă și, deși am găsit o modalitate mai simplă de a face acest cod să funcționeze, nu prea știu de unde să încep să fac o buclă de while true
buclă pentru această problemă.
Codul meu actual funcționează doar pentru cuvintele care au toate silabele:
def check(word):
pos = 0
while True:
if pos < len(word):
if word[pos:pos+2] == "in":
pos += 2
break
if word[pos:pos+2] == "ex":
pos += 2
break
if word[pos:pos+3] == "are":
pos += 3
break
return "YES"
Dacă ești hotărât să folosești o buclă while din anumite motive, ar fi ceva de genul acesta:
i = 0
while True:
i += 1
word = words[i]
if (syllables in word):
print('Syllables are in word')
else:
print('Syllables not in word')
if i > len(words):
break
Cu toate acestea, aceasta este probabil o modalitate mult mai proastă de a rezolva problema. Atunci când iterați printr-un set, este adesea mai eficient să folosiți o buclă for
buclă pentru a preveni verificarea inutilă a faptului că întregul set a fost verificat. O implementare a buclei for ar putea arăta astfel:
for s in syllable_set_1:
if s in word:
print('Syllable ' + s + ' is in word')
else:
print('Syllable ' + s + ' is not in word')
În cazul silabelor care se suprapun, este posibil să aveți nevoie de un fel de backtracking. O soluție simplă ar putea folosi while … else, astfel:
syllables = ["in", "ex"]
word = "exinex"
while word:
matches = [s for s in syllables if word.startswith(s)]
if not matches:
print "unable to find syllable for " + word
break
word = word.replace(matches[0], "", 1)
else:
print "only expected syllables found"
Fără a avea la dispoziție codul propriu-zis, buclele while True-Loops pot fi utilizate pentru a continua să solicite utilizatorului să introducă date până când este introdus un „cuvânt de oprire” special.
while True:
text = input("Enter next word to check, end to exit")
if text=="end":
break
else:
#... your syllable checking
Acest lucru ar permite utilizatorului să introducă mai multe cuvinte de verificat fără a fi nevoit să repornească programul de fiecare dată.
Ați putea face ceva de genul
words = iter(words)
while True:
try:
if next(words) in allowed_words:
continue
else:
return 'Yes'
except StopIteration:
return 'No'
return
fără o funcție eh – > .- Bine, am spus ceva de genul acest lucru. OP pare să înțeleagă problema suficient de bine pentru a o adapta – > .
- De ce este nevoie de un try:except din interes? – > .
- Atunci când iteratorul rămâne fără cuvinte, aruncă o eroare de tip
StopIteration
excepție. Astfel, știți că ați verificat toate cuvintele și trebuie să vă întoarceți – > .
while True: pass
. Rulați apoi așteptați (nu faceți asta :)) – > Por Jean-François Fabre.any
sauall
este mult mai bună decâtwhile True: ... break
– > Por Jean-François Fabre.