Python.use(better) #課題:body《source code》

記事一覧 Python.use(better)《Python3.1》

《余録》課題:body 《source code》

《著》森こねこ、小粒ちゃん+∞《監修》小泉ひよ子とタマゴ倶楽部
第0版♪2001/03/02 ● 第1版♪2003/05/25 ● 第2版♪2004/06/01 ● 第3版♪2009/02/28

基礎編で利用した学習ツールを作成する過程を通して「プログラミング」の理解を深めます。
※ Tcl/Tk で作成した例題を、Python3.1 で再構成しました。

課題:ソースコード


#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2009, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
# ..+....1....+....2....+....3....+....4....+....5....+....6....+....7....+....8
"""
>>> None

>>> ## ----------------------------------------
>>> None
version: #1.0.28
"""
## ----------------------------------------
def step00():
    """open(file,"w")"""

    def body(file):
        s = open(file,"w")
        return s

    ## ----------------------------------------
    local = locals()
    ex_body0(local, "temp")

## ----------------------------------------
def step01():
    """s.write(...)"""

    def body(file):
        s = open(file,"w")
        try:
            for e in "ABC":
                s.write("%s - %d\n"%(e,ord(e)))
        finally:
            s.close()
        return s

    ## ----------------------------------------
    local = locals()
    ex_body0(local, "temp")

## ----------------------------------------
def step02():
    """open(file,"r")"""

    def body(file):
        with open(file,"w") as s:
            for e in "ABC":
                s.write("%s - %d\n"%(e,ord(e)))

        with open(file,"r") as s:
            for e in s:
                print(e,end="")

    ## ----------------------------------------
    local = locals()
    ex_body0(local, "temp")

## ----------------------------------------
def step03():
    """for i,e in enumerate(f):"""

    def body(file):
        with open(file,"w") as s:
            for e in "ABC":
                s.write("%s - %d\n"%(e,ord(e)))

        with open(file,"r") as s:
            for i,e in enumerate(s):
                n = i+1
                print("%d: %s"%(n,e),end="")

    ## ----------------------------------------
    local = locals()
    ex_body0(local, "temp")

## ----------------------------------------
def step04x():
    """f.readlines()"""

    def body(file):
        with open(file,"w") as s:
            for e in "ABCDEFGHIJ":
                s.write("%s - %d\n"%(e,ord(e)))

        with open(file,"r") as s:
            s = s.readlines()
            print("name=%r (%d lines)"%(file,len(s)))

            format = "%d: %s"
            for i,e in enumerate(s):
                n = i+1
                print(format%(n,e),end="")

    ## ----------------------------------------
    local = locals()
    ex_body0(local, "temp")

## ----------------------------------------
def step05():
    """print(format%(n,e),end="")"""

    def body(file):
        with open(file,"w") as s:
            for e in "ABCDEFGHIJ":
                s.write("%s - %d\n"%(e,ord(e)))

        with open(file,"r") as s:
            s = s.readlines()
            n = len(s)
            print("name=%r (%d lines)"%(file,n))

            format = "%%%dd: %%s"%len("%d"%n)
            for i,e in enumerate(s):
                n = i+1
                print(format%(n,e),end="")
        
    ## ----------------------------------------
    local = locals()
    ex_body0(local, "temp")

## ----------------------------------------
def step06():
    """def body(file):"""

    def body(file):
        with open(file,"r") as s:
            s = s.readlines()
            format = "%%%dd: %%s"%len("%d"%len(s))
            for i,e in enumerate(s):
                n = i+1
                print(format%(n,e),end="")

    ## ----------------------------------------
    local = locals()
    ex_body1(local, "temp")

## ----------------------------------------
def step07():
    """def body(file, end=None):"""

    def body(file, end=None):
        with open(file) as s:
            s = s.readlines()
            format = "%%%dd: %%s"%len("%d"%len(s))
            s = s[:end]
            for i,e in enumerate(s):
                n = i+1
                print(format%(n,e),end="")

    ## ----------------------------------------
    local = locals()
    ex_body2(local, "temp")

