初心者による、挫折しないPythonのはじめ方(おすすめの本)


自分が実際に読んで勉強した本について、初心者にとって良かった点、注意点などを書きました。  

対象としては、コマンドプロンプト(ターミナル)画面がでるとちょっとたじろくレベルの方を想定しています。

他にもよい入門書はたくさんあると思いますが、あくまで私が読んだものについてだけですのでご了承ください。


またさまざまなオンライン学習サイトやYoutubeなど有料無料さまざまなWeb学習もあります。本で勉強するかWebで勉強するかは各人のやりやすいほうでよいと思いますが、どちらか一方というのではなく補う形で使うのがベストでしょう。


なんとか挫折せずに初歩のところをマスターしたい人の参考になれば幸いです。

(ちなみに画像がつけたかったので楽天のリンクを貼っていますがアフィリエイトはしていません(できていません(泣))) 

① 独学プログラマー


  • 言わずと知れた超有名本。初心者だけでなく中級者にもおすすめの本としてよくあがっています。また装丁もカッコイイ!私がPythonをはじめようと思ったのはこの本と出会ってからです。
  • 第1部(第1章から11章)でpythonの基本的な内容についてコンパクトに書かれています。これだけで簡単なコードが書けるようになるとおもいます。
  • うれしいのは各章の終わりに練習問題と用語集があることです。プログラムは読んだり書き写すだけでなく自分で実際にコードを組んでみるのが大事なので練習問題があるのはgoodです。
  • 半面、第2部以降はまったくの初心者には少し難しい印象があります。ここではオブジェクト指向プログラミング、クラス、Bash(コマンドライン)、正規表現、GitHubでのバージョン管理といったことが簡潔に書かれています。それぞれが本1冊で書かれていたりする内容ですのでこの本だけでマスターするのは難しいと思いますが、知るべきことを大まかに把握するにはよいと思います。どれもあとあと重要となってくる事柄であり、こうしたことが書かれているのが中級者にも勧められている理由でしょう。

② Python1年生

  • 挫折しないという意味でイチオシの本です。
  • ヤギ博士とフタバちゃんの対話とイラスト多めでとってもとっつきやすいです。
  • Pythonの基本的なプログラムの書き方について本当に丁寧に書かれています。また独学プログラマーでさらっと書かれていることも図やイラストを使ってわかりやすく説明されています。
  • 前半(第1章から第3章まで)で、文字列、変数、リスト、if文、for文、関数の作成、モジュールの作成までわかりやすい説明があります。
  • 後半(第4章以降)はいろいろなパッケージを使いながら簡単な人工知能アプリ(手書き文字の認識)を作っていきます。
  • 第3章までは一つ一つの内容について順を追って説明されているのに比べて、後半では新しいパッケージの関数がずらずら出てきて、はじめは面くらいました。しかし簡単なAIにしろWebアプリケーションを作るにしろ、何かしたいものがあればひとまず書き写し(写経?)でプログラムを作ってみてそこから逆算して関数やコードを勉強する、というのもモチベーションを保つために大事なんだと後から考え、それをこの本から学ばせてもらったように思います。
  • 注意点。かなり内容がしぼってあるのでタプル、辞書といった内容は含まれていません。この本をやり通せば初心者としてひとまず基礎ができると思いますのでもう少し進んだ本に行けると思います。

 

  ③ いちばんやさしいPythonの教本


  • Pythonの基本を学びつつ、会話botを作っていき、最終的にはこれを使って簡単なWebアプリケーションを作成することになります。
  • Pythonの基本的な事項の説明は非常に丁寧、加えて辞書、タプルといった項目も十分なページを割いて説明されています。
  • 作業する内容(プロジェクト)ごとの仮想環境の構築方法も解説されています。
  • またエディタを使ってコードを書いていく→Pythonで実行という本格的なスタイルも学べます。
  • 注意点。導入がいきなりエディタ(Atom)のインストールから始まっており少し難しいかなという印象。全くの初心者ではちょっと戸惑うかも。
  • 個人的にはIDLE、あるいは使えるならJupiter notebookでこの本で勉強して、慣れたところでAtomなりVS codeなりのエディタを使うのでよいのでは、と思います。

 

