import SimpleHTTPServer

SimpleHTTPServerをimportする。

[vagrant@localhost python]$ python
Python 2.7.14 (default, Mar 12 2018, 22:03:33)
[GCC 5.4.0 20160609] on linux2
Type “help”, “copyright”, “credits” or “license” for more information.
>>> import SimpleHTTPServer
>>> SimpleHTTPServer.test()
Serving HTTP on 0.0.0.0 port 8000 …
192.168.33.1 – – [21/Jul/2018 22:28:14] “GET / HTTP/1.1” 200 –
192.168.33.1 – – [21/Jul/2018 22:28:14] code 404, message File not found
192.168.33.1 – – [21/Jul/2018 22:28:14] “GET /favicon.ico HTTP/1.1” 404 –
192.168.33.1 – – [21/Jul/2018 22:28:18] “GET /app.py HTTP/1.1” 200 –

ん?どういうことだ?

pythonに慣れよう9 クラス

class Yamanote:
	pass

shinagawa = Yamanote()
shinagawa.city = "Minato-ku"
shinagawa.user = 370000
shinagawa.line = 24

shibuya = Yamanote()
shibuya.city = "Shibuya-ku"
shibuya.user = 3310000
shibuya.spot = "hachiko"

print(shinagawa.city)
print(shibuya.spot)

[vagrant@localhost python]$ python app.py
Minato-ku
hachiko

コンストラクタを使う。

class Yamanote:
	def __init__(self, city):
		self.city = city

shinagawa = Yamanote("Shinagawa-ku")
shibuya = Yamanote("Shibuya-ku")

print(shinagawa.city)
print(shibuya.city)

[vagrant@localhost python]$ python app.py
Shinagawa-ku
Shibuya-ku

クラス変数を呼び出す。

class Yamanote:
	count = 0
	def __init__(self, city):
		Yamanote.count += 1
		self.city = city

shinagawa = Yamanote("Shinagawa-ku")
shibuya = Yamanote("Shibuya-ku")
print(Yamanote.count)

ふむ。
[vagrant@localhost python]$ python app.py
2

メソッド

class Yamanote:
	count = 0
	def __init__(self, city):
		Yamanote.count += 1
		self.city = city
	def announce(self):
		print("This is " + self.city)

shinagawa = Yamanote("Shinagawa-ku")
shibuya = Yamanote("Shibuya-ku")

shinagawa.announce()
shibuya.announce()

わかるんだが、使っていかないと、慣れないね。
[vagrant@localhost python]$ python app.py
This is Shinagawa-ku
This is Shibuya-ku

@classmethod

class Yamanote:
	count = 0
	def __init__(self, city):
		Yamanote.count += 1
		self.city = city
	def announce(self):
		print("This is " + self.city)
	@classmethod
	def show_info(cls):
		print(str(cls.count) + "instances")

shinagawa = Yamanote("Shinagawa-ku")
shibuya = Yamanote("Shibuya-ku")

Yamanote.show_info()

あああああ
[vagrant@localhost python]$ python app.py
2instances

class のprivate, public

class Yamanote:
	def __init__(self, city):
		self.__city = city
	def announce(self):
		print("This is " + self.__city)

shinagawa = Yamanote("Shinagawa-ku")
shibuya = Yamanote("Shibuya-ku")

print(shinagawa.__city)

[vagrant@localhost python]$ python app.py
Traceback (most recent call last):
File “app.py”, line 12, in
print(shinagawa.__city)
AttributeError: Yamanote instance has no attribute ‘__city’
ほえ~

継承のsuperがうまくいかない。

class Yamanote:
	def __init__(self, spot):
		self.spot = spot
	def announce(self):
		print("Enjoy " + self.spot)

class Startup(Yamanote):
	def __init__(self, spot, company):
		super().__init__(spot)
		self.company = company
	def hello(self):
		print("What's up " + self.company)

harajyuku = Startup("takeshita","sm")
print(Harajyuku.spot)
Harajyuku.hello()

