目的
大学の自由課題で、1000以下の素数を表示するプログラムを書きました。そこで、素数と非素数の個数の和が1000になることを確認するために、assert文を使ってみました。ただ、素数表示のプログラムは機能するのですが、assert文のところでエラーが発生してしまうので、解決策をお願いします。
発生している問題・エラーメッセージ
入力したプログラム全体を最初に書きます。長いですがすいません。
# 1000未満の素数を表示する import math # 素数判定関数 def prime(num): if num < 2: return False # 2未満の数字は非素数 elif num == 2: return True # 2は素数 elif num % 2 == 0: return False # 偶数は非素数 # その数の平方根以下の奇数で割り切れるか調べる for i in range(3, math.floor(math.sqrt(num))+1, 2): if num % i == 0: return False # 途中で割り切れるものは非素数 else: return True # 素数 # 素数表示関数 def showprime(input_num=1000): numbers = [] # 素数を探してリストに追加 for i in range(1, input_num): if prime(i): numbers.append(i) return numbers ok = 0 # 素数の個数をカウント ng = 0 # 非素数の個数をカウント if numbers == prime(num): ok += 1 else: ng += 1 assert ok + ng == input_num # 素数と非素数の個数の総和 print(showprime(1000))
File "<ipython-input-37-d2c806c85a86>", line 29 ok = 0 # 素数の個数をカウント ^ SyntaxError: invalid character in identifier
該当のソースコード
ok = 0 # 素数の個数をカウント
試したこと
余分な空白があるということなのですが、それをなくすとassert文のところで、
File "<ipython-input-44-3122a612f2a9>", line 33
else:
SyntaxError: invalid character in identifier
と表示されてしまいます。
そこでelseをなくしてみると、
NameError Traceback (most recent call last)
<ipython-input-46-0c313c81ab68> in <module>()
29 ok = 0 # 素数の個数をカウント
30 ng = 0 # 非素数の個数をカウント
---> 31 if numbers == prime(num):
32 ok += 1
33
NameError: name 'numbers' is not defined
となってしまいました。
補足情報(FW/ツールのバージョンなど)
Google Colaboratory を使っています。
###最後に
Python初心者でありかつ初質問なので、至らない点があるかもしれません。その際は今後のためにも教えてもらえると非常に助かります。長くなりましたがよろしくお願いします。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/05/13 04:58