④ みんなのPython

[商品価格に関しましては、リンクが作成された時点と現時点で情報が変更されている場合がございます。]
みんなのPython 第4版 [ 柴田 淳 ]
価格:2970円(税込、送料無料) (2020/6/20時点)

  • 超有名本でPythonのバイブルに挙げられることも多いです。
  • 上に挙げた3冊が200300ページくらいなのにくらべてこの本は500ページもあり、これ1冊でPythonの基礎から中級くらいの内容がすべて詰まっています 
  • for文、if文、各種コンテナ(リスト、タプル、辞書、セット)はもちろん、クラス、オブジェクト指向プログラミング、リスト内包表記、ラムダ式、ジェネレータ、デコレータなど初級をこえた内容もかなり詳しく載っています(正直私はまだ十分理解できていないところも多いです)。
  • 後半には比較的よく使う標準ライブラリ、Jumpyの解説もあり、最後には簡単に機械学習の実行もできるようになっていてまさに至れり尽くせり。
    注意点。まったくプログラミングをしたことがない人にはちょっととっつきにくいかも。少し試し読みをしてみて自分にはちょっと難しいなと思ったら上に挙げたどれかで入門してからこの本で勉強するのがおすすめです。



以上から、お勧めの流れですが、

まったくの初心者で絶対挫折したくない人
Python
1年生いちばんやさしいPythonの教本独学プログラマー and/or みんなのPython

Python
の導入はできるよという人
いちばんやさしいPythonの教本 独学プログラマー and/or みんなのPython

ちょっと硬めの内容でも平気な人
独学プログラマー みんなのPython またはみんなのPython1冊

独学プログラマーに載っていてみんなのPythonにないのはGitHub。内容のことだけからいえば何か別の本などでGitHubを勉強すればみんなのPythonだけあればいいのかもしれません。しかし独学プログラマーは第1章など、必ず独学で勉強できるよ!と熱く書かれていて折にふれて励まされる本であり、買っただけの価値は絶対あると思います。



ここまで読んでくださった方、本当にありがとうございました。
学習の成功を心からお祈りしています。




古いノートパソコンにLubuntuをインストール



すでにサポートのきれた古いノートパソコンにLubuntuをインストールしました。
(後半に実際作業した流れを書いています)

LubuntuはUbuntuから派生したディストリビューションで、UbuntuとLXDE(18.10以降はLXQtらしい)を合わせたもの。
 Windowsと比較してマシンスペックが下がっていても動くUbuntuよりもさらに軽量で少ないリソースで動作するとされています(128 MB RAM のメモリの Pentium II または Celeronでも動作確認ありの記載! とはいえ512MBはあったほうがよいようです )

UbuntuでなくLubuntuにしたのはかなり以前のパソコンでスペックが非力であったのと、Ubuntuのデスクトップ画面に若干抵抗があったからです。

ちなみにLubuntu(Ubuntu+LXDE) はUbuntuの後にLXDEをインストールでもいけますが、最初からLubuntuにすると決めていたので直接Lubuntuをインストールしました。

Lubuntuをインストールしたのは10年くらい前に購入したSonyのVAIO、CPUはCore 2 Duo、メモリは2GB、ハードディスク80GB、はじめに入っていたOSはWindows VistaでWindows 7にアップグレードしていました。

まずは最新のLubuntu 18.04のインストールをトライしましたが、何度やっても途中でインストールが止まってしまう… 
このパソコンのスペックでは最新バージョンは無理なのかも、と思いひとつまえの16.04を試したところ…成功しました!
そこで以下は16.04でのインストールの流れです。
(基本的には18でもやり方は同じです。最新バージョンでいける方はそちらで。 

※別のOSをインストールしたところで元のサポートは受けられなくなるのでご注意を(私のは10年前のものでとうにサポートは切れていました)。

※ 以下の操作はすんなりいけばインストールするパソコン1台でもできると思いますが途中でいろいろ調べたり私のように別のバージョンのダウンロードが必要になることもあり別にもう1台パソコンがあったほうが安心です。


【作業の流れ】
注意! あくまで私のパソコンでのことであり、別の個々のパソコンでうまくいくと保証するものではありません。また当然もとのWindowsのソフトやデータは消えますのであらかじめ退避を。)

