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)