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

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

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

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

Q&A

2回答

2088閲覧

python ジェネレータ関数

gsaikederikku1

総合スコア8

Python

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

0グッド

0クリップ

投稿2016/11/19 01:09

編集2016/11/19 02:07

###前提・実現したいこと
関数を呼び出すたびに、偶数2,4,6の順に出力するジェネレータ関数gen_()を定義し、これを使って1000以下の偶数をすべて表示するという問題があります。
pythonです。
よろしくお願いいたします。
###発生している問題・エラーメッセージ

エラーメッセージ

###コード
def gen_()
for y in range(1, 1000):
... if y % 2 == 0:

y = gen_()
for c in range(1000):
print(next(i))

###試したこと
課題に対してアプローチしたことを記載してください

###補足情報(言語/FW/ツール等のバージョンなど)
より詳細な情報

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

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

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

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

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

gsaikederikku1

2016/11/19 01:45

関数を呼び出すたびに、偶数2,4,6の順に出力するジェネレータ関数gen_()を定義し、これを使って1000以下の偶数をすべて表示するという問題に対してコードを書いたのですが、これに対する答えがもらいたいです。
guest

回答2

0

まず、「ジェネレーター関数とは何か?」ということを理解していますか?
用語集 — Python 3 ドキュメント #generator
まずは上を読んでください。読みましたか?もし読んでいないなら今すぐ読んでください。もし、読みたくないなら、一生Pythonを身に付くことはできませんので、Pythonでプログラミングは諦めて下さい。何かプログラムを作りたいなら、プログラマーを雇って下さい。

ジェネレーター(generator)関数の説明を読んだ上で話します。

通常の関数に似ていますが、 yield 式を持つ点で異なります。

とあるように、ジェネレーター関数は yield 式を持ちます。あなたが書いたgen_()関数には yield と言うキーワードがありません。yieldがなくてもジェネレーター関数になる例外は、別のジェネレーター関数で作られたジェネレーターを返すという場合ですが、return文もありませんので、そうではありません。つまり、あなたの書いたgen_()関数はジェネレーター関数でも何でもない関数です。

ジェネレーター関数でも何でも無い関数なので、そもそも作ろうとしている物が間違っています。なので、**どこが具体的に間違っているかを指摘することはできません。**あなたがまず真にやるべき事はyieldの使い方を学ぶことです。
7. 単純文 (simple statement) — Python 3 ドキュメント #7.7. yield 文
6. 式 (expression) — Python 3 ドキュメント #6.2.9. Yield 式
まずは、上のマニュアルを読んでください。読んでもよくわからなかった…というのであれば、Python全体に対する知識が足りません。入門書を買うなり、入門サイトを見るなりして、Pythonについて初めから学んでください。そうしなければ、あなた自身が問題を解くことは永遠にできません。

もし、問題の答えだけが欲しいのであれば、宿題代行サービスに頼んでください。お金さえ払えば答えは書いてくれます。

投稿2016/11/19 02:14

編集2016/11/19 02:15
raccy

総合スコア21735

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

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

0

python

1def gen_() # コロン忘れ 2 for y in range(1, 1000): # range(1, 1000)は1000以下にはならない 3 ... if y % 2 == 0: # Ellipsisを書いた理由が不明 4 5 y = gen_() # 無限に再帰するような……? 6for c in range(1000): 7 print(next(i)) # iが未定義

常識的なインデントだとして回答しました。そもそもyieldがないとかそういうのは、raccyさんのおっしゃる通りです。

投稿2016/11/19 09:21

Lhankor_Mhy

総合スコア36115

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問