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

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

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

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

Q&A

解決済

3回答

1399閲覧

ジェネレータ式について

Casablanca_mtg

総合スコア209

Python 2.7

Python 2.7は2.xシリーズでは最後のメジャーバージョンです。Python3.1にある機能の多くが含まれています。

0グッド

0クリップ

投稿2016/11/29 07:43

お世話になります。
Python2.7.12チュートリアル:http://docs.python.jp/2.7/tutorial/classes.html
クラスの部分を勉強しています。その中の9.11部分ですが

from math import pi, sin
sine_table = dict((x, sin(x*pi/180)) for x in range(0, 91))

unique_words = set(word for line in page for word in line.split())

valedictorian = max((student.gpa, student.name) for student in graduates)

unique_words = set(word for line in page for word in line.split())
valedictorian = max((student.gpa, student.name) for student in graduates)この2つのコードで’page'と’graduates’のnameErrorが出ます
この場合のErrorを出さなくするには事前にどうすればよいのでしょうか?
ご教授ください。。よろしくお願いいたします

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

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

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

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

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

guest

回答3

0

ベストアンサー

チュートリアルでこれまで学んだことから、pagegraduatesにどんなものが入っていればいいか、ある程度想像ができるはずです。

1

python

1unique_words = set(word for line in page for word in line.split()) 2

lineの値はsplit()というメソッドを持つオブジェクトです。名前からして、split()lineの内容を「分けた」ものをリストとして返すのでしょう。このリストの各要素がジェネレータの返す値となります。そこで、lineの値が空白で区切られた単語の列であると考えてみると、つじつまがあいます (チュートリアル以外のドキュメントも見て、split()という名前のメソッドを持つ標準クラスを探してみましょう)。

一方、pagelineが順番に入っているリストでしょう。

2

lang

1valedictorian = max((student.gpa, student.name) for student in graduates) 2

studentは、gpanameという属性を持つクラスのインスタンスのようです。クラスの定義のしかたはもう知っていますね。クラスを定義できれば、graduatesは上の1と同じようなやりかたでできます。

また、max()が何をするものなのかを他のドキュメントで調べてみると、上の式が何を表すのかわかってくるでしょう。


ちなみに、for … inの後にくるpagegraduatesの値はリスト以外のものにすることもできます。他にどんなものにできるか、チュートリアルや他のドキュメントで調べてみるといいです (他に3種類くらいあるかな。これはすぐにわからなくても構いません)。

投稿2016/11/29 13:47

編集2016/11/29 13:59
ikedas

総合スコア4335

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

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

Casablanca_mtg

2016/11/30 00:04

わかりやすいご説明ありがとうございます。このように順序立てて説明していただくと初心者には理解しやすいと思います。後は英単語の意味を理解しないとだめですね。
guest

0

そこに書かれているのは、ジェネレータ式の使い方を説明するための"例文"です。
手元で実行できなくても書いてある内容が理解できればそれで良いと思います。
外国語の学習などで新しい文法を習う時などに登場する例文と同じように捉えてください。

ただし、例文の文脈は変数名などをもとに脳内補完する必要があります。
英語に慣れない人にはちょっと辛いですが。
まずは変数名に使われている英単語の意味を調べて、何をやっているコードなのかを想像してみましょう。

投稿2016/11/29 08:47

lefb766

総合スコア66

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

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

Casablanca_mtg

2016/11/30 00:04

ありがとうございます。 例文の文脈は変数名などをもとに脳内補完する必要があります。 英語に慣れない人にはちょっと辛いですが。 →おっしゃる通りですねこのチュートリアルではWordの言い回しに振り回され感がありそれに加えて慣れない英単語が絡んでくるという部分が余計に理解するのに時間がかかってしまっています。まだまだですが頑張りたいと思います。
guest

0

2つのコードで’page'と’graduates’のnameErrorが出ます

引用されたソースコードは、それ単体では正常動作しないコード片です。NameError例外の説明にname 'page' is not definedのように付加情報が出力されていると思います。エラーメッセージが示す通り、それぞれpage, graduatesという変数が定義されていなければ、このコード片は動作しません。

Python

1# 入力の例 2page = ["hello world", "hello python", "learn more python"] 3 4# 出力 5set(['python', 'world', 'more', 'hello', 'learn'])

Python

1# 入力の例 2class Student: 3 def __init__(self, name, gpa): 4 self.name = name 5 self.gpa = gpa 6 7graduates = [ Student("Alice", 3.0), Student("Bob", 4.0), Student("Charlie", 3.5) ] 8 9# 出力 10(4.0, 'Bob')

投稿2016/11/29 08:40

yohhoy

総合スコア6191

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

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

Casablanca_mtg

2016/11/30 00:04

ありがとうございます。このように例題を出してご説明いただくと非常にわかりやすいです。 変数が定義されていなければ、このコード片は動作しません→事前に変数定義がされていないといけないのは何となくわかりましたが定義するやり方がいまいちはっきりと理解できていませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問