## ----------------------------------------
def step08():
    """def body(file, start=1, end=None):"""

    def body(file, start=1, end=None):
        with open(file) as s:
            s = s.readlines()
            format = "%%%dd: %%s"%len("%d"%len(s))
            s = s[start-1:end]
            for i,e in enumerate(s):
                n = start+i
                print(format%(n,e),end="")

    ## ----------------------------------------
    local = locals()
    ex_body3(local, "temp")

## ----------------------------------------
def step09():
    """print("".join(s),end="")"""

    def body(file, start=1, end=None):
        with open(file) as s:
            s = s.readlines()
            format = "%%%dd: %%s"%len("%d"%len(s))
            s = [format%(start+i,e)
                for i,e in enumerate(s[start-1:end])]
            print("".join(s),end="")

    ## ----------------------------------------
    local = locals()
    ex_body3(local, "temp")

## ----------------------------------------
def tips_body():
    """def body(name, start=1, end=None, number=True):"""

    def body(name, start=1, end=None):
        seq, n = _body(name, start, end)
        s = "{{0:{0:d}d}}: {{1}}".format(len(str(n)))
        return [s.format(start+i, e) for i, e in enumerate(seq)]

    def _body(name, start, end):
        s = open(name).readlines(); N = len(s)
        if not end: end = N+1
        return s[start-1:end], N

    ## ----------------------------------------
    def ex_body(name, start=1, end=None):
        for e in body(name, start, end):
            print(e,end="")
        print()

    path = "/Applications/Python 3.1/Extras/Demo/scripts/"
    path += "queens.py"

    def ex(local):                              #@:
        source = '''
path
ex_body(path, end=5)
ex_body(path, start=81)
ex_body(path, 14, 18)
'''.split("\n")

        for e in source[1:-1]:
            print_(e, local)

    local = locals(); ex(local)

## ----------------------------------------
## ----------------------------------------
def ex_body0(local, n):
    X = 'body({0!r})'.format(n)
    print_(X, local)

def ex_body(file, seq):
    with open(file,"w") as s:
        for e in seq:
            s.write("%s - %d\n"%(e,ord(e)))

def ex_body1(local, file):
    ex_body(file, "ABCDEFGHIJ")
    X = 'body({0!r})'.format(file)
    print_(X, local)

def ex_body2(local, n):
    ex_body1(local, n)

    source = '''
body({0!r},end=3)
'''.split("\n")

    for e in source[1:-1]:
        print_(e.format(n), local)

def ex_body3(local, n):
    ex_body2(local, n)

    source = '''
body({0!r},start=8)
body({0!r},start=3,end=5)
body({0!r},end=8,start=6)
'''.split("\n")

    for e in source[1:-1]:
        print_(e.format(n), local)

## ----------------------------------------
def print_(source, local, mode="single"):
    print(">>>",source)
    eval(compile(source,"",mode),globals(),local)

## ========================================
s = "step"
DIR = [e for e in dir() if e.startswith(s)]
DIR = dict((i,e) for i,e in enumerate(DIR))
DIR = list(DIR.items()); DIR.sort()

def ex():
    n = (len(DIR)-1)//10+1
    for k,v in DIR:
        source = '''
x = eval("%%s.__doc__"%%v)
print("%%%dd: %%s -- %%s"%%(k,v,x))
'''%n
        eval(compile(source,"","exec"))

def do_all():
    for k,v in DIR: do(k)

def do(k=None):
    if k is None: ex(); return
    try:
        k,v = DIR[k]
        print(">>> #","-"*50,v)
        eval("%s()"%v)
    except IndexError:
        print("(x_x) too bad ... %s"%k)

## ----------------------------------------
from time import ctime
from sys import argv, version

def inform():
    n = 60
    print("="*n)
    print("Version: %s"%version.split("\n")[0])
    print("Module : %s"%argv[0].split("/")[-1])
    print("Date   : %s"%ctime())
    print("="*n)

## ----------------------------------------
from doctest import testmod

if __name__=='__main__':
    inform()
    testmod()

## ========================================

TOP


関連記事

Last updated♪2009/12/14