Truel=""
count = 0
finle_touch=False #true after it find the first 3 upperletter
# check if there is 1 lower letter after three upper letter
def one_lower(i):
count=0
if i == i.lower:
finle_touch=True
Truel=i
# check for 3 upper letter
def three_upper(s):
for i in s:
if count == 3:
if finle_touch==True:
break
else:
one_lower(i)
Elif i == i.upper:
count +=1
print(count) #for debug
else:
count ==0
finle_touch=False
stuff="dsfsfFSfsssfSFSFFSsfssSSsSSSS......."
three_upper(stuff)
print(Truel)
donc j'ai beaucoup de ficelle sur "trucs" et j'aime trouver une lettre minuscule qui sorrund par 3 lettres majuscules.
mais quand je lance ce code je reçois:
Traceback (most recent call last):
File "C:\Python33\mypy\code.py", line 1294, in <module>
three_upper(stuff)
File "C:\Python33\mypy\code.py", line 1280, in three_upper
if count == 3:
UnboundLocalError: local variable 'count' referenced before assignment
je ne comprends pas pourquoi. Merci d'avance
En raison de cette ligne, count +=1
, python pense que count
est une variable locale et ne cherchera pas la portée globale lorsque vous avez utilisé if count == 3:
. C'est pourquoi vous avez cette erreur.
Utilisez l'instruction global
pour gérer cela:
def three_upper(s): #check for 3 upper letter
global count
for i in s:
De docs :
Toutes les affectations de variables dans une fonction stockent la valeur dans la table de symboles locale ; alors que les références de variable recherchent d’abord dans la table de symboles locale, puis dans la table de symboles globale, puis dans la table des noms intégrés. Ainsi, les variables globales ne peuvent pas être affectées directement à Une valeur dans une fonction (sauf si elles sont nommées dans une instruction globale), Bien qu'elles puissent être référencées.
En fait, il vaut mieux utiliser nonlocal dans ce cas. Utilisez global aussi économiquement que possible. Plus d'informations sur nonlocal ici docs.python.org/3/reference/simple_stmts.html#nonlocal