[vagrant@localhost python]$ python app.py
Traceback (most recent call last):
File “app.py”, line 16, in
harajyuku = Startup(“takeshita”,”sm”)
File “app.py”, line 11, in __init__
super().__init__(spot)
TypeError: super() takes at least 1 argument (0 given)
あ、python2系はエラーになるのね。。早くいってよ、もー

import math, random
print(math.pi)

pythonに慣れよう8 変数のスコープ

関数の中で変数を定義する。

def yurakucho_line():
		dep = "nagatacho"
		arrive = "yurakucho"
		print(dep + " + " +arrive)

yurakucho_line()

[vagrant@localhost python]$ python app.py
nagatacho + yurakucho

グローバルな変数

dep = "東京駅"
def yurakucho_line():
		dep = "永田町"
		arrive = "有楽町"
		print(dep + " → " +arrive)
yurakucho_line()
print(dep + "を出発しました。")

[vagrant@localhost python]$ python app.py
永田町 → 有楽町
東京駅を出発しました。

変数の中をコメントアウトする。

def yurakucho_line():
		# dep = "永田町"
		arrive = "有楽町"
		print(dep + " → " +arrive)
yurakucho_line()
print(dep + "を出発しました。")

[vagrant@localhost python]$ python app.py
東京駅 → 有楽町
東京駅を出発しました。

pythonに慣れよう7 関数

defを使います。

coffee = raw_input("注文 ? ")
def cheer():
	print("いらっしゃいませ。ご注文はお決まりでしょうか?")

def order():
	print(coffee + "をお願いします。")

def thanks():
	print(coffee + "ですね。少々お待ちくださいませ。")

cheer()
order()
thanks()

[vagrant@localhost python]$ python app.py
注文 ? orange
いらっしゃいませ。ご注文はお決まりでしょうか?
orangeをお願いします。
orangeですね。少々お待ちくださいませ。

引数を渡します。

def order(coffee):
	print("いらっしゃいませ。ご注文はお決まりでしょうか?")
	print(coffee + "をお願いします。")
	print(coffee + "ですね。少々お待ちくださいませ。")

order("ブレンド")
order("カフェラテ")
order("カフェモカ")

ルノアールでも大体こんな感じ。
[vagrant@localhost python]$ python app.py
いらっしゃいませ。ご注文はお決まりでしょうか?
ブレンドをお願いします。
ブレンドですね。少々お待ちくださいませ。
いらっしゃいませ。ご注文はお決まりでしょうか?
カフェラテをお願いします。
カフェラテですね。少々お待ちくださいませ。
いらっしゃいませ。ご注文はお決まりでしょうか?
カフェモカをお願いします。
カフェモカですね。少々お待ちくださいませ。

引数を注文と支払金額にアレンジしてみます。

brend = 380
cafelate = 420
cafemoca = 480

def order(coffee, money):
	print("いらっしゃいませ。ご注文はお決まりでしょうか?")
	print(coffee + "をお願いします。")
	print(coffee + "ですね。少々お待ちくださいませ。")
	if coffee == "ブレンド":
		print(str(brend) + "円になります。")
		print(str(money) + "円でお願いします。")
		print(str(money - brend) + "円のお返しになります。ありがとうございました。")
	elif coffee == "カフェラテ":
		print(str(cafelate) + "円になります。")
		print(str(money) + "円でお願いします。")
		print(str(money - brend) + "円のお返しになります。ありがとうございました。")
	elif coffee == "カフェモカ":
		print(str(cafemoca) + "円になります")
		print(str(money) + "円でお願いします。")
		print(str(money - brend) + "円のお返しになります。ありがとうございました。")
	else:
		print("申し訳ございません。" + coffee + "は当店にはございません。")

order("ブレンド", 500)
order("カフェラテ", 1000)
order("カフェモカ", 10000)
order("ブルーマウンテン", 1000)

