• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:パイソンのエラーの原因と対処法を教えて下さい。)

パイソンのエラーの原因と対処法を教えて下さい。

このQ&Aのポイント
  • パイソンのプログラムを組んだ際にエラーが発生しました。エラーの原因と修正法について教えてください。
  • プログラムの内容は、生成した乱数が素数か否か判定し、素数でなかった場合は0を、素数ならば1/(試行回数)を足し合わせる試行の中で、素数が出た回数を表示するものです。
  • プログラムが完成した場合、CPUを多くの回数試行させて、1から1000000000000000000までの数の中に含まれる素数の個数を推測することが目標ですが、エラーが発生しています。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.3

グローバル変数のint_aを関数内で変更したい場合は、変更する箇所より前に global int_a とint_aがグローバル変数であることを宣言してください。そうしないと、新しくローカル変数として作成されてしまいます。(グローバル変数を参照するだけで変更しない場合は、宣言は必要ないため、ここで引っかかる人が多いです。)

hf-sbf5
質問者

お礼

お二方ともありがとうございました。 以下のようにしたらとりえずエラーが でなくなりました。 出てくる答えがなんかおかしい気がしますが、 そこら辺はまた自分で調べときます。 global num_num NUM=input("Enterキーを押せ!") num_num = int(NUM) global list_a list_a = [] for cnt in range(num_num): from random import randint a_num = randint(1,100) for num in range(2,a_num): if a_num % num == 0: list_a.append(0) break else: list_a.append(1/num_num) break sum(list_a)*100 Enterキーを押せ!1100 47.000000000000256

hf-sbf5
質問者

補足

回答ありがとうございます。 int_aがグローバル変数であることを宣言したら、 local variable ‘int_a‘ referenced before assignment というエラーメッセージは表示されなくなりましたが、 今度は 'int' object is not iterable というエラーメッセージが出てきてしまいました。 反復不可能なものを反復可能にするための方法が分かりません。 どうしたらいいですか。 以下のように変更しました。 global num_num NUM=input("Enterキーを押せ!") num_num = int(NUM) def sosuu_kuzi(): global int_a a="0" int_a=int(a) from random import randint a_num = randint(1,100) for num in range(2,a_num): if a_num % num == 0: int_a += 0 break else: int_a += 1 / num_num break for cnt in range(num_num): sosuu_kuzi() tanomu = 10*int_a sum_a = sum(tanomu) sum_int_a = int(sum_a) print(sum_int_a) Enterキーを押せ!10 --------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-4-91e5d3ec4c6d> in <module> 18 sosuu_kuzi() 19 tanomu = 10*int_a ---> 20 sum_a = sum(tanomu) 21 sum_int_a = int(sum_a) 22 print(sum_int_a) TypeError: 'int' object is not iterable

その他の回答 (2)

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.2

>UnboundLocalError: local variable ‘int_a‘ referenced before assignment >と出てきてしまいます。どうしたらいいですか。 「 local variable ‘int_a‘ referenced before assignment」を訳してみましたか?

hf-sbf5
質問者

お礼

お礼が遅れた申し訳ありません。 回答ありがとうございました。

hf-sbf5
質問者

補足

「ローカル変数の ‘int_a‘ が指定される前に言及された」と解釈し、 ローカル変数は関数ブロック内でしか使えないから、 def sosuu_kuzi():   a=‘‘0‘‘   int_a=int(a) という形に切り替え、最後の段落のint_aを取り除いたんですが、 今度はエラーメッセージすら表示されなくなってしまいました。

  • wormhole
  • ベストアンサー率28% (1626/5665)
回答No.1

>def sosuu_kuzi(): >for sosuu_kuzi in range(num_num): 関数sosuu_kuziの後で変数sosuu_kuziを定義しているので、変数sosuu_kuziが勝ってます。 関数名と変数名を同じでないようにしてください。

hf-sbf5
質問者

お礼

お礼が遅れた申し訳ありません。 回答ありがとうございました。

hf-sbf5
質問者

補足

回答ありがとうございます。 for sosuu_kuzi() in range(num_num)   sosuu_kuzi()         ↓ for cnt in range(num_num)   sosuu_kuzi() に変更してみたんですが、 UnboundLocalError Traceback (most recent call last) <ipython-input-2-e 267ac 80b 77f> in <module>  13. brake  14 for cnt in range (num_num): →15() sosuu_kuzi() <ipython-input-2-e 267ac 80b 77f> in sosuu_kuzi ()  10 break  11 else: →12 int_a += 1%num_num  13 break  14 for cnt in range (num_num): UnboundLocalError: local variable ‘int_a‘ referenced before assignment と出てきてしまいます。どうしたらいいですか。

関連するQ&A