/home_Python/note/Histo/Histo2.py

INDEX Python.use(better)

》作業中です《

#! /usr/bin/env python
# coding: utf-8
## ----------------------------------------
##
## (C) Copyright 2000-2010, 小粒ちゃん《監修》小泉ひよ子とタマゴ倶楽部
##
## ----------------------------------------
LINE = "-"*40
'''
% python3.0 histo.py 
---------------------------------------- for in str #0
---------------------------------------- for in str #1
---------------------------------------- for in iter #0
---------------------------------------- for in iter #1
---------------------------------------- Histogram #0
---------------------------------------- body #0
---------------------------------------- body #1
---------------------------------------- body #2
---------------------------------------- body #3
---------------------------------------- histogram #0
---------------------------------------- histogram #1
---------------------------------------- histogram #2
---------------------------------------- histogram #3
{'and': 2, 'elif': 0, 'or': 0, 'return': 2, 'for': 3, 'else': 2, 'print': 7, 'del': 1, 'in': 4, 'not': 3, 'import': 1, 'class': 1, 'def': 8, 'if': 7}
and   [2]..
elif  [0]
or    [0]
return[2]..
for   [3]...
else  [2]..
print [7]....+..
del   [1].
in    [4]....
not   [3]...
import[1].
class [1].
def   [8]....+...
if    [7]....+..
['and', 'class', 'def', 'del', 'elif', 'else', 'for', 'if', 'import', 'in', 'not', 'or', 'print', 'return']
and   [2]..
class [1].
def   [8]....+...
del   [1].
elif  [0]
else  [2]..
for   [3]...
if    [7]....+..
import[1].
in    [4]....
not   [3]...
or    [0]
print [7]....+..
return[2]..
'''

## ----------------------------------------
EX,THEME = 0,"for in str"
## ----------------------------------------
def ex():
    s = "ABC"
    i = 0
    while i<len(s):
        print("{0:d}: {1}".format(i, s[i]))
        i += 1
"""
---------------------------------------- for in str #0
0: A
1: B
2: C
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    

## ----------------------------------------
def ex():
    s = "ABC"
    for e in s:
        print(e)
"""
---------------------------------------- for in str #1
A
B
C
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    

## ----------------------------------------
EX,THEME = 0,"for in iter"
## ----------------------------------------
####def ex():
####    s = "ABC"
####    it = iter(s)
####    i = 0
####    while i<len(s):
####        print("{0:d}: {1}".format(i, it.next()))    # no-use
####        i += 1
"""
---------------------------------------- for in iter #0
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX += 1    

## ----------------------------------------
def ex():
    s = "ABC"
    it = iter(s)
    for e in it:
        print(e)
"""
---------------------------------------- for in iter #1
A
B
C
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX += 1    