1. Lubuntu 16.04のダウンロード
まずLubuntu 16.04のダウンロード、ちなみにマシンスペックを考えて32-bit版にしました。
Download Version 16.04.3 LTS からlubuntu-16.04.3-desktop-i386.isoをダウンロード。


2.インストール用のUSBメモリ (ライブUSBメモリ)の作成
次にUSBから起動できるインストール用のUSBメモリ(ライブUSBメモリ)を作成、参考にしたサイトはこちら。

Linuxをインストールできる「ライブUSBメモリ」をWindowsで作成する方法【スクリーンショットつき解説】

Rufusをダウンロード。
中身が消えてもいいUSBメモリを差し込んでrufus-3.8.exeでRufusを起動し、lubuntu-16.04.3-desktop-i386.isoをUSBメモリに書き込んでライブUSBメモリの完成!


3.ライブUSBメモリからの起動
 次にインストールするパソコンがUSBから起動できるようにする。ライブUSBメモリを差し込んで起動でUSB起動しない場合(そのほうが多いと思う)は、BIOSの設定で起動(ブート)の順番を変えることになります。

BIOSの起動はパソコンによって違いますが 、私のは電源ON、ロゴが出たところでF2キー押しでした。BIOS画面が出たところで矢印キーでBootを選択、usbを1番目に変えてF10でsave and exit、いったん電源を切ります。

ライブUSBメモリを差し込んでから起動(私のパソコンはロゴが出たところでF11キーを押す)するとUSBから起動しました。

4.以下画面で選択していく
  • 日本語を選択
  • Install Lubuntuをクリック
  • ようこそで日本語を選択
  •  アップデートとその他のソフトウェアでは「通常のインストール」を選択、その他のオプションをチェック 
  • インストールの種類 前のOSを削除でインストールの場合、「ディスクを削除してUbuntuをインストール」を選択
  • 住んでいるところ Tokyo 
  • キーボードレイアウトで日本語を選択
  • あなたの情報を入力 名前、コンピュータの名前、ユーザー名、パスワードを入力
⇒ インストールが開始
 もちろんPythonをインストールして使えました!


参考サイト
Lubuntu 14.04 LTSのインストール
インストール

Ubuntu 18.04 LTSインストールガイド【スクリーンショットつき解説】

Lubuntu  Ubuntu wikiより

画像処理 オーバーフロー

画像処理
uint8は256(0から255)だがこの範囲をこえるとオバーフローとなる

例)

import numpy as np

num0 = np.uint8(0)
print(num0)

num255 = np.uint8(255)
print(num255)

num256 = np.uint8(256)
print(num256)

num257 = np.uint8(257)
print(num257)

num_minus1 = np.uint8(-1)
print(num_minus1)

num_minus2 = np.uint8(-2)
print(num_minus2)

⇒結果
0
255
0
1
255
254

255をこえて256は1周まわって0になる(257はその次の1)
-1は逆に1周まわって255になる(-2はその次の2)
エラーが返ってこないのでむしろ注意。

標準入力で複数行(文字列)を読み込む方法について(続き)

標準入力で複数行(文字列)をリストに格納する方法についての続き。

readでは読み込んだ文字列を変数に代入した後にsplitで分けてリストを作っている。
readlineとinputは1行ずつ読み込む方法なのでforループを使ってリストに格納していく。
readlinesはリストに読み込むが改行を含んでいるためforループで改行を取り除いて再度リストに格納する。
いずれも複数行でコードを書く必要がある。

しかし、内包表記を使用すれば1行でコードを書くことができる。

同じく、

abcdef
ghijkl
mnopqr
stuvwxyz

について、

①inputの場合、

array_d2 = [input() for i in range(4)]

