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)
だから私は「もの」にたくさんの文字列を取得し、3つの大文字で悲鳴を上げる1つの小文字を見つけるのが好きです。
しかし、私はこのコードを実行すると次のようになります:
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
理由がわかりません。前もって感謝します
この行により、count +=1
pythonはcount
がローカル変数であり、if count == 3:
を使用したときにグローバルスコープを検索しないと考えています。そのエラーが発生しました。
global
ステートメントを使用して、それを処理します。
def three_upper(s): #check for 3 upper letter
global count
for i in s:
docs から:
関数内のすべての変数割り当ては、ローカルシンボルテーブルに値を保存します。一方、変数参照は、最初にローカルシンボルテーブルを調べ、次にグローバルシンボルテーブルを調べ、次に組み込み名のテーブルを調べます。したがって、グローバル変数は、(グローバルステートメントで名前が指定されていない限り)関数内で値を直接割り当てることはできませんが、参照される場合があります。
この場合、実際には非ローカルを使用することをお勧めします。できるだけ控えめにグローバルを使用してください。非ローカルの詳細はこちら docs.python.org/3/reference/simple_stmts.html#nonlocal