python
1import random 2 3def randRangeParam2(x,y): 4 return randRangeParam2.randict(x,y)
このプログラムの最終目標はパラメーターXとパラメーターYが整数でx<yの時にランダムにXからYの中の整数を一つランダムに取り出すことです。
そこでランダムの使い方についていくつか質問したいことがあります。
一つ目にこのコードを実行すると
return randRangeParam2.randict(x,y)
AttributeError: 'function' object has no attribute 'randict' というエラー文が出ました
このAttributeErrorとは何ですか?
二つ目にランダム関数を使うときはimportは必須項目なのですか?
また、例を調べてもprintを使ったやり方ばかりがヒットするのですが私が試してみたみたいにdefとreturnを使ったやり方を知りたいです。
たくさん質問してしまってすみません。
習ったばかりでまだわからないことだらけなので教えてほしいです。
自分で何かを調べましたか??
>このAttributeErrorとは何ですか?
調べたり翻訳しても分からなかったですか?
>ランダム関数を使うときはimportは必須項目なのですか?
どうやってランダム関数を学習したのでしょうか?
また、importせずにどうなるか試してみましたか?
ごく初歩的な努力さえせずに質問している、つまり丸投げ質問に見えます。
すみません、質問の仕方が悪かったですね。
どちらも既に調べています。
その中では、importは必須ではなさそうだったのですが、私が一度この式とは違うimportなしの物を実行したときにランダムというモジュールは存在しないというようなエラーが出たため疑問に思って質問しました。
また、もう一つのAttributeErrorは調べて、私のオブジェクト名、識別子名が違うとは理解できました。
しかし、それがどうして起こったかがわからなかったので聞きました。
私の努力不足だったのでもう少し考えてみます。
丁寧にありがとうございます
質問文を読むとご自身で何一つ調べていないような印象を受けるので、調べたことがあるなら質問に書いた方が良いです。※質問は編集できますので追記しましょう。
> 習ったばかりでまだわからないことだらけなので教えてほしいです。
学校の授業で習ったということでしょうか?先生には質問しましたか?
> その中では、importは必須ではなさそうだったのですが、
そう思ったのは何故でしょうか?勘違いかと思いますが、教科書等のどこかに書いてありましたか?
ちょっとよく分からないですが…
>importは必須ではなさそうだったのですが、
pythonの組み込み関数では乱数が扱えません。
なので、一般的にはrandomモジュールをimportして使います。
randomモジュール以外のモジュールを使うならrandomモジュールのimportは不要ですが、何らかの乱数を扱えるモジュールのimportは必須です。
>AttributeErrorは調べて、私のオブジェクト名、識別子名が違うとは理解できました。
>しかし、それがどうして起こったかがわからなかったので聞きました。
> randRangeParam2.randict(x,y)
違うとわかれば、どうして起こった?と言われても「正しく記述していないか起こった」んです。
そのオブジェクト名は実在するオブジェクトを表しているのか?そしてそのオブジェクトにその識別子は存在するのか?確認しましたか?
これ、全体がおかしいのですが、分かりやすい部分だけを【正確ではないけど】分かりやすいようにいうと、`randict()`というAttribute(この場合メソッド・関数)をpythonは知りません。
「randRangeParam2に対してrandict(x,y)を実行しろと言われても、randict()が何か分からないという事です。
自分でそういう関数を作っていませんし、randomモジュールにも存在しません(仮に存在したとしてもrandomモジュールを使っていません)。
つまり、誰も作ってない関数を自分の想像した名前で呼んだら自分の思っているような動作をするような事がありえないという事です。
(この説明は分かりやすく言っているだけで正しくはありません。正確に言うとrandRangeParam2という関数にrandict()というメソッドが定義されていないという事です)
想像ですが、randict()はrandint()の事ではないかと思います。
が、もしそうだとしても上述のように全体がおかしいのでそれだけを修正した所で動作はしません。
また、randint()とすれば何らかのモジュールで生成できるオブジェクトに含まれるメソッドなのでimportが必須でない事がありえません。
説明ありがとうございます。
はいそうです。
大学の授業で習いました。
今私は大学の授業をオンラインで受けています。
先生にはメールを送っているのですが返信が来ない為テラテイルで質問しました。
教科書はなく、ズーム内で教えてもらう形です。
importについてはもう一度調べ直したいと思います。
なるほど。randict をただ当てはめるのではなく私の式の中にrandict が何であるかを説明するものを付け加える必要があるんですね。
ありがとうございます。
とても参考になりました!
もう一度一から作り直してみます。
何度も教えてくださりありがとうございます????
> 大学の授業で習いました。今私は大学の授業をオンラインで受けています。先生にはメールを送っているのですが返信が来ない為テラテイルで質問しました。教科書はなく、ズーム内で教えてもらう形です。
最初から質問に上記を書いておくと回答が付きやすくなるかと思います。(丸投げ感が少し減ります)
ただ先生に質問してから何日経過したのでしょうか?1~2日は待っても良いかと思います。いつまでも回答がなければ大学に相談された方が良いと思います。
> 例を調べてもprintを使ったやり方ばかりがヒットするのですが
私が試してみたみたいにdefとreturnを使ったやり方を知りたい
def randRangeParam2(x,y):
内の
return randRangeParam2.randict(x,y)
を
print(randRangeParam2.randict(x,y))
に変えても、同じエラーになりますよね
エラーになるのは、print か return かとは関係ありません
def randRangeParam2(x,y):
内で print(...) を実行してもエラーにならないように「randRangeParam2.randict(x,y)」を書き換えれば、それを return してもエラーになりません
返信ありがとうございます。
そうですね、大学側にも問い合わせてみたいと思います。
なるほど、エラーになるのは、print か return かとは関係ないんですね。
勉強になりました!
回答3件
あなたの回答
tips
プレビュー