として、
print(array_d2)で表示すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、リストに格納されていることが分かる。

②同じくreadlineについても

array_b2 =  [sys.stdin.readline().rstrip() for i in range(4)]

とするとリストに格納される。

ただしinputとreadlineは元の文字列の行数が分かっている必要がある。

③readlinesを使えば元の文字列の行数が分からなくてもリストに格納できる。

array_c2 = [line.rstrip() for line in sys.stdin.readlines()]

として、
print(array_c2)で表示すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、きちんとリストに格納されている。

まとめ:
リスト名 =  [line.rstrip() for line in sys.stdin.readlines()]
で複数行の文字列をリストに格納することができる。

行数が分かっていれば、
リスト名 = [input() for i in range(行数)]
でもリストに入れることができる。
 ([sys.stdin.readline().rstrip() for i in range(行数)]でも同じ)

標準入力で複数行(文字列)を読み込む方法について

各種方法で標準入力で複数行(文字列)を読み込んでリストへの格納を行ってみた。

入力の関数、メソッドとしては
read、readline、readlines、input
を使用する。
(read、readline、readlinesではsys.stdinを使う。はじめにsysをimportしておく)

例:
abcdef
ghijkl
mnopqr
stuvwxyz


①read
readは複数行の文字列を改行を含めそのまま読み込む。

a = sys.stdin.read()
で読み込んで、
print(a)
で出力するとそのまま

abcdef
ghijkl
mnopqr
stuvwxyz

と表示される。
print(type(a))でデータの型を確認すると、
<class 'str'>となり、str(文字列型)であることが分かる。

これをリストに入れるには改行でsplitする。

(上記a = sys.stdin.read()で読み込んだ後で)
array_a = a.split("\n")

これを、
print(array_a)
で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
となり、めでたくリストに格納される。

②readline
readlineは1行ずつ読み込む。また改行もいっしょに読み込む。

b = sys.stdin.readline().rstrip()
で読み込んで、
print(b)
で出力すると、

abcdef

はじめの1行のみが読み込まれて表示される(改行でもう1行(空白が)表示される)。
print(type(b))で型を確認すると、やはりstrである。

複数行をリストに入れるには、forループを使う。またrstripで改行を取り除く。

array_b = []
for i in range(4):
     array_b.append(sys.stdin.readline().rstrip())

print(array_b)で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、リストに格納されていることが分かる。


③readlines
readlineは複数行を読み込んでリストに格納する。ただし改行もいっしょに読み込まれる。

c = sys.stdin.readlines()
で読み込んで、
print(c)
で出力すると

['abcdef\n', 'ghijkl\n', 'mnopqr\n', 'stuvwxyz']
と表示され、
print(type(c))で型を調べると、list(リスト型)と表示される。

そこで、forループでrstripを使って改行を取り除く。

array_c = []

for line in sys.stdin.readlines():
    array_c.append(line.rstrip())

print(array_c)で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、改行が取り除かれてリストに格納されていることが分かる。


④input
iputは1行読み込む。readlineと違い改行は自動的に取り除かれる。

d = input()

で読み込んで、
print(d)
で出力すると、

abcdef
と1行のみ読み込まれている(改行は取り除かれる)。型はstrである。

複数行を読み込むにはforループを使う。readlineと違いrstripで改行と取り除く必要はない。

array_d = []
for i in range(4):
    array_d.append(input())

print(array_d)で出力すると、
['abcdef', 'ghijkl', 'mnopqr', 'stuvwxyz']
と、リストに格納されて表示される。

NumPy配列について③ 2つの配列の結合、hstack、vstack、concatenate

 2つの配列の結合
(すべてはじめにimport numpy as np)

例:2つの2次元配列を使用。
array1 = np.array([[1, 2, 3], [4, 5, 6]])
array2 = np.array([[7, 8, 9], [10, 11, 12]])


①hstackで行方向の結合を行う

array_12a = np.hstack((array1, array2))

出力すると
print(array_12a)
結果:
[[ 1  2  3  7  8  9]
 [ 4  5  6 10 11 12]]