やる気のない定員は大体こんなワンパターン。
[vagrant@localhost python]$ python app.py
いらっしゃいませ。ご注文はお決まりでしょうか?
ブレンドをお願いします。
ブレンドですね。少々お待ちくださいませ。
380円になります。
500円でお願いします。
120円のお返しになります。ありがとうございました。
いらっしゃいませ。ご注文はお決まりでしょうか?
カフェラテをお願いします。
カフェラテですね。少々お待ちくださいませ。
420円になります。
1000円でお願いします。
620円のお返しになります。ありがとうございました。
いらっしゃいませ。ご注文はお決まりでしょうか?
カフェモカをお願いします。
カフェモカですね。少々お待ちくださいませ。
480円になります
10000円でお願いします。
9620円のお返しになります。ありがとうございました。
いらっしゃいませ。ご注文はお決まりでしょうか?
ブルーマウンテンをお願いします。
ブルーマウンテンですね。少々お待ちくださいませ。
申し訳ございません。ブルーマウンテンは当店にはございません。

関数はreturnして値を返すこともできる。PassはNoneです。

def deeplearning():
	return "DNN, CNN, RNN"
def conputerVision():
	return "画像認識"

msg = deeplearning()
print(msg)

[vagrant@localhost python]$ python app.py
DNN, CNN, RNN

pythonに慣れよう6 for文

printする際に、iをstr(i)としないと、 cannot concatenate ‘str’ and ‘int’ objectsとエラーになる。

list = ["井山裕太","許家元","一力遼","山下敬吾","余正麒"]

j = 0
for i in range(5, 0, -1):
	print("第" + str(i) + "位:" + list[j])
	j += 1

[vagrant@localhost python]$ python app.py
第5位:井山裕太
第4位:許家元
第3位:一力遼
第2位:山下敬吾
第1位:余正麒

途中にif文を差し込むと

j = 0
for i in range(5, 0, -1):
	print("第" + str(i) + "位:" + list[j])
	if i == 2:
		print("ざわざわ")
	j += 1

[vagrant@localhost python]$ python app.py
第5位:井山裕太
第4位:許家元
第3位:一力遼
第2位:山下敬吾
ざわざわ
第1位:余正麒

j = 0
for i in range(5, 0, -1):
	if i == 2:
		print("ざわざわ")
		continue
	print("第" + str(i) + "位:" + list[j])
	j += 1

スキップされます
[vagrant@localhost python]$ python app.py
第5位:井山裕太
第4位:許家元
第3位:一力遼
ざわざわ
第1位:山下敬吾

pythonに慣れよう5

配列を使ってwhile文

# coding: utf-8
list = ["王将","飛車","角行","金将","銀将","桂馬","香車","歩兵"]
num = len(list)

i = 0
while i < num:
	print(list[i])
	i += 1
else:
	print("end")

[vagrant@localhost python]$ python app.py
王将
飛車
角行
金将
銀将
桂馬
香車
歩兵
end

while文の途中でbreakを入れる場合は

i = 0
while i < num:
	if list[i] == "桂馬":
		print("あとは雑魚")
		break
	print(list[i])
	i += 1
else:
	print("end")

なるほど
[vagrant@localhost python]$ python app.py
王将
飛車
角行
金将
銀将
あとは雑魚

range
以下のように書くと、10 9 8 .. 2 1 0となるかと思ったが、何も表示されない。rangeは足す時だけのようね。

for i in range(10, 0):
	print(i)
for i in range(0, 10):
	print(i)

あーはいはい、こういうことね。そりゃ出来ない訳ないよね♪

for i in range(10, 0, -1):
	print(i)

[vagrant@localhost python]$ python app.py
10
9
8
7
6
5
4
3
2
1

pythonに慣れよう4

pythonのif文を麻雀の役の計算で書いてみる。

chair = "parent"
yaku = int(input("yaku ? "))

if yaku == 1:
	print("lon, 2000")
elif yaku == 2:
	print("lon, 3900")
elif yaku == 3:
	print("lon, 7700")
elif yaku < 6:
	print("mangan, 12000")
elif yaku < 8:
	print("haneman, 18000")
elif yaku < 11:
	print("baiman, 24000")
elif yaku < 13:
	print("sanbaiman, 36000")
else:
	print("48000, shuryodesu")
&#91;/python&#93;

&#91;vagrant@localhost python&#93;$ python app.py
yaku ? 6
haneman, 18000
yaku ? 24
48000, shuryodesu

