裏 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でシェアする

モンテカルロ法により円周率を求める

2020年11月21日 | Python
Qiita では,これも定期的に出てくるやつ。
長々しいプログラムが散見されるが,以下のように簡潔に書く。
import numpy as np
def sim(n):
    xy = np.random.random((n, 2))**2
    print(np.mean(xy.sum(axis=1) < 1)*4)
< 1 のところを <= 1 にしないといけないのではないかとか,np.random.random は 0 以上,1 未満 の一様乱数なので,0 以上,1 以下の一様乱数を使わないといけないのではないかとか,おかしなことをいう人もいるが,そのようなおかしな人を相手にする必要はない。
コメント
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

PVアクセスランキング にほんブログ村

PVアクセスランキング にほんブログ村