重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

プログラミング初心者です。pythonを勉強しています、
子供に教える仕事をしていて、算数の割り算の問題を作るときに答えが必ず整数になる問題を作ってくれるプログラムをつくろうと思い、ちょうどrandomモジュールの使い方を勉強したので、以下のコードを書いてみたところ、エラーは出ないのですが、処理結果が表示されません。ループ処理をしているのか、ctl+cで中断するとエラー(?)が表示されます。
import random

while True:
a = random.randint(1,10)
b = random.randint(1,10)
answer = a/b
if isinstance(answer,int) == True:
break

print ("a=",a)
print ("b=",b)
print ("answer = ",answer)

File ".\mondai_sakusei.py", line 4, in <module>
b = random.randint(1,10)
File "C:\***********", line 221, in randint
return self.randrange(a, b+1)
File "C:\***********", line 197, in randrange
return istart + self._randbelow(width)
KeyboardInterrupt

A 回答 (3件)

こんにちは



C:\>python
Python 3.6.5 |Anaconda, Inc.| (default, Mar 29 2018, 13:23:52) [MSC v.1900 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>>
>>> a = 2
>>> type(a)
<class 'int'>
>>> b = 4
>>> type(b)
<class 'int'>
>>> answer = a/b
>>> type(answer)
<class 'float'>

これで、なぜループから脱出しないかお分かりになると思います。
ifの条件は決してTrueになりません。
No.1さんの仰るとおり、割った余りが0か否かで判断すべきでしょう。



この掲示板は行頭の半角スペースが削除されてしまいます。
pythonはインデント(段付)が重要ですので、
行頭のスペースを全角や他の文字(_など)に置換して張り付けた方が良いですね。
    • good
    • 0

if文のところ書き直したらpython3でも動きました ∑o(*'o'*)o


嘘言ってごめんなさーい m(。≧Д≦。)m
    • good
    • 0

多分、Python3で動かしちゃってるんですよ。


henjinさんが書いているのはPython2なので、Python2の上で動かさないとダメなんですよ。

あと、多分それだとhenjinさんが期待してる動作にはならないんだよね。int型/int型だと割りきれなくても切り捨てでint型の結果が返って来ちゃうんだよね。
なので、
・bとanswerに乱数を、aにはa*answerを代入する。
それか
・a,bは乱数のままで、mod=a%bのようにすればa/bの余りがmodに入るのでmod==0になるまでループにする。
にすればよさそう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!