2×6の配列となる

②concatenateでaxis = 1とすると同じく行方向に結合する

array_12b = np.concatenate([array1, array2], axis = 1)


③vstackで列方向の結合を行う

array_12c = np.vstack((array1, array2))

出力すると
print(array_12c)
結果:
[[ 1  2  3]
 [ 4  5  6]
 [ 7  8  9]
 [10 11 12]]

4×3の配列となる

④concatenateでaxis = 0とすると同じく列方向に結合する

array_12d = np.concatenate([array1, array2], axis = 0)
array_12d = np.concatenate([array1, array2], axis = 0)

NumPy配列について② 2つの1次元配列から2次元配列を作る

2つの1次元配列から2次元配列を作る方法について。
(もちろんすべて初めに import numpy as npでnumpyをインポート)

(1)2つの(1次元)リストから作る場合

①2つの(1次元)リスト
list1 = [1,2,3,4]
list2 = [5,6,7,8]

②2つの(1次元)リストから多重リストを作る
list3 = [list1, list2]
(間違って list1 + list2とすると[1, 2, 3, 4, 5, 6, 7, 8]という1次元配列になっていまう)

③リストの配列を渡してnumpyのarrayを作成する
array_from_list = np.array(list3)

④出力すると
print(array_from_list)

結果:
[[1 2 3 4]
 [5 6 7 8]]


(2)2つの1次元Numpyのarrayから作る場合

① 2つの1次元array
array1 = np.array([1,2,3,4])
array2 = np.array([5,6,7,8])

②stackを使って新しい次元のarrayを作成する
array_from_array = np.stack((array1, array2))

③出力すると
print(array_from_array)

結果:
[[1 2 3 4]
 [5 6 7 8]]


※初心者から見た注意点。stackのあとのカッコを2重にするを忘れない。




NumPy配列について① 基本的な復習

① Numpyの配列はリストと見た目は似ているが別もの。

(以下は初めにimport numpy as npとしているものとする)

例として、
リストを
list_a = [0, 1, 2, 3]

Numpyの1次元の配列を
array_a = np.array([0, 1, 2, 3])

とすると

list_a は [0, 1, 2, 3]、
array_a は array([0, 1, 2, 3])。

データ型を確認すると
type(list_a) では class 'list' となり、
type(array_a) では class 'numpy.ndarray' となる。

ちなみにprint関数で出力すると、

print(list_a) は [0, 1, 2, 3] となるのに対し、
print(array_a) は  [0 1 2 3] となる(カンマがない)。


② まずリストを作ってそれを入れることでarrayを作ることができる。

list_b = [2, 4, 6, 8]

array_b = np.array(list_b)
とすることで、
array_b は array([2, 4, 6, 8])となる。


③ Numpyに入れることができるのは数値だけ

 array_c =np.array([1, letter, 3]) のように文字列を入れるとエラーになる。

スコープについて②

グローバル変数を関数のなかで操作する場合はグローバル宣言をする。

a = 10
b = 20

def sum(x, y):

    global a
    a = 3
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:
a: 3
sum: 30
a: 3
…グローバル宣言によりaは3で表示され、関数使用後も3で表示される。しかし関数での計算ではaの10が引数のxに引き渡されているのでsumは30のまま。

スコープについて①

独学プログラマーP.60~ スコープについて。


ここについては、
グローバル変数とローカル変数を理解しよう! Python入門
が分かりやすかった。


関数の外で変数を決めるとグローバル変数となる。これはどこからでもアクセスできる。
関数の中で変数を決めるとローカル変数となる。この変数はその関数内だけで使える。


①グローバル変数は関数のなかでも使用できる。

a = 10
b = 20

def sum(x, y):

    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:
a: 10
sum: 30
a: 10
…aは10のままで出力され、関数使用後も当然10のまま。


②次に関数のなかでa = 3としてみると、

a = 10
b = 20

def sum(x, y):

    a = 3
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:
a: 3
sum: 30
a: 10
…関数のなかでだけaは3で、関数使用後は10のままとなる。つまり関数のなかでaという同じ名前のローカル変数を作ったことになる。


