2018年9月2日日曜日

【Python3】pythonの教科書(4) ~無名関数、例外処理

1、無名関数
関数を定義しない関数のことで、lambdaを使います。
【例:xを2倍する無名関数】
y = lambda x : x *2  # y(x) : return x * 2 と同じ
y(2)
   ⇒(結果)4

【例: yに代入された関数オブジェクトをnumsの要素全てに実行してリスト化する 】
nums = [1, 3, 5, 7, 9]
y = lambda x : x *2
list(map(y, nums))
  ⇒(結果)[2. 6, 10, 14, 18]

【例: タプルのリストをソートする 】
tpl_list = [(1,2),(2,1),(3,0),(4,-5)]
ranking_list = sorted( tpl_list, key = lambda tpl : tpl[1], reverse=False)
print("+-------- rank (index, value)  ------+")
for i,v in enumerate(ranking_list) : print(i+1, v)
  ⇒(結果)+-------- rank (index, value)  ------+
               1 (4, -5)
               2 (3, 0)
               3 (2, 1)
               4 (1, 2)

2、例外処理
例:
s = input("Please input weight !")
try:
  v = 100 / float(s)
  print(v)
except ValueError as e:
  print(e)
except ZeroDivisionError as e:
  print(e)
except:
  print("another Error !!")
finally:
  print("end !!!")

エラーを発生させたいときは、 raiseを使用する
raise Exception("test Error ")


【Python3】pythonの教科書(3) ~データ(set/辞書/docstring/グローバル変数)

1、set
重複値を持つことができない
例: colors = { "red", "yellow", "green" }

2、辞書
例:
# 辞書型のデータ(果物名と値段)を変数に代入
fruits = { "バナナ": 300, "オレンジ": 240, "イチゴ": 350, "マンゴー": 400 }
# 辞書型のデータ一覧を表示
for name in fruits.keys():
    # 値段を得る
    price = fruits[name]
    # 画面に出力
    s = "{0}は、{1}円です。".format(name, price)
    print(s)

for name, price in fruits.items():
    s = "{0}は、{1}円です。".format(name, price)
    print(s)

・values()を使うと、値一覧を取得できる
・items()で、キーと値の一覧を取得できる
・sorted(d.keys())で、キー一覧をソート済みのリストで取得できる

【成績計算】
records = { 'Tanaka':72, 'Yamada':65, 'Hirata':100,'Akai':56, 'Fukuda':66, 'Sakai':80 }
# 合計を求める
sum_v = 0
for v in records.values():
    sum_v += v
print("合計点:", sum_v)


