質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

3回答

1107閲覧

【Python】素数判定 for文とIf文の処理方法が理解不足なためご教授お願い致します。

momo.hi

総合スコア15

for

for文は、様々なプログラミング言語で使われている制御構造です。for文に定義している条件から外れるまで、for文内の命令文を繰り返し実行します。

if

if文とは様々なプログラミング言語で使用される制御構文の一種であり、条件によって処理の流れを制御します。

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/05/23 17:02

プログラミング言語、Pythonを使用して、数値型の値入力したときに、入力した値が素数であるかの判定を判定するプログラムを作っていますが、エラー内容と解決方法が分かりません。
それと、処理もたらないと思うのですが、アドバイス等も頂けると助かります。
ざっくりとした質問で申し訳ございませんが、ご教授頂けたら幸いです。
宜しくお願い致します。

【やりたいこと】
n が素数ならば True を返し,n が素数でなければ False を返す。

def is_prime(n): i = 2 #初期値 #2~引数の値までループさせる for i in range(n):     #引数までの数を2から1つづ割っていき割れたらTrueを返して表示 処理終了 if n % i == 0: return True break else:       #最後まで割れなかったらFalseを返して表示 処理終了  return False #素数か確認したい値を引数 is_prime(int(2163042))

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Orlofsky

2019/05/23 19:41

「教授」は職業。「教示」の意味を調べて質問を直しましょう。
hentaiman

2019/05/23 19:57

エラー内容が分からない時はエラーの文章をそのままグーグル先生に貼り付けると良いです。技術レベルが低い時のエラーほどたくさんの答えがヒットします。 その時に英語だから分かんな~いって読む努力と思考を放棄するか、英語調べて頑張るぞってなるかがこの先成長できるか否かの分かれ道です。後者は成長するけど前者はエターナル雑魚。 エラーが出たら落ち着いて読んで調べて頑張ってくださいね。
guest

回答3

0

おそらくプログラミング練習中かと思われますので、ヒントという形で

  1. おそらく出ているエラーはZeroDivisionErrorですね?

  これは「0で割り算はできないよ」という類のエラーです。つまりこの書き方だとiに0が入るパターンが起こり得るわけです。
端的にいえばrangeの使い方が違います。python 繰り返し 範囲指定などで検索してみましょう。

  1. 返り値のTrueとFalseはこの順番で合っていますか?このままだと割り切れた時にTrue(すなわち素数である)ということになってしまいませんか?

  2. 「速さ」を求めなければこのプログラムの処理は正しいと思います。ただ今後のことを考えて、エラーを直してちゃんと動くようになったら、「どうやったら早くできるか」を考えてみましょう。

例えば、「13」という数に対して7~の割り算をすることは必要ですか?(どう考えても不要ですね)

僕もプログラミングを始めた時に通った道なのですが、「エラーの原因究明→解決方法を調べる」の繰り返しによってついていく力もあると思うので、1~3をヒントにもう一度考え直していただければと思いますm(_ _)mファイトです!

投稿2019/05/23 17:28

FumiakiNakao

総合スコア180

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo.hi

2019/05/25 21:53

解決することが出来ました! エラー内容やPythonの勉強になりました! ヒントの内容もとても分かりやすくて勉強しやすかったです! もう少し勉強し、効率の良い処理ができるよう、プログラムを書けるように意識していきたいと思います!
guest

0

return True はループの後がいいんじゃないかなあ。

投稿2019/05/23 23:22

編集2019/05/23 23:35
takasima20

総合スコア7458

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo.hi

2019/05/25 21:46

解決できました!ありがとうございました!
guest

0

ベストアンサー

コメント行にだけ全角スペースが入っていましたが、それは直して実行しました(全角スペースは使えないので注意してください)。

エラー内容は

python

1 if n % i == 0: 2ZeroDivisionError: integer division or modulo by zero

ですかね? ゼロ除算はエラーになります。range(n)0,1,2,...,n-1を取り出せるイテラブルなので、こうなるのは当然です。

i = 2 #初期値はまったく無意味です。

python

1>>> i = 2 2>>> i = 0 3>>> i 40

というのと同じことです。2から始めたければ、

python

1for i in range(n-1): 2 i += 2 3 print(i)

みたいにすることはできるでしょう。これが一つの方法です。

もう一つの選択肢は、rangeのドキュメントを読んで、コンストラクタにどんな引数を渡せばいいのか考えることです。先に答えを書いてしまうと、今回はrange(2, n+1)とでもすれば意図通り動くのですが、どうしてそうなるのかはちゃんと考えてください。

組み込み型 — Python 3.7.3 ドキュメント | range

雑多な指摘
  • FumiakiNakaoさんの指摘している通り、TrueFalseがおそらく逆です。
  • ターミナルで実行する場合、関数の返り値をprintしないと何の出力もされないはずです。
  • returnの一行後のbreakは不要です。
  • int(2163042)ですが、2163042はもともとintのリテラルなので、外側のintは不要です。

投稿2019/05/23 17:35

編集2019/05/23 17:39
hayataka2049

総合スコア30933

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

momo.hi

2019/05/25 21:49

時間がかかってしまいましたが、解決することが出来ました! ソースまで入れて解説していただきありがとうございました! とってもわかりやすかったです!勉強になりました。 今後とも宜しくお願い致します!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問