PyQオフィシャルブログ

Pythonのオンライン学習プラットフォームPyQのオフィシャルブログです

はじめてのPythonプログラミング:英語が苦手!というあなたへ、日本語で読む「for A in B:」

f:id:nana_yu:20180521143508p:plain

こんにちは!nanaです。 PyQにチャレンジしている方から、こんなお話を聞きました。

  • for vegitable in vegitablesin どっちにどっちを入れるのか分からない!」
  • 「日本語と英語は順序が逆だから混乱する」
  • 「forって『〜のために』じゃないの?」

これについて、現在第一線で活躍しているプログラマーの方からも、 「僕も中一からプログラミングしていたから気持ちわかる」というコメントがありました。

Pythonは「可読性の高い言語」と言われていますが、その成り立ちが英語なので 英語の文法と同じ書き方の場合、説明が省かれてしまっていたりします。 (そういえば、わたしも初めてfor文に触れた時はどっちがどっち?と混乱した記憶があります)

特に前置詞は、英語が苦手な人がつまづいたきっかけだったりすることも多い内容です。 一歩戻って、プログラムに使われている英語を解説しつつ、日本語と図で説明しよう!というのがこの記事の企画です。

この記事の概要

対象者

  • Python初学者で、for文を学んだことがある人(前半でおさらいもしています)
  • 英語が苦手!という人

記事を読むのにかかる時間

  • 約6分

日本語で書いたfor文見せて!という方は、目次からまとめをお読みください。

for文の解説