3、関数
(1) docstring
  関数の直下に三重引用符(''')の文字列を記述する。説明文をつける機能です。
 help(関数名)で確認できます。

【サンプル(動物での走行時間計算)】
# 動物の最高時速
animal_speed_dict = { "チーター": 110, "トナカイ": 80, "シマウマ": 60,  "ライオン": 58, "キ リ ン": 50,  "ラ ク ダ": 30}
# 東京から各都市までの距離
distance_dict = { "静  岡": 183.7,"名古屋": 350.6, "大  坂": 507.5}
def calc_time(dist, speed):
   ''' 時間を計算する '''
    t = dist / speed
    t = round(t, 1) # 四捨五入
    return t
def calc_animal(animal, speed):
   ''' 動物の各都市までの時間を計測する '''
    res = "|" + animal
    for city in sorted(distance_dict.keys()):
        dist = distance_dict[city]
        t = calc_time(dist, speed)
        res += "|{0:>6}".format(t) # 6文字を右寄せ(0は、format内の1番目の文字列)
    return res + "|"

print("+--------+------+------+------+")
print("|動物名前", end="")  # endは改行しないという意味
for city in sorted(distance_dict.keys()):
    print("|" + city, end="")
print("|")
print("+--------+------+------+------+")

for animal, speed in animal_speed_dict.items():
    s = calc_animal(animal, speed)
    print(s)
print("+--------+------+------+------+")

(2) グローバル変数
関数内でglobal宣言すると、グローバル変数の値変更可能となる
value =100
def changeValue()
  ''' valueをグローバル宣言 '''
  global value
  value =20

changeValue()
print("value=", value)
  →value =20となる(global valueを宣言しないと、100となる)

【Python3】pythonの教科書(2) ~type/pass/while/リスト/タプル

1、変数の型を調べる
type(変数や値)

2、if文で、何もしない場合
passを使用する
【例】
n = 5
if n == 3:
  pass
else:
  print(n)

3、プログラムの強制終了
[Ctrl]+[C] キー

4、while/for構文でのelseブロック
繰り返し条件が偽になった時に実行される
(繰り返しが1度も実行されない時、breakで途中終了されなかった時)

5、リスト
リストの例: a = [1,2,3,4]
                    len(a)
                    for i in a
                      print(v)
                    sum = sum(a)
                    a.append(5)
                    # インデックス番号、要素の値を出力
                    for i,v in enumerate(a)
                      print(i,v)
                  # 要素の追加
                  a += [6,7,8]
                    a .expand([9,10])

(1) リストのスライス
開始は0でなく、1となる(0から数えて1番目
・リスト[開始:終了]  // [:3]のように0は省略可能(末尾も同様)
・リスト[開始:終了:ステップ] 
・リスト[-2] //末尾から2個目の値

(2) リスト操作(以下の関数が使用できる)
appnd(x)
extend(x)
insert(i,x)
remove(x)
pop()
clear()
index(x)
count(x)
sort(key,reverse)   // reverse=Trueで降順ソート
copy()

6、タプル
リストと異なり、値が変更できません
リストの例: a = (1,2,3,4)
                     b=a[1]
                     c=[:2]

7、リストとタプルの変換
タプルからリスト変換:list(タプル)
リストからタプル変換:tuple(リスト)

【Python3】pythonの教科書(1) ~文字列に変換

pythonの教科書という本を買って、python3を勉強してみました。
(読みやすい本です。レビューでの評価もいいですね)
今後使えそうな内容(コード)などまとめてみました。

1、Python Sell(IDLE )の起動
・スタートメニューから「Python3.x」「IDLE」選択

もしくは、
・コマンドプロンプトで pythonを入力

2、コマンドラインからスクリプトファイル実行
スクリプトファイルダブルクリックでも実行できますが、
python3 スクリプト名.py
で実行します。

3、文字列
(1)数値を文字列に変換
str(数値)
⇒文字列を数値:int(文字列)、float(文字列)
(2) format()で値を埋め込む方法
"書式文字列".format(値,....)
【例】

inchi=24
cm =inchi * 2.54
desc ="{0}インチ={1}センチ".format(inch,cm)
print(desc)
(4) その他
・文字列の置換
 文字列.replace("検索語句","置換後の内容")
・英文字を単語に区切る
 文字列.split(区切り文字)
・lower()で文字列を小文字にする。upper()で大文字にする
・find(検索キーワード)で検索①を調べる
・spilt('区切り文字')で、分割する

2018年8月30日木曜日

【Python】Python3 インストール方法

Python3を使って、Pythonプログラミングを行うので、インストール方法をまとめてみました。

(1) Pythonをダウンロード
https://www.python.org/downloads/ ページでダウンロードする。
 ⇒今だと、Download Python 3.7.0 をクリックしてローカル保存する

(2)インストール
ダウンロードしたファイルをダブルクリックして、Add Python 3.6 to PAHT」にチェックを入れてから、「Install Now」をクリックし、インストールを開始させる。
インストールが完了したら、「Close」をクリックして、ウィンドウを閉じる。

(3) インストールの確認
(pythonの確認)
Windows のコマンドプロンプトを起動して、python を入力し、Enter キーを押す。
画面に「Python 3.6.3 on win32」が表示されれば、Python が正しくインストールされたことになる。
 ⇒Python2を使うときはpy -2コマンドを実行。Python3のときはpy -3を実行する。

(pipの確認)
コマンドプロンプトを起動して、pip --version を入力し、Enter キーを押す。
画面に「pip 9.x.x (Python 3.6)」のようなメッセージが表示されれば、インストールが正しく行われたことになる。

(4) python2がインストール済みの場合
python3を使いたい場合は、pathを変更する。(順番が重要!)



【参考URL】
https://bi.biopapyrus.jp/os/win/win-install-python.html
https://www.tech-tech.xyz/archives/3067595.html
http://windvoice.hatenablog.jp/entry/2018/05/02/150754

2018年8月22日水曜日

句読点[。、]の正しい使い方、9つのルール

知人から、 句読点の「?。」は使うのは変だと教えてもらい、調べてみました。
やはり変でした。

最後まで読まれる文章、読んでいてストレスにならない文章を作るために、句読点(句点(くてん)[。]と読点(とうてん)[、])はとても重要です。
句読点のルールを記載した下記アドレスのトピック9個が上がっており、今後注意したいと思います。

1、読点の使い方・ルール
●一文の文字数=52.2文字、一文の読点数=1.49個にする
 →1つの文は約50文字で書かれており、1つの文中に1〜2個の読点が使われている
●読点[、]は通常、文章の「主語」「主題」のあとに打つ
 →短い文章の場合は、読点がないほうが読みやすい場合が多い
●重文では、途中で読点[、]で区切りをつけた方が読みやすくなる
  (ひとつの文章の中に[主語+述語]のかたまりが複数あるものを、「重文」または「複文」と言う)
●接続詞(しかし・だから・また・あるいは 等)や一部の副詞(もし・なぜなら・決して 等)、またはこれらと似たような働きをする語句の後に打つ
●並列関係にある語句をいくつか並べる場合、その区切りに使う
●修飾語と修飾される語句との関係が分かりやすいように読点を打つ
 →読点[、]を打つ位置によっては、同じ文章がまったく違う意味に変わってしまうことがある
●漢字・カナの連続を防ぐために打つ

2、句点の使い方・ルール
●文章の最後にカッコ()を使うときには、カッコの後に句点を打つ
 (参照元、筆者名などを文章の最後に記載するときは、カッコの前に句点を打つこともある)
● 感嘆符[!]や疑問符[?]の後ろには句点は打たない

【参考URL】
http://ebloger.net/punctuation/

2018年8月5日日曜日

【Python】難読化

「Pythonの難読化」について、調べてみました。
方法は主に二つあるようです。
 
①Pythonの難読化ツールで行う
モジュール compileall か py_compile を使うと .pyファイルをコンパイルして .pycファイルを作成できる。
 
「python3 -m compileall [ファイル名] 」
で、同じ階層に "__pychache__" というディレクトリができる。
 
その中に、
[ファイル名].[Pythonのバージョン].pyc
というコンパイル済みファイルができので、
python3 [ファイル名].[Pythonのバージョン].pyc
で実行する。


②Pythonを他言語に変換してコンパイル
(1) Cythonで、PythonのコードをCに変換してコンパイルすることで高速化する
 
(2)  jythonを使い、 Pythonコードをjavaに翻訳して、バイトコードにコンパイルする