## ----------------------------------------
EX,THEME = 0,"Histogram"
## ----------------------------------------
def scale(n, offset=1):
    s = ""
    for e in range(offset, n+1):
        c = "."
        if not e%10:
            c = str(e//10)
        elif not e%5:
            c = "+"
        s += c
    return s

from random import *
def ex():
    histo = {}
    for _ in range(100):
        n = randint(0, 9)
        histo[n] = histo.get(n, 0) + 1

    s = 0
    for k, v in histo.items():
        s += v
        print("{0:d}[{1:2d}]{2}".format(k, v, scale(v)))
    print(s)
"""
---------------------------------------- Histogram #0
0[ 6]....+.
1[ 6]....+.
2[12]....+....1..
3[12]....+....1..
4[13]....+....1...
5[12]....+....1..
6[16]....+....1....+.
7[ 8]....+...
8[ 3]...
9[12]....+....1..
100
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    

## ----------------------------------------
EX,THEME = 0,"body"
## ----------------------------------------
def body(name, start=1, end=None, number=True):
    s = open(name).readlines(); N = len(s)
    if not end: end = N+1 
    if number:
        for n, e in enumerate(s):
            s[n] = "{{0:{0}d: {1}}}".format(len(str(N))%(n+1, e))      
    return s[start-1:end]

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

def body(name, start=1, end=None):
    s, n = _body(name, start, end)
    format = "{{0:{0:d}d}}: {{1}}".format(len(str(n)))
    for i, e in enumerate(s):
        s[i] = format.format(start+i, e)
    return s
## ----------------------------------------
def ex():
    for e in body("queens.py", end=5):
        print(e,end="")
    print()
'''
---------------------------------------- body #0
 1: #! /usr/bin/env python
 2: 
 3: """N queens problem.
 4: 
 5: The (well-known) problem is due to Niklaus Wirth.

'''
##def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    
## ----------------------------------------
def ex():
    for e in body("queens.py", start=81):
        print(e,end="")
    print()
'''
---------------------------------------- body #1
81:     q.solve()
82:     print("Found", q.nfound, "solutions.")
83: 
84: if __name__ == "__main__":
85:     main()

'''
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    

## ----------------------------------------
def ex():
    for e in body("queens.py", 14, 18):
        print(e,end="")
    print()
'''
---------------------------------------- body #2
14: class Queens:
15: 
16:     def __init__(self, n=N):
17:         self.n = n
18:         self.reset()

'''
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    
## ----------------------------------------
def ex():
    for e in body("queens.py", 8, 12):
        print(e,end="")
    print()
'''
---------------------------------------- body #3
 8: a classic recursive backtracking approach.
 9: 
10: """
11: 
12: N = 8                                   # Default; command line overrides

'''
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    

## ----------------------------------------
EX,THEME = 0,"histogram"
## ----------------------------------------

def strip(string):
    s = ""
    for e in string:
        if e.isalpha():
            s += e
        else:
            s += " "
    return s

def strip(s):
    return "".join([(" ", e)[e.isalpha()] for e in s])

## ----------------------------------------
def ex():
    for e in body("queens.py"):
        print(strip(e))

####print(LINE,"%s #%d"%(THEME,EX));ex();EX += 1    
## ----------------------------------------
def ex():
    for e in body("queens.py", 14, 18):
        print(e,end="")
"""
---------------------------------------- histogram #0
14: class Queens:
15: 
16:     def __init__(self, n=N):
17:         self.n = n
18:         self.reset()
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    
## ----------------------------------------
def ex():
    for e in body("queens.py", 14, 18):
        print(strip(e))
"""
---------------------------------------- histogram #1
    class Queens  
     
        def   init   self  n N   
            self n   n 
            self reset   
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    

## ----------------------------------------

keywords = (
    "and",
    "class",
    "def",
    "del",
    "elif",
    "else",
    "for",
    "if",
    "import",
    "in",
    "not",
    "or",
    "print",
    "return",
    )

def ex():
    histo = {}
    for s in body("queens.py", 14, 18):
        for e in strip(s).split():
            for word in keywords:
                if e == word:
                    print(">>>",word); print(s)
                    histo[e] = histo.get(e, 0)+1
    print(histo)
"""
---------------------------------------- histogram #2
>>> class
14: class Queens:

>>> def
16:     def __init__(self, n=N):

{'class': 1, 'def': 1}
"""
def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX+=1    

## ----------------------------------------
def ex():
    histo = dict((e,0) for e in keywords)
    for s in open("queens.py"):
        for e in strip(s).split():
            for word in keywords:
                if e == word:
                    histo[e] = histo.get(e, 0)+1
    print(histo)
    format = "{{0:{0:d}}}[{{1:{1:d}d}}]{{2}}".format(
        max(len(e) for e in histo),
        len(str(max(histo.values()))),
        )
    for k,v in histo.items():
        print(format.format(k, v, scale(v)))
        
    keys = list(histo.keys()); keys.sort()
    print(keys)
    for k in keys:
        v = histo[k]
        print(format.format(k, v, scale(v)))

def ex(): pass
print(LINE,"%s #%d"%(THEME,EX));ex();EX += 1    

## ----------------------------------------
## ----------------------------------------
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()

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

Last updated♪2010/03/09