まずはfor文についてプログラムらしい説明をしましょう。おさらいですね。 PyQ(https://pyq.jp)では、for文についての解説は以下のようになっています。

for文は同じ処理を繰り返し行う場合に利用します。

for文 = 繰り返し はプログラムを学習し始めた時にまず聞くことになる説明だと思います。

for文の例

以下は、for文を利用した、リストを表示するプログラムです。 for文を利用して、リストの要素を前から順に1つずつ表示しています。

入力内容

# 一週間の曜日が入ったリストweekを定義します。
week = ['月', '火', '水', '木', '金']

# リストweekの内容を1つずつ表示します。
for day in week:
    print(day)

実行結果

月
火
水
木
金

ここで、英語の前置詞がわからない問題が出てくる

ここまで、なるほどなるほど…と読み進めるのですが、いざ自分で書こうとすると 「あれ、inの前後ってどっちがどっちだっけ?」と感じる人も出てくるのではないでしょうか。

すこしだけ英語の勉強をしましょう

前置詞は色々な和訳がつくことがあり、英語が苦手な人が特に苦手意識を感じやすいです。 まずは前置詞をイメージで捉えられようになると、前置詞(の名前がついている演算子)を使った処理を思い描きやすくなります。

A in B

「Bの中にAがすっぽりと含まれている」 というイメージが、A in Bの意味あいです。 A in Bのイメージ

Bは、範囲だったり、箱や部屋のようなものだったり、時間だったりしますが、「囲まれているもの」というイメージです。 プログラムでfor文を考える時の日本語は「AがBの中にある」とすると、語順の混乱がなくていいと思います。

なんでAが先にくるの?

「A in B」の代表的な日本語訳は「Bの中にあるA」となり、日本語とは語順が逆になってしまいます。 これが混乱の元になるのですが、どう考えればよいのでしょうか。

このような語順になる場合がほとんどなので、英語は日本語と語順が逆だよ! とパターンで覚えてしまってもいいかとおもいます。

ただ、英語がなぜそういう語順になりやすいかというのは、「言いたいことを、なるべく言いたい順でならべたがる」=「大事なこと(結論、主題など)を先に言いたがる」という性質があるためです。

for文の例でいうと、

  1. 曜日(day)についてあれこれする処理をしたい
  2. = 曜日(day)のことを話したい
  3. => 話したい内容であるdayが先にきて day in week となる

となります。仕組みを理解して覚えるのもいいかもしれませんね。

for x

forは、「〜の為に」や「〜の間」という、全然意味が違う(ように思える)訳がつく前置詞です。

これは、矢印をイメージするとわかりやすいです。

前置詞forのイメージ

for は、 before(前方)が由来の前置詞で、「あるところから前に向かった矢印」というイメージを表します。

forの後にくる語句の位置はそんなに厳密ではなく、「なんとなくその矢印方向にあるもの」ぐらいで捉えておくとよいです。

例題のfor文の場合、「AがBの中にある」という状態のはじまりからおわりまでの矢印の中に含まれているイメージでしょうか。

プログラムのfor文のイメージ

このような場合、日本語は「〜の間」と考えるとわかりやすそうです。

プログラム for day in week: に戻りましょう

例題のプログラム for day in week:は、ここまでの説明から、日本語にすると 「 dayがweekの中にある間 」となりました。だいぶわかりやすくなりましたね。

Pythonのfor A in B:は、AがBの中にある間、以下の処理を行ってねという意味の命令文だとわかります。

値を取ってきたあとの動きは、その下の行で指示をしてあげます。

for day in week:
    #ここより下にdayの値を取ってきたあとの動きを書きます。
    #今回はprintで1つずつ表示させています。
    print(day)

まとめ

今日の内容を日本語で書いてみましょう

f:id:nana_yu:20180521142057p:plain

この図を作っていて、英語圏の人にとっては、こういうメモをそのまま書けば動いてくれるのがPythonなんだなー、と改めて感心してしまいました。 そのような意味で、とてもPythonは可読性が高いのです。

とはいえそれぞれの動きを理解していればPythonは英語圏の人にとってだけ使いやすい言語というわけではありません。

プログラムのコマンドとして、「こういう動きのものだ」と覚えたあとは、やっぱりとても見やすいのがPythonだと思います。

英語が苦手でも、初心者の時に丁寧に理解していくことで、複雑な処理になってきた時にも活かしていけるのではないでしょうか。

PyQブログの更新は、SNSで告知しています。

リリース情報・PythonやIT全般のお役立ち情報なども配信しています。 Python・プログラミング学習の情報に興味のある方は フォローしていただくと、最新情報をいち早く知ることができます。

PyQ公式Twitter

https://twitter.com/pyqjptwitter.com

PyQ公式Facebook

PyQ

Pythonオンライン学習サービスPyQはこちら

pyq.jp

PythonのIndentationError: unexpected indent は何ですか?

f:id:nana_yu:20180502143157p:plain

f:id:nana_yu:20180316121637j:plain
大村 こんにちは、PyQサポートの大村です。今日のPythonお悩み解決は、IndentationError についてです。

インデントに関するエラーですが、Pythonを書き始めて一番目にするエラーの1つではないでしょうか。

質問

  File "1.py", line 4
    print('10です')
    ^
IndentationError: unexpected indent

このエラーの意味を説明して下さい。

元のコードです。

x = 10
if x == 10:
    print('xは、')
     print('10です')

回答

エラーの最後の行を見てみましょう。 IndentationError: unexpected indent と書いてあります。

IndentationError は、正しくないインデントが書かれた場合に発生する構文エラーです。

エラーの意味がわからない場合は Google翻訳 などの翻訳ツールに行ごと貼ってみましょう。

「IndentationError:予期しないインデント」となります。「予期しないインデント」とは、 インデントの位置が期待した状態になっていないという意味です。

今回のエラーが起きた原因はif文の中の処理の3行目の「print('xは、')」と、4行目の「print('10です')」のインデントが揃っていないことです。

if文などのスイーツ(ブロックとも呼ばれる)部分のインデントは揃える必要があります。インデントの空白の数は揃っていれば何個でもいいですが、PEP8 に準拠して半角スペース4つで揃えるようにしましょう。

おわりに

PyQドキュメントにはよく発生するエラーの解説があります。

Pythonのエラー解説 — Pythonオンライン学習サービス PyQドキュメント

また、内容がよくわからない場合は、翻訳ツールで翻訳する、エラー文を検索するなどで答えが発見できる場合があります。

PyQブログの更新は、SNSで告知しています。

その他リリース情報・Pythonお役立ち情報なども配信しています。 Python・プログラミング学習の情報に興味のある方は フォローしていただくと、最新情報をいち早く知ることができます。

PyQ公式Twitter

twitter.com

PyQ公式Facebook

PyQ

Pythonオンライン学習サービスPyQはこちら

pyq.jp

Pythonのお悩み解決!学習サービスに寄せられたQ&Aから人気の記事5選+α

f:id:nana_yu:20180511153607p:plain

f:id:nana_yu:20180404165106j:plain
nana みなさんこんにちは!PyQスタッフnanaです。 GWに合わせてPythonプログラミングQ&Aである「Pythonお悩み解決」を強化配信したところ、大変反響がありました。 そこで本日は、これまでのお悩み解決記事の中からアクセスの多い人気記事を5つご紹介します。 Pythonを学習しているみなさんが解決したい「あるある」な悩みをすっきり解決しちゃいましょう。

01.Pythonの関数(オブジェクト) と オブジェクト.関数() の違いは何ですか?

  • 対象者レベル:★★★☆☆(中級者・他言語学習経験者むけ)
  • ジャンル:Python言語の特徴

blog.pyq.jp

Pythonの学習を進めていたり、他言語からPythonを学んでいる学習者が疑問に思いやすい内容かと思います。 関連するPyCon JP 2017での発表・資料(清水川氏)も合わせて紹介しています。

02.Pythonのif __name__ == "__main__" とは何ですか?への回答

  • 対象者レベル:★★☆☆☆(初心者〜)
  • ジャンル:意外と知らないPythonの基本

blog.pyq.jp

いわゆるプログラミングの「おまじない」と呼ばれる表現の、意味を解説しています。

03.Pythonでのファイル書き込み時の 'w' と 'a' の違いは?

  • 難易度:★★☆☆☆(初心者〜)
  • ジャンル:ファイル操作

blog.pyq.jp

ファイル操作のパラメータの違いについてです。 どちらのパラメータでもエラーが出ない時もある場合、違いについて理解しないまま学習が進んでしまうこともあります。 こちらの疑問も、そういう場合がよくある内容なので、まだピンと来なくても読んで置くと ファイル操作を学んだ時に思い出せるかもしれませんね。

04.osモジュールの使用例

  • 難易度:★★☆☆☆(初心者〜)
  • ジャンル:ローカル環境/覚えておくと便利

blog.pyq.jp

自分のPC内でのファイル操作のモジュールの解説です。 こちらのQ&Aはブラウザのみで環境が完成しているPyQのユーザーさんから送られてくるものなので、 ローカルでの処理は良さを実感しづらい面もあります。

同じく最初に触れないローカルでの環境構築については下記の記事でも紹介しています。

blog.pyq.jp

05.PythonのTypeError: list indices must be integers or slices, not strは何ですか?

  • 難易度:★☆☆☆☆(初心者向け)
  • ジャンル:エラーメッセージ

blog.pyq.jp

エラー文の解説記事です。英語で表示されるエラー文は学習を始めたばかりだと慣れない言葉も多いもの。 このような回答でエラー文の意味を蓄積していくと、修正も早くなってくると思います。

PyQの問題でのエラーメッセージ

余談ですが、こちらの質問をしたユーザーさんが取り組んでいるPyQの問題では、判定時出力されるエラー文にあえて解説をつけていません。 Pythonの開発環境をそのまま使えるエディタで学習をすすめるという理由もありますが、 実務ではエラー文を読み取り解決する能力がとても重視されるからです。

実際にプログラムを作っていく上では、エラーをスキップすることはできません。 たとえその段階でプログラムの理解ができない箇所があっても、模範のプログラミングを必要に合わせた変数などに変更して写せることもプログラマーの能力の一つです。 仕様書通りに機能を実装していく為の、実務的な能力ですね。

そういうことを意識して学習していると、プログラムが動かずもどかしいことがあっても、それを解決していく一つ一つのステップに自分のプログラミング力の成長を実感できるのではないでしょうか。

番外:たとえその段階でプログラムの理解ができない箇所があってもいいんです。学習曲線の話

先ほど、

たとえその段階でプログラムの理解ができない箇所があっても、模範のプログラミングを必要に合わせた変数などに変更して写せることもプログラマーの能力の一つです。

と言いましたが、そうなんです。学んだプログラムをすぐに理解できなくても、向いてないのではないかと落ち込むことはないんです。 これについては下記の記事をぜひ読んでみてくださいね。

blog.pyq.jp

番外2:Pythonだけじゃ無い!ITエンジニアを目指すなら覚えておきたいMarkdown記法

また、直接Pythonの記事ではありませんが、下記の記事もたくさんのブックマークがついています。 Markdownはプログラマーがチーム開発進める上でのコミュニケーションを円滑にするのに役立つ記法です。

blog.pyq.jp

まとめ

いかがでしたでしょうか。 今回は人気のPythonお悩み解決記事をご紹介しました。 みなさんの「実は知らなかったこと」や「疑問に思っていたこと」の解決に繋がる情報があったら嬉しいです。

PyQブログの更新は、SNSで告知しています。

PyQ(パイキュー)は、ブラウザのみで初心者から実務レベルまで、プログラム言語Pythonのプログラミング学習ができるオンラインサービスです。

Pythonのお悩みを解決するコラムのほか、 PyQリリース情報・Pythonお役立ち情報なども配信しています。 Python・プログラミング学習の情報に興味のある方は フォローしていただくと、最新情報をいち早く知ることができます。

PyQ公式Twitter

twitter.com

PyQ公式Facebook

PyQ

ブラウザのみでPythonを学習できるオンラインサービス「PyQ」はこちら

pyq.jp

正規表現「[^、]*、([^、]*)、(\d+)円$」の意味と、正規表現の中のカッコ:メソッド `group `の解説

f:id:nana_yu:20180502143157p:plain

f:id:nana_yu:20180316121637j:plain
大村こんにちは、PyQサポートの大村です。今日のPythonお悩み解決は、正規表現 についてです。

pyq.jp

Pythonお悩み解決とは?

オンライン学習サービス「PyQ」のサービスの一つ、学習サポートに寄せられた質問の中から PyQユーザーだけでなく、学習者みなさんに役立つプログラミング言語Python一般に関する質問を選んでご紹介し、解説するコーナーです。

プログラミング学習者の目線から見たつまづきを解決していくよう、現役プログラマーのサポートチームがお答えします。

質問内容

PyQには「正規表現」を学ぶ課題があります。

pyq.jp

こちらの問題に関するご質問をいただきました。

re.matchの中に、'[^、]*、([^、]*)、(\d+)円$' とありますが、この意味は何でしょうか? また2つ目の [^、]* が括弧で囲まれている理由は何でしょうか?

問題の模範回答(一部抜粋)

import re
(略)

m = re.match('[^、]*、([^、]*)、(\d+)円$', shop)
if m:
    item_name = m.group(1)
    item_price = m.group(2)
    if int(item_price) >= 2800:
        print('{} {}円'.format(item_name, item_price))

問題文の正規表現の意味

模範回答では、変数shopに代入されている文字列が正規表現 '[^、]*、([^、]*)、(\d+)円$' とマッチするか判定しています。 この正規表現の意味を一つずつ解説していきます。

1. 「[^、]*、」の正規表現の意味

[^、]*、

この部分は 以外の0文字以上の文字と文字 を表します

「[^、]*、」 に出てくる正規表現の記号の解説

  • []:「集合」を表します。[^]とすると、あとに続く条件の補集合を取り「集合に含まれない」という意味になります。
    • [^、]:上記から、「 以外の文字」という意味になります。
  • *: 前の条件を受けて、「0文字以上の文字」を表します。
  • $ :「文字列の最後」という意味です。なので、円$は、文字列の最後の直前が文字 という意味です。

2. 「 ([^、]*)、」の正規表現の意味

([^、]*)、

この部分も 以外の0文字以上の文字と文字 を表します。1と違ってカッコで括られている意味は、下で解説します。

3. 「(\d+)円$」の正規表現の意味

(\d+)円$

この部分は 1桁以上の数値 で終了するということをを表します

「(\d+)円$」 に出てくる正規表現の記号の解説

  • \d:「0〜9までのどれかの数値」を表しますので、言い換えると 1桁の数値 という意味です。
  • +: 前の条件を受けて、「1文字以上の文字」を表します。
  • $ :「文字列の最後」という意味です。なので、円$は、文字列の最後の直前が文字 という意味です。

正規表現の中のカッコ("()")の意味

正規表現中で () で囲んだ部分はメソッド group で取り出せます。

  • m.group(0)は、マッチした全体の文字列
  • m.group(1)は、1つ目のカッコの部分
  • m.group(2)は、2つ目のカッコの部分

模範解答10行目のfor文の1番目の文字列 駅弁高松堂、米澤豚一番育ち豚どん、950円 を例に解説します。

  • m.group(0)は、全体の文字 → 駅弁高松堂、米澤豚一番育ち豚どん、950円
  • m.group(1)は、1つ目のカッコの部分 → 米澤豚一番育ち豚どん
  • m.group(2)は、2つ目のカッコの部分 → 950

m.group(0)が'阿部亭'(一番目の要素のみ)ではなく、'阿部亭、かしわ弁当、780円'となるのは何故でしょうか?

groupメソッドの決まりで、 0 の場合は、マッチした文字列全体と決まっています。

正規表現をもっと詳しく

更に詳しくは、公式ドキュメントを参照ください

re — 正規表現操作

6.2. re --- 正規表現操作 — Python 3.6.5 ドキュメント

PyQブログの更新は、SNSで告知しています。

その他リリース情報・Pythonお役立ち情報なども配信しています。 Python・プログラミング学習の情報に興味のある方は フォローしていただくと、最新情報をいち早く知ることができます。

PyQ公式Twitter

twitter.com

PyQ公式Facebook

www.facebook.com

ブラウザのみでPythonを学習できるオンラインサービス「PyQ」はこちら

pyq.jp

PyQの学習機能を振り返り。復習しやすくする機能や学習カレンダー、学習サポートについて説明します。

f:id:nana_yu:20180502164442p:plain

f:id:nana_yu:20180404165106j:plain
nana みなさんこんにちは!PyQスタッフnanaです。 今日は休暇に集中して学習している方や、新年度やGWに合わせて新しくPyQを始めた方に向けて PyQの学習に役立つ機能をまとめてご紹介していきます。

復習を楽にしたい時に役立つ機能

過去のまとめ記事

ユーザーさんのご意見で、一度やった問題を見直して理解度を高めたいという要望をたくさんいただきます。 復習については、現在PyQに実装されている復習に関連する機能を紹介した記事を以前書きましたので、 参考にしてみてください。

blog.pyq.jp

PyQを始めたばかりの人におすすめしたい「理解度」の星をつける習慣づけ

個人的に1ユーザーとしてPyQで学習した感想として、特にPyQでの学習をはじめたばかりの方におすすめしたいと感じたのは クエストが終わるごとに理解度の設定をしておくことです。

学習初期はその便利さに気づきづらいのですが、逐次理解度を記録しておけば、 「自信のない問題だけを見直したい」という時に理解度で検索をかけることができます。

blog.pyq.jp

クリアした問題の値などを変えて試してみたい時は?

クリアした問題をもういちどやりたい時は、 上で紹介した記事のリセット機能を使えば、一度クリアした問題をリセットすることができます。

ただ、単純に問題をやりなおしたいという以外にも、変数の内容を変えたり、プログラムを少し変更したりして 理解を深めたいということもあると思います。

PyQのクエストの入力画面(画面の右側です)は、実はPythonの環境が整ったオンラインエディタです。

f:id:nana_yu:20180502164827p:plain
チュートリアルのエディタです。"Hello World"を出力する問題です。

通常、上の画像のように判定ボタンを押すと、問題の意図とあった記述ができているかが判定されます。 ここで、printの内容を変更してみましょう。

f:id:nana_yu:20180502165041p:plain
内容を変更して実行を押した画面です。エラーなどは出ていませんね。

内容を変更して実行を押してみると、Pythonの文法的に正しいプログラムであれば、 問題で問われている内容と異なっていても、書いた通りに動作します。

出題されたプログラムの変数や値を変えて色々試してみると、 より深く理解することができるかもしれません。コードを改変して実装する能力は、初期に業務でコードを書く際にも活用できます。 演習問題など、判定でOKが出たものの理解できたか不安な問題などでぜひ試してみてください。

学習時間を記録したい時に役立つ機能

自分がどのくらい学習できたのか?は計画を立てたりモチベーションを保つ為には大切ですよね。 ログインしたら、少し画面をスクロールしてみてください。下の図のようなグラフを見ることができます。

学習時間と解いたクエスト数のグラフ
学習時間と解いたクエスト数のグラフです

上のカレンダーの緑の色の濃さで、どのぐらいの密度で、どのくらい継続して学習できたかがわかります。 (色の付いている日付が学習した日、濃い緑になるほど長い時間学習しています)

自動で記録されていくので、振り返りなどにも役立ちます。 学習カレンダーについての詳しい内容は、下記の記事で見ることができます。 blog.pyq.jp

わからない問題について質問したい時

スタンダードプラン でPyQを始めた方、質問回答機能を使った学習サポートを使いこなせていますか?

学習サポートの特徴

  • 専用の機能を使ってメーラーなどを起動することなく質問することができます(質問機能の使い方は下で案内いたします)
  • 現役プログラマーに質問することができます
  • 1営業日につき1つの質問にお答えします。(質問自体はいくつ投稿してもOKです。順次回答されていきます)

ゴールデンウィーク中の質問の回答時期について

5月3日〜5月6日に投稿された質問の回答は、5月7日以降に順次行われます。ご了承くださいませ。

平日になかなか学習時間が取れない方は、休日に質問を投稿し、平日の隙間時間に回答を読んで疑問を解決していくという学習方法も プログラミングに触れる機会を増やせておすすめです。

質問回答機能の特徴

質問回答機能については下記の記事をご覧ください。 問題でわからない場合は、問題内のプログラムの現在の状態をそのまま共有することができたり、 プログラムの引用を手軽にできるなど、質問の手間を減らすことで疑問解決をスムーズにする機能です。 スタンダードプランで受講されている方はぜひ使いこなしてくださいね。

blog.pyq.jp

PyQのプランの詳細

ここまでの内容を読んで、スタンダードプランに興味を持った方がいらっしゃるかもしれませんね。 いらっしゃれば嬉しいです。(質問回答機能は本当に使いやすいのでおすすめなのです)

PyQのプランの詳細はPyQのプラン詳細をご覧ください。 例えばライトプランからスタンダードプランに変更した場合、一度ライトプランの残り日数分が日割りで返金され、その日からスタンダードプランの料金体制に変更されます。 もし再びライトプランに戻した場合も、スタンダードプランの料金が日割り返金されるので、お試しもしやすいと思います。

pyq.jp

まとめ

いかがでしたでしょうか。 PyQの機能を活用して、みなさんがより効率的にプログラミング学習がすすめられると嬉しいです。

PyQブログの更新は、SNSで告知しています。

Pythonのお悩みを解決するコラムのほか、 PyQリリース情報・Pythonお役立ち情報なども配信しています。 Python・プログラミング学習の情報に興味のある方は フォローしていただくと、最新情報をいち早く知ることができます。

PyQ公式Twitter

twitter.com

PyQ公式Facebook

PyQ

ブラウザのみでPythonを学習できるオンラインサービス「PyQ」はこちら

pyq.jp

Copyright ©2017-2018 BeProud Inc. All rights reserved.