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

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

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

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

Q&A

解決済

4回答

169閲覧

一度出力した値を同じ関数に引数として再度入力する方法

Hayato0513

総合スコア27

Python

Pythonは、コードの読みやすさが特徴的なプログラミング言語の1つです。 強い型付け、動的型付けに対応しており、後方互換性がないバージョン2系とバージョン3系が使用されています。 商用製品の開発にも無料で使用でき、OSだけでなく仮想環境にも対応。Unicodeによる文字列操作をサポートしているため、日本語処理も標準で可能です。

0グッド

0クリップ

投稿2019/06/28 15:22

一度関数で出力した値を同じ関数に再度引数として入力して値を出力する方法を教えてください。
ネットでめちゃくちゃ調べてみたんですけど、なかなか納得のいく答えが見つかりませんでした。
個人的には関数の中に関数を組み込むのかなと思ったんですけど、違うようにも思えてしまって。
端的に軽くでも全然いいので、一言アドバイス的な感じでアイディアとして教えてもらえるだけでもすごく助かります。
丸投げみたいな質問になっているのは承知なのですが、どれだけ調べても出てこなかったのでどうかよろしくお願いします。お知恵を貸してください。

例、ある2つの引数が関数に入って、その関数内で2つの数同士で割算をし、その商と余りをまた同じ関数に引数としてまた入力して割り算するようなものです。

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

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

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

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

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

pepperleaf

2019/06/28 15:24

再帰(自分自身を呼び出す)じゃいけませんか? この場合、終了条件に注意が必要ですが。
otn

2019/06/28 15:31

> 例、ある2つの引数が関数に入って、(以下略) ふつうにそのまま、その通り書けば良いと思いますが。
Hayato0513

2019/06/29 04:47

やはり再帰が有効かもしれません!ありがとうございます!やって見ます!
guest

回答4

0

ベストアンサー

2回

python

1result = some_func(some_func(param))

複数回

python

1prev = first 2while 継続する条件: 3 prev = some_func(prev)

python

1prev = first 2while True: 3 if 終了する条件1: 4 break 5 6 if 終了する条件2: 7 break 8 9 prev = some_func(prev)

みたいな無限ループもよく書かれます。

投稿2019/06/28 23:06

quickquip

総合スコア11038

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

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

Hayato0513

2019/06/29 04:49

ベストアンサーにさえてもらいます!!ありがとうございます!!
guest

0

コメントついてる通りではあるんですが…。

一度関数で出力した値を同じ関数に再度引数として入力して値を出力する

というフローが1回だけの繰り返せばいいなら単純に2回呼べばいいんですが、そうじゃなくて何らかの終了条件を満たすまで繰り返したい、という場合には再帰呼び出しを行います。

投稿2019/06/28 21:10

gentaro

総合スコア8949

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

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

Hayato0513

2019/06/29 04:49

再帰についてもう一回勉強して見ます!!
guest

0

次のコードを研究してみてください。
while ループで呼び出しを繰り返す版と、再帰呼び出しさせる版を示しています。
x.py

python3

1def cal(arg): 2 print(arg) 3 if len(arg) == 2 and arg[1] != 0: 4 return [arg[0] // arg[1], arg[0] % arg[1]] 5 return [] 6 7# 1回の呼び出し 8print(cal([10, 3])) 9 10# 2回の呼び出し 11print() 12arg = [9999, 13] 13print(cal(cal(arg))) 14 15# 3回の呼び出し 16print() 17arg = [9999, 13] 18print(cal(cal(cal(arg)))) 19 20# 計算が可能限り呼び続ける 21print() 22arg = [9999, 23] 23while True: 24 if len(arg) != 2: 25 break 26 arg = cal(arg) 27 28# 再帰呼出し 29def rec_cal(arg): 30 if len(arg) == 2 and arg[1] != 0: 31 print(arg) 32 rec_cal([arg[0] // arg[1], arg[0] % arg[1]]) 33 34arg = [9999, 23] 35print() 36rec_cal(arg)

実行例
イメージ説明

投稿2019/06/29 09:14

編集2019/07/05 12:58
katoy

総合スコア22324

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

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

Hayato0513

2019/07/05 05:17

まさに模範解答です!!再帰呼び出し、while と関数を使った無限ループ本当に参考になりました!!ありがとうございます!!
Hayato0513

2019/07/05 05:20

あと1つだけ質問なんですが、最初の関数の後にreturn[] があるのですがこれは具体的にどういった役割のものなんですか??
katoy

2019/07/05 13:08

return [] がない版と ある版で print(cal(cal([]))) を実行してみてください。 return [] がないではエラーが発生してしまいます。
guest

0

例、ある2つの引数が関数に入って、その関数内で2つの数同士で割算をし、その商と余りをまた同じ関数に引数としてまた入力して割り算するようなものです。

Python

1def div_mod(x, y): 2 return x // y, x % y 3 4a = 101 5b = 7 6print(a, b) 7a, b = div_mod(a, b) 8print(a, b) 9a, b = div_mod(a, b) 10print(a, b)

実際には divmod という関数があるので div_mod は不要です。

投稿2019/06/29 00:38

kazuma-s

総合スコア8224

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

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

Hayato0513

2019/06/29 04:48

ありがとうございます!!!非常にわかりやすくて助かりました!!!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問