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

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

新規登録して質問してみよう
ただいま回答率
85.35%
Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

Q&A

解決済

2回答

670閲覧

Python3に関する大学の課題でどうしてもわからない問題があり、困っています。

Lapis_Mare

総合スコア0

Python 3.x

Python 3はPythonプログラミング言語の最新バージョンであり、2008年12月3日にリリースされました。

0グッド

0クリップ

投稿2021/09/29 02:52

編集2021/09/29 10:27

前提・実現したいこと

Python3に関する大学の課題でどうしてもわからない問題があり、困っています。
教授に質問したのですが、全く協力的ではなく、なにも解決しませんでした。
よろしければ、どなたか解説していただけると幸いです。
以下問題文です。

問)数aは、bで割り切れる場合、bの累乗であり、a / bはbの累乗です。パラメータaとbを取り、aがbの累乗の場合にTrueを返すis_powerという関数を記述します。注:基本ケースについて考える必要があります。

問題のヒント
教科書のセクション6.4のis_divisible関数が含まれていますか?
2つの引数を取るis_power関数を実装していますか?
is_power関数はis_divisibleを呼び出しますか?
is_power関数はそれ自体を再帰的に呼び出しますか?
is_power関数には、2つの引数が等しいという基本ケースのコードが含まれていますか?
is_power関数には、2番目の引数が「1」の基本ケースのコードが含まれていますか?

ヒントにあるis_divisible関数は、aはbで割り切れることを表した関数で、これは正しいと教授に言われました。

python3

1 2def is_divisible(a, b): 3 return a % b == 0

しかしis_power関数がどうしても書けませんので、お忙しいとは思いますが、どなたか解説していただけると幸いです。
よろしくお願いいたします。

原文

A number, a, is a power of b if it is divisible by b and a/b is a power of b. Write a function called is_power that takes parameters a and b and returns True if a is a power of b. Note: you will have to think about the base case. Does the submission include the is_divisible function from Section 6.4 of the textbook? Does the submission implement an is_power function that takes two arguments? Does the is_power function call is_divisible? Does the is_power function call itself recursively? Does the is_power function include code for the base case of the two arguments being equal? Does the is_power function include code for the base case of the second argument being "1"?

該当のソースコード

ソースコード

試したこと

def is_divisible(a, b): return a % b == 0 def is_power(a, b): if a <=0 or b <= 0: return False elif a == 1 and b == 1: return True else: if is_divisible(a, b): a = a/b is_power(a, b-1) else: return False

補足情報(FW/ツールのバージョンなど)

問題文は英語で出題されており、Google翻訳したものをそのまま載せているので、一部日本語がおかしなところがあるかもしれません。
私は大学でPythonについて学び始めたばかりで、いままでにいかなる言語でもコードを書いたことのない完全初心者です。素人にもわかるような言葉で説明していただけたらうれしいです。

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

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

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

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

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

otn

2021/09/29 02:59

再帰で書くことを期待されているようですが、再帰処理について理解していますか? 理解してないのなら、まずそこを理解しましょう。
ppaul

2021/09/29 03:35

下手に翻訳した日本語を載せるより、英語の問題文をそのまま載せたほうが意味がわかりそうですね。
ppaul

2021/09/29 05:10 編集

原文の最初の部分を翻訳してみました。 ある数aがbのべき乗であるのは、aがbで割り切れ、a/bがbのべき乗である場合である。 aとbというふたつの引数を受け取り、aがbのべき乗である場合はTrueを返す関数を作りなさい。 これは良くない課題です。aがbのべき乗でない場合には何を返すかが定義されていませんので、常にTrueを返す関数でも、条件を満たしていることになるからです。 回答とする場合には、条件には書かれていませんが、aがbのべき乗でない場合にはFalseを返すようにした方が良いでしょう。
ppaul

2021/09/29 05:11

この問題は再帰を使って解かなければならないのでしょうか。 ループを使って書いた方が簡単ですよ。
guest

回答2

0

基本的には、まずはその判定を手作業でやる場合の手順を明確に文章化するようにしてみてください。
それができれば、その手順をそのままコード化すればよいです。

具体的にはabで割っていき、それが割り切れる(is_divisible)ならa=a/bとして、それがある条件に到達するまで同じ操作をしていけばよいでしょう。
ただしaおよびbがある条件(base case)に当てはまる場合には、割る前に結果が確定します。

これは再帰でもWhileループでも実装できます。

投稿2021/09/29 04:32

can110

総合スコア38341

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

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

Lapis_Mare

2021/09/29 10:25

回答ありがとうございます。 以下の通り、直してみたのですが、やはりうまくいきません。 再帰の部分が間違っているのだと思いますが、再帰を使うことは課題の必須条件なので避けられません。 もうすこし具体的なアドバイスをいただけたらと思います。 お忙しいとは思いますが、よろしくお願いします。 def is_divisible(a, b): return a % b == 0 def is_power(a, b): if a <=0 or b <= 0: return False elif a == 1 and b == 1: return True else: if is_divisible(a, b): a = a/b is_power(a, b-1) else: return False
can110

2021/09/29 10:43 編集

この欄はソースコードのインデントが消えてしまうので、質問を続ける場合は質問本文に追記ください。 まず全体的なアドバイスですが、回答にも書きましたが、手作業で行う場合の手順を明確に文章に書いてみてください。そしてその文章をもとに実際に簡単な例で解いてみてください。 そして具体的なアドバイスというか質問なのですが、たとえばb-1を渡しているのはどんな意図があるのでしょうか?手作業で解く場合もそのような操作をしますか?
guest

0

自己解決

皆様ありがとうございました。なんとか以下の通りコードを書くことができました。

def is_divisible(a, b): return a % b == 0 def is_power(a, b): if a <=0 or b <= 0: return False elif a == b: return True else: if is_divisible(a, b): a = a/b return is_power(a, b) else: return False

投稿2021/09/29 14:06

Lapis_Mare

総合スコア0

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

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

can110

2021/09/29 14:13

惜しいです。 > Does the is_power function include code for the base case of the second argument being "1"? すなわちis_power(2,1)のようなケースを考慮してください。
Lapis_Mare

2021/09/29 14:15

elif b == 1: return False これを追記しました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問