③関数のなかでaに1を加えようとしてみると、

a = 10
b = 20

def sum(x, y):

    a += 1
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

結果:エラーになる。
UnboundLocalError: local variable 'a' referenced before assignment
グローバル変数は関数内で参照はできるが操作はできないということ


④また、関数内でのみ使った変数を関数外で使用してみると、

a = 10
b = 20

def sum(x, y):

    c = 100
    print("a:", a)

    return x+ y


num = sum(a, b)
print("sum:", num)

print("a:", a)

print("c", c)

結果:エラーになる。
NameError: name 'c' is not defined
ローカル変数は関数内でのみアクセスできる。

スコープ:scope
(行動・思考・知覚・調査などの)範囲、領域
<コンピュータ用語>宣言の場所により決定される変数やプロシージャの有効範囲。

いちばんやさしいPythonの教本を買った

先日(といっても2ヵ月前)いちばんやさしいPythonの教本を買った…

前半は(独学プログラマーとPython1年生で勉強した)基礎を復習、途中からは会話botをつくりながら関数、モジュール、ライブラリのインポート、requestsでHTML情報取得、簡単なWebアプリケーションの作成など。

(主線から離れたことかもしれないけど)勉強になったのは例外処理、仮想環境の構築。例外処理は地味だけど重要、仮想環境の構築はいろいろなライブラリをインストールして収拾がつかなくなるのを防ぐことができる。


いちばんやさしいPythonの教本 人気講師が教える基礎からサーバサイド開発まで [ 鈴木たかのり ]
(なぜか画像つきのリンク表示がうまくいかなかったのでテキストだけです)

Python1年生。wheel形式のNumpyのインストールでエラーになった対処法など(Windows)

Python1年生 第5章 人工知能くんと遊んでみよう で、wheel形式のNumpyのインストールがうまくいかず、いろいろなサイトを参考にしてインストールに成功したのでその経緯などを書きとめます。同様の苦労をしている方に少しでも参考になれば幸いです。

私の構成:Python 3.8.1、32bit版、Windows 10

一度Numpyをインストールして普通に使えていたのですが、Windows 10のマイナーアップデートの際にクラッシュしてしまい、システム再インストールせざるをえず、PythonもNumpyも再度インストールになってしまいました。
はじめはPytonは3.6でした。今回3.8をインストール。

まず、Python1年生P.157~に書いてあるように、Numpyのサイト(Unofficial Windows Binaries for Python Extension Packages)から

numpy-1.18.2+mkl-cp36-cp36m-win32.whl

をダウンロードしてインストールしようとしたのですが以下のようなエラー。

numpy-1.18.2+mkl-cp36-cp36m-win32.whl is not a supported wheel on this platform.

以下のサイトを参考にして、まずpipが対応するcpを確認しました。
【Python】.whlファイルをpipでインストールしようとして「○○.whl is not a supported wheel on this platform.」エラーが出た時の対応

コマンドラインで、
from pip._internal.pep425tags import get_supported
次いで、
get_supported()
を入力すると私のものが対応しているのはcp38でしたので、再度Numpyのサイトから

numpy-1.18.2+mkl-cp38-cp38-win32.whl

をダウンロードしてインストールすると成功! Python3.8のときはcp38というように数字が合ったものをインストールすると書いてあるサイトもありました。

ちなみに、はじめは本と同じく、
pip install C:\Users\<ユーザー名>\Downloads\numpy-1.18.2+mkl-cp38-cp38-win32.whl
としましたがなぜかエラーが出てしまう(ディレクトリのエラー?)ため、
cd \Users\<ユーザー名>\Downloads
でnumpyをダウンロードしたフォルダに移動してから
pip install numpy-1.18.2+mkl-cp38-cp38-win32.whl
でインストールできました。



 

アプリを作る。外部ライブラリを使って。

Python1年生
外部ライブラリを使って。

