裏 RjpWiki

Julia ときどき R, Python によるコンピュータプログラム,コンピュータ・サイエンス,統計学

一番重大なエラーはどれか(Python)

2020年11月21日 | ブログラミング

とある質問サイトに,以下の投稿があった。そのサイトでは,適切に投稿しないとインデントが反映されないので,インデントは直しておいたが,もしかしたら,質問者のインデントも不適切な部分があったのかもしれない。

import math

number = input("正の整数を入力してください: ")

def trial_division(target):
 dest = int(math.sqrt(target))
 
 for i in range(2,dest):
  if target % 1 == 0:
   print(str(target) + "は素数ではありません")
   return
 print(str(target) + "は素数です")

trial_division(number)

というプログラミングを作成したのですが、エラーが出ました。
6行目と最後の行が間違っているようですが、なにが間違っているのでしょうか。 

唯一の回答者は,
 targetという変数が意味不明ですな
 numberじゃね? 
 ってより、numberをtergetにすりゃいいってはなしかなー 
などと与太を飛ばしております。

あなたならわかりますよね。

#############################

論理エラーでしょうね。range(2,dest)range(2, dest + 1) としないとだめ(Python 特有の罠)
target % 1 の分母は 1 ではなく i だというのは,本か何かのプログラムの写し間違い?(変数名がおかしいしなあ)
6行目 のエラーは math.sqrt(target) で起きているんだろうね。入力した number は,文字列だから,数値演算できない。

最後の行 の間違いというのは,input と def の位置が悪いと言うこと。

全部ダメだ

import math

def trial_division(number):
    dest = int(math.sqrt(number))
    for i in range(2, dest + 1):
        if number % i == 0:
            print(str(number) + "は素数ではありません")
            return
    print(str(number) + "は素数です")

number = int(input("正の整数を入力してください: "))
trial_division(number)
trial_division(23)
trial_division(24)
trial_division(25)
trial_division(1000000007)

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« モンテカルロ法により円周率... | トップ | あまりにも長い変数名はどう... »
最新の画像もっと見る

コメントを投稿

ブログラミング」カテゴリの最新記事