/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