PyQオフィシャルブログ

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

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

Pythonのコードの中の半角スペースは必要ですか?:コーディング規約「PEP8」について

f:id:nana_yu:20180502143157p:plain

f:id:nana_yu:20180316121637j:plain
大村こんにちは、PyQサポートの大村です。今日のPythonお悩み解決は、『半角スペースは必要ですか?』という質問に答えていきます。

pyq.jp

Pythonお悩み解決とは?

オンライン学習サービス「PyQ」のサービスの一つ、学習サポートに寄せられた質問の中から プログラミング言語Python一般に関する面白い質問をご紹介し、解説するコーナーです。

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

質問内容「半角スペースは必要ですか?」

PyQ では、各課題に 模範回答 を表示しています。その模範回答のコードに書いてある 半角スペース は必要なのかとご質問を受けました。

半角スペースは無くても実行、判定に問題はありません。 例えば、下記の2行はどちらでもプログラムとしては問題なく動きます。

health_result['名前'] = '佐藤'  # 半角スペースあり
health_result['名前']='佐藤'  # 半角スペースなし

なぜ、半角スペースがはいっているかというと、PyQはPEP8(ペップエイト)というPythonのコードスタイルに準拠し模範回答を作成しています。Pythonを書く人はみんなでなるべく同じように書いて、プログラムを読みやすくしましょうという コーディング規約 と呼ばれるものです。

この決まりでは例えば「=」や「+」の前後に半角スペースを入れましょうと決まっています。

PEP8

一般にコーディング規約は、会社、プロジェクトにより個別に規定されます。しかし、Pythonでは共通のコーディング規約がPEP8(ペップエイト)として定められています。PEP8をコーディング規約として利用することで世界中のPythonプログラマーと共通のコーディング規約を利用していることになります。以下にPEP8で規定されていることの一部を抜粋します。

  • コードのレイアウト
  • インデント
  • 1行の長さ
  • import
  • 式や文中の空白文字

より詳細な内容に関しては下記URLを参照してください。

PEP 8

更に詳しく学びたい方は、PyQのクエスト「実務でのPython」のFlake8 を実施ください。

PEP8はPythonをチームで利用する場合、知っていたほうが良い知識ですので、学習をおすすめしております。

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

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

PyQ公式Twitter

twitter.com

PyQ公式Facebook

PyQ

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

pyq.jp

Copyright ©2017 BeProud Inc. All rights reserved.