こんにちは。
Pythonでのアルゴリズム入門を学習していて、苦手な部分で詰まっています。
助言をいただきたく、質問しています。
【追記】いただいたご回答に対して
昨日はみなさん、たくさん回答をしていただき、ありがとうございます。
また、ご回答が遅くなっておりますこと、申し訳ございません。
時間が取りにくい、一つ一つ考えて取り組ませていただいており、時間がかかってしまっております。
近日中にみなさんにはコメントにて返信いたしますので、
もう少しお待ちください。
前提・実現したいこと
グローバル変数とローカル変数についてです。
関数外で定義した変数(今回はresult2とします。)を
関数内で使用した場合、実行時にエラーがでました。
result2を関数外で定義したまま、エラーなく処理できる方法があれば教えてください。
※実行している内容は、10進数のものを〇進数へ変換するという内容です。
発生している問題・エラーメッセージ
UnboundLocalError: local variable 'result2' referenced before assignment
該当のソースコード
Python
1# nは10進数の値(変換対象)、baseは〇進数(下記は変換する2進数)を記載 2 3n = 18 4 5result2 = "" 6 7def convert(n, base): 8 while n > 0: 9 result2 = str(n % base) + result2 10 n //= base 11 12 13print(convert(n, 2))
以下はテキストの回答になります。
python
1n = 18 2 3def convert(n, base): 4 result2 = "" 5 6 while n > 0: 7 result2 = str(n % base) + result2 8 n //= base 9 return result2 10 11print(convert(n, 2)) 12
試したこと
ローカル変数・グローバル変数の取り扱いに誤りがあると思ったので、
以下の内容を実施しました。
①global
の記述を関数外へ追加(2パターン実行)
>>結果、そもそも関数外で定義した変数は、グローバル変数だから無意味
python
1# パターン1 2global result2 = "" # 左のように、関数外の変数を変更 3>> SyntaxError: invalid syntax 4# 変数名にスペース利用しているため
python
1# パターン2 2result2 = "" 3global result2 # results2をグローバル関数にする
②global
の記述を関数内で行う。
python
1# パターン1 2def convert(n, base): 3 while n > 0: 4 result2 = str(n % base) + result2 5 global result2 # 追記 6 n //= base 7>> SyntaxError: name 'result2' is used prior to global declaration
「result2は既にglobalで宣言されている」とでたので、
python
1# パターン2 2def convert(n, base): 3 while n > 0: 4 global result2 5 result2 = str(n % base) + result2 6 n //= base 7>> None # printでの出力結果
python
1# パターン3 2def convert(n, base): 3 while n > 0: 4 global result2 5 result2 = str(n % base) + result2 6 n //= base 7 return result2 # returnを追記 8>> 0 # printでの出力結果
補足情報(FW/ツールのバージョンなど)
Google Colab(Python 3.7.10)
回答6件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
退会済みユーザー
2021/03/23 01:25