まずはP.135のdispImage.pyを実行してみました。
その前にpipでpillowをインストール。ちなみにUbuntu(Lbuntu)ではインストールのコマンドが
sudo pip3 install pillow
となる。私のLbuntuのバージョンではPython2とPython3両方は行っているのでただpipとするとPython2のほうに入ってしまうようです。

import tkinter as tk
import tkinter.filedialog as fd
import PIL.Image
import PIL.ImageTk

def dispPhoto(path):
    #画像を読み込む
    newImage = PIL.Image.open(path).resize((300,300))
    #そのイメージをラベルに表示する
    imageData = PIL.ImageTk.PhotoImage(newImage)
    imageLabel.configure(image = imageData)
    imageLabel.image = imageData

def openfile():
    fpath = fd.askopenfilename()

    if fpath:
        dispPhoto(fpath)

root = tk.Tk()
root.geometry("400x350")

btn = tk.Button(text="ファイルを開く", command = openfile)
imageLabel = tk.Label()
btn.pack()
imageLabel.pack()
tk.mainloop()





長い!!

そこでちょっと先にはなりますが独学プログラマーP.218のFlaskを使ったコードを書きました。

 from flask import Flask

app = Flask(__name__)

@app.route('/')
def index():
    return "Hello,World!"


app.run(port=8000)

ここで、はじめ実行したときエラーになりました。_name_が定義されていないというもの。調べてみたところnameの前後はアンダーバーが2つ必要とのことでした(上記コードは修正後のものです)。
 (https://detail.chiebukuro.yahoo.co.jp/qa/question_detail/q10163829445で教えて頂きました)

辞書について勉強。独学プログラマーP.78~

辞書について勉強。独学プログラマーP.78~

辞書の内容がなじみにくかったので武将で作ってみました。


busyo = {"織田":"信長","豊臣":"秀吉","徳川":"家康"}

print(busyo)

#値を取り出す

print(busyo["織田"])

#キーバリューペアを追加する

busyo["源"] = "頼朝"

print(busyo)

#キーが使われているか確認

print("豊臣" in busyo)

#辞書から削除する

del busyo["徳川"]

print(busyo)



追加のことを以下のサイトで勉強しました。
Dictionary(辞書)の使い方。基本と応用 Python入門

独学プログラマー第4章終了 チャレンジ問題

独学プログラマー第4章 チャレンジ問題 P.69

問題 1.

x = input("type a number:")
x = int(x)

def nijo(x):
    return x**2

print(nijo(x))

関数名はnijo(2乗)としました。
解答では数字は決まったものでしたがこのプログラムではinputで入力する形にしました。

解答のように書いたものは、

def nijo(x):
    return x**2

print(nijo(2))


問題2.

a = input("type a word:")

def mojiretusyuturyoku(a):
    print(a)

mojiretusyuturyoku(a)

関数名はmojiretusyuturyoku(文字列出力)としました。


問題3.

def tashizan(a,b,c,d=4,e=5):
     result = a+b+c+d+e
     return result

f = tashizan(1,2,3)
print(f)

または

def tashizan(a,b,c,d=4,e=5):
     return = a+b+c+d+e
result = tashizan(1,2,3)
print(result)


問題4.

a = 4

def keisan1(a):
    return int(a/2)

b = keisan1(a)

print(b)


def keisan2(b):
    b = keisan1(a)
    return b*4

c = keisan2(b)

print(c)

解答はもっとシンプルでした。それ風に書くと、

def keisan1(a):
    return a/2

def keisan2(a):
    return a*4

b = keisan1(4)
c = keisan2(b)

print(c)

これだと浮動小数点型としてなるので
return a // 2
とするか。


問題5.

def henkan(a):
    try:
        b = float(a)
        print(b)
       
    except ValueError:
        print("Invalid input.")

henkan("moji")


inputで入力する形にすると、


def henkan(a):
    try:
        b = float(a)
        print(b)
       
    except ValueError:
        print("Invalid input.")

a = input("Type a number:")
henkan(a)

   








python print

print_pythonnote print ¶ 言葉や数値を出力する ¶ In [ ]: print ( "...