lispとrubyとpythonと その2 (python)ver2

python3.0で書き直し。

#文字列連結
s = "abc" + "あいうえお"
print(s)
#->abcあいうえお

#文字列の分割
import string
arr0 = "あaあ,いiい,うuう,えeえ".split(",")

for e in arr0:
    print(e)
#->あaあ
#  いiい
#  うuう
#  えeえ

#正規表現で分けてもいい
import re
p = re.compile(",")
arr1 = p.split("あaあ,いiい,うuう,えeえ")

for e in arr1:
    print(e)
#->あaあ
#  いiい
#  うuう
#  えeえ

#文字列の検索
#前はバイトで数えてそうだったんだけど、3.0からは文字数で数えてる??
m =  re.search("かきくけこ","あいうえおかきくけこさしすせそ")
print(str(m.start(0)) + "-" + str(m.end(0)))
#->5-10

#findでもいける
print("あいうえおかきくけこさしすせそ".find("かきくけこ"))
#->5

#部分文字列の取得
print("あいうえおabcde"[5:])
#->abcde

#特定の文字の場所を探して部分文字列取得とかありがちじゃない?
target = "あいうえお-かきくけこ"
print(target[target.find("-") + 1:])
#->かきくけこ

#文字列比較
#普通の文字列比較
if "aaa" == "aaa":
    print("true")
#->true

#pythonでは==が同値性比較でisが同一性比較
if "aaa" == "aaa":
    print("1true")
else:
    print("1false")
#->true

if [1,2] is [1,2]:
    print("2true")
else:
    print("2false")
#->2false

s1  = [1,2]
s2 = s1
if s1 is s2:
    print("3true")
else:
    print("3false")
#->3true

#case-insensitiveな比較
#upperしてから比較
if "aaa".upper() == "Aaa".upper():
    print("true")
#->true

#数字->文字列
print(str(123.0000))
#->123.0

#文字列->数値
i = int("123")
print(str(i + 1))
#->124

f = float("123.000")
print(str(f + 1))
#->124.0


import datetime

#現在日付
dt = datetime.datetime.now()

#日付->文字列
print(("%s/%s/%s %s:%s:%s" % (dt.year,dt.month,dt.day,dt.hour,dt.minute,dt.second)))
#->2008/12/14 20:30:6

#strftimeでフォーマット
#細かい書式指定はこのへんに書いてある
#http://www.python.jp/doc/release/lib/module-time.html
print(dt.strftime("%Y/%m/%d %H:%M:%S"))
#->2008/12/14 20:30:06

#ミリ秒単位での取得
#マイクロ秒がmicrosecondでとれる
print(dt.strftime("%Y/%m/%d %H:%M:%S") + str(dt.microsecond / 1000))
#->2008/12/14 20:30:06993.006

#文字列->日付
print(datetime.datetime.strptime("2008/07/06 12:13:14","%Y/%m/%d %H:%M:%S").strftime("%Y-%m-%d %H-%M-%S"))
#->2008-07-06 12-13-14

#日付時刻計算
#日付時刻の差はtimedeltaで表現される
#timedeltaのコンストラクタはこれ
#timedelta(days,seconds,microseconds,milliseconds,minutes,hours,weeks)
#並び順が理解できない・・・
(datetime.datetime.strptime("2008/07/06 12:13:14","%Y/%m/%d %H:%M:%S") + datetime.timedelta(0,0,0,0,0,5)).strftime("%Y-%m-%d %H-%M-%S")
#->'2008-07-06 17-13-14'

#datetimeの引き算をすると当然timedeltaが戻る
delta = datetime.datetime.strptime("2008/12/24 00:00:00","%Y/%m/%d %H:%M:%S") - datetime.datetime.strptime("2008/12/13 00:00:00","%Y/%m/%d %H:%M:%S")
print("あと%s時間でクリスマスイブ\n" % (delta.days * 24 + (delta.seconds / 60 / 60)))
#->あと264.0時間でクリスマスイブ

#標準出力に出力
print("こんにちは")
#->こんにちは

import sys
sys.stdout.write("こんにちは 世界\n")
for l in iter(sys.stdin.readline,""):
    print(type(l))
    if l == "quit\n":
        break
    else:
        print(l.upper())

#イテレータ
#その1
class c0:
    def __init__(self):
        self.fld = 0

    def __iter__(self):
        return self

#next()は__next__に変わったらしい
    def __next__(self):
        self.fld = self.fld + 1
        return self.fld

for e in c0():
    if e > 3:
        print("break")
        break
    else:
        print(e)
#->1
#  2
#  3
#  break

#イテレータ
#その2
class c1:
    def __init__(self):
        self.fld = 0

    def get_iter(self):
        while True:
            self.fld = self.fld + 1
            yield self.fld

for e in c1().get_iter():
    if e > 3:
        print("break")
        break
    else:
        print(e)
#->1
#  2
#  3
#  break
        
#コマンドライン引数の取得
#sys.argvに入ってる
#解析はgetoptで
for a in sys.argv:
    print(a)