ifを入れ子にする場合。インデントでずらす。
&#91;python&#93;
chair = "child"
yaku = int(input("yaku ? "))

if chair == "parent":
	if yaku == 1:
		print("lon, 2000")
	elif yaku == 2:
		print("lon, 3900")
	elif yaku == 3:
		print("lon, 7700")
	elif yaku < 6:
		print("mangan, 12000")
	elif yaku < 8:
		print("haneman, 18000")
	elif yaku < 11:
		print("baiman, 24000")
	elif yaku < 13:
		print("sanbaiman, 36000")
	else:
		print("48000, shuryodesu")
elif chair == "child":
	if yaku == 1:
		print("lon, 1500")
	elif yaku == 2:
		print("lon, 2900")
	elif yaku == 3:
		print("lon, 5800")
	elif yaku < 6:
		print("mangan, 8000")
	elif yaku < 8:
		print("haneman, 12000")
	elif yaku < 11:
		print("baiman, 18000")
	elif yaku < 13:
		print("sanbaiman, 24000")
	else:
		print("36000, shuryodesu")
else:
	print("see you again")
&#91;/python&#93;

&#91;vagrant@localhost python&#93;$ python app.py
yaku ? 4
mangan, 8000

Yes sir!

改行せずに1行で書くこともできる。
&#91;python&#93;
chair = "child"
yaku = int(input("yaku ? "))

print("tobimashita" if yaku > 4 else "I'm winner")

while文

i = 1
while i < 29: print("2月{0}日".format(i)) i += 1 [/python]

pythonに慣れよう3

# coding: utf-8
name = "Gennadiy"
skill = "3D modeling"
location = "West Hollywood, Russia"

print("name: %s, skill: %s, location: %s" % (name, skill, location))

[vagrant@localhost python]$ python app.py
name: Gennadiy, skill: 3D modeling, location: West Hollywood, Russia

この記法は、mysqlのset valueみたいですね。変数をstringからnumberに変えます。

# coding: utf-8
name = "Gennadiy"
skill = "3D modeling"
age = 18

print("name: %s, skill: %s, age: %d" % (name, skill, age))

[vagrant@localhost python]$ python app.py
name: Gennadiy, skill: 3D modeling, age: 18

%f はfloatになるので、コンパイルエラーになります。
Traceback (most recent call last):
File “app.py”, line 6, in
print(“name: %s, skill: %s, age: %f” % (name, skill, age))
TypeError: float argument required, not str

型指定しない記法もある。

print("name: {0}, skill: {1}, age: {2}".format(name, skill, age))

pythonに慣れよう2

# coding: utf-8
x = 598
print(x / 3)

[vagrant@localhost python]$ python app.py
199

print(True and False)

プログラミングの基礎やるとき、いつも思うんだが、これ何でFalseになるかね?
[vagrant@localhost python]$ python app.py
False

TrueとFalseなら、TrueFalseでいいと思うんだが。
美女 and 野獣 => 美女と野獣 でしょ。
美女 and 野獣 => 野獣 でもあながち間違いではないが。 あ、例がまずかった。

print("Data Scraping" + " +S\n")
print("Data Science" + " +A\n")

改行コードいれなくても勝手に改行されますね。この辺は、phpと違うようです。
[vagrant@localhost python]$ python app.py
Data Scraping +S

Data Science +A

pythonに慣れよう

# coding: utf-8
print("hello world")

[vagrant@localhost python]$ python app.py
hello world

変数

# coding: utf-8

msg = "機械学習頑張るぞ!"
print(msg)

[vagrant@localhost python]$ python app.py
機械学習頑張るぞ!

Python では 定数 はサポートされていない。慣習的に大文字とアンダーバー(_)のみの変数が固定値を表現する。

PI = 3.14
MAX_BUFFER_SIZE = 1024
msg = "機械学習\n頑張る\tぞ!"
print(msg)

[vagrant@localhost python]$ python app.py
機械学習
頑張る ぞ!

html = """<html><body>machine learning</body>
</html>"""
print(html)

[vagrant@localhost python]$ python app.py
machine learning