zoukankan      html  css  js  c++  java
  • SimplePrograms

    # coding = utf-8
    # 1 line: Output
    print('Hello, world!')
    
    # 2 lines: Input, assignment
    #name = input('What is your name?
    ')
    name = 'Lius'
    print('Hi, %s.' % name)
    
    # 3 lines: For loop, built-in enumerate function, new style formatting
    friends = ['john', 'pat', 'gary', 'michael']
    for i, name in enumerate(friends):
        print("iteration {iteration} is {name}".format(iteration=i, name=name))
    
    # 4 lines: Fibonacci, tuple assignment
    parents, babies = (1, 1)
    while babies < 100:
        print('This generation has {0} babies'.format(babies))
        parents, babies = (babies, parents + babies)
    
    # 5 lines: Functions
    def greet(name):
        print('Hello', name)
    greet('Jack')
    greet('Jill')
    greet('Bob')
    
    # 6 lines: Import, regular expressions
    import re
    for test_string in ['555-1212', 'ILL-EGAL']:
        if re.match(r'^d{3}-d{4}$', test_string):
            print(test_string, 'is a valid US local phone number')
        else:
            print(test_string, 'rejected')
    
    # 7 lines: Dictionaries, generator expressions
    prices = {'apple': 0.40, 'banana': 0.50}
    my_purchase = {
        'apple': 1,
        'banana': 6
    }
    grocery_bill = sum(prices[fruit] * my_purchase[fruit]
                       for fruit in my_purchase)
    print('I owe the grocer $%.2f' % grocery_bill)
    
    # 8 lines: Command line arguments, exception handling
    # This program adds up integers in the command line
    import  sys
    try:
        total = sum(int(arg) for arg in sys.argv[1:])
        print('sum = ', total)
    except ValueError:
        print('Please supply integer arguments')
    
    # 9 lines: Opening files
    # indent your Python code to put into an email
    import glob
    # glob supports Unix style pathname extensions
    # python_files = glob.glob('*.py')
    # for file_name in sorted(python_files):
    #     print('    ------' + file_name)
    #
    #     with open(file_name,encoding='utf-8') as f:
    #         for line in f:
    #             print('     ' + line.rstrip())
    #     print()
    
    # 10 lines: Time, conditions, from..import, for..else
    from time import localtime
    activities = {8: 'Sleeping',
                  9: 'commuting',
                  17: 'Working',
                  18: 'Commuting',
                  20: 'Eating',
                  22: 'Resting' }
    time_now = localtime()
    hour = time_now.tm_hour
    for activity_time in sorted(activities.keys()):
        if hour < activity_time:
            print(activities[activity_time])
            break
    else:
        print('Unknown, AFK or sleeping!')
    
    # 11 lines: Triple-quoted strings, while loop
    REFRAIN = '''
    %d bottles of beer on the wall,
    %d bottles of beer,
    take one down, pass it around,
    %d bottles of beer on the wall!
    '''
    bottles_of_beer = 3
    while bottles_of_beer > 1:
        print(REFRAIN % (bottles_of_beer, bottles_of_beer, bottles_of_beer - 1))
        bottles_of_beer -= 1
    
    # 12 lines: Classes
    class BankAccount(object):
        def __init__(self, initial_balance=0):
            self.balance = initial_balance
        def deposit(self, amount):
            self.balance += amount
        def withdraw(self, amount):
            self.balance -= amount
        def overdrawn(self):
            return self.balance < 0
    my_account = BankAccount(15)
    my_account.withdraw(5)
    print(my_account.balance)
    
    # 13 lines: Unit testing with unittest
    import unittest
    def median(pool):
        copy = sorted(pool)
        size = len(copy)
        if size % 2 == 1:
            """
            list indices must be integers or slices, not float
            When you do x / y, an integer is returned in Python 2.x because the decimal is truncated
            (floor division).However in 3.x, the / operator performs 'true' division,resulting in a float
             instead of an integer (e.g. 1 / 2 = 0.5).Therefore you may first want to try using
              middle = (first + last) // 2, adjusting so that the result returns what you expect.
            """
            return copy[(size - 1) // 2]
        else:
            return (copy[size//2 - 1] + copy[size//2]) // 2
    class TestMedian(unittest.TestCase):
        def testMedian(self):
            self.failUnlessEqual(median([2, 9, 9, 7, 9, 2, 4, 5, 8]), 7)
    if __name__ == '__main__':
        unittest.main()
    
    # 14 lines: Doctest-based testing
    def median(pool):
        '''Statistical median to demonstrate doctest.
        >>> median([2, 9, 9, 7, 9, 2, 4, 5, 8])
        7
        '''
        copy = sorted(pool)
        size = len(copy)
        if size % 2 == 1:
            return copy[(size - 1) // 2]
        else:
            return (copy[size // 2 - 1] + copy[size // 2]) // 2
    if __name__ == '__main__':
        import doctest
        doctest.testmod()
    
    # 15 lines: itertools
    from itertools import groupby
    lines = '''
    This is the
    first paragraph.
    
    This is the second.
    '''.splitlines()
    # Use itertools.groupby and bool to return groups of consecutive lines that either have content or don't.
    for has_chars, frags in groupby(lines, bool):
        if has_chars:
            print(' '.join(frags))
    # PRINTS:
    # This is the first paragraph.
    # This is the second.
    
    # 16 lines: csv module, tuple unpacking, cmp() built-in
    import csv,operator
    # write stocks data as comma-separated values
    writer = csv.writer(open('stocks.csv', 'wb', buffering=0))
    writer.writerows([
        ('GOOG', 'Google, Inc.', 505.24, 0.47, 0.09),
        ('YHOO', 'Yahoo! Inc.', 27.38, 0.33, 1.22),
        ('CNET', 'CNET Networks, Inc.', 8.62, -0.13, -1.49)
    ])
    # read stocks data, print status messages
    # Python 3.X 的版本中已经没有 cmp 函数,如果你需要实现比较功能,需要引入 operator 模块
    stocks = csv.reader(open('stocks.csv', 'rb'))
    status_labels = {-1: 'down', 0: 'unchanged', 1: 'up'}
    for ticker, name, price, change, pct in stocks:
        status = status_labels[operator.eq(float(change), 0.0)]
        print('%s is %s (%s%%)' % (name, status, pct))
    
    # 18 lines: 8-Queens Problem(recursion)
    BOARD_SIZE = 8
    def under_attack(col, queens):
        left = right = col
        for r, c in reversed(queens):
            left, right = left - 1, right + 1
            if c in (left, col, right):
                return True
        return False
    def solve(n):
        if n == 0:
            return [[]]
        smaller_solutions = solve(n - 1)
        return [solution+[(n,i+1)]
            # xrange() 在Python3 中为 range()
            for i in range(BOARD_SIZE)
                for solution in smaller_solutions
                    if not under_attack(i+1, solution)]
    for answer in solve(BOARD_SIZE):
        print(answer)
    
    # 20 lines: Prime numbers sieve w/fancy generators
    import itertools
    def iter_primes():
        # an iterator of all numbers between 2 and +infinity
        numbers = itertools.count(2)
        # generate primes forever
        while True:
            # get the first number from the iterator (always a prime)
            prime = numbers.__next__()
            yield prime
            # this code iteratively builds up a chain of filters...slightly tricky, but ponder it a bit
            numbers = itertools.ifilter(prime.__rmod__, numbers)
    for p in iter_primes():
        if p > 1000:
            break
        print(p)
    
    # 21 lines: XML/HTML parsing(using Python 2.5 or third-party library)
    dinner_recipe = '''<html><body><table>
    <tr><th>amt</th><th>unit</th><th>item</th></tr>
    <tr><td>24</td><td>slices</td><td>baguette</td></tr>
    <tr><td>2+</td><td>tbsp</td><td>olive oil</td></tr>
    <tr><td>1</td><td>cup</td><td>tomatoes</td></tr>
    <tr><td>1</td><td>jar</td><td>pesto</td></tr>
    </table></body></html>'''
    # In Python 2.5 or from http://effbot.org/zone/element-index.htm
    import xml.etree.ElementTree as etree
    tree = etree.fromstring(dinner_recipe)
    # For invalid HTML use http://effbot.org/zone/element-soup.htm
    # import ElementSoup, StringIO
    # tree = ElementSoup.parse(StringIO.StringIO(dinner_recipe))
    pantry = set(['olive oil', 'pesto'])
    for ingredient in tree.getiterator('tr'):
        amt, unit, item = ingredient
        if item.tag == "td" and item.text not in pantry:
            print("%s: %s %s" % (item.text, amt.text, unit.text))
    
    # 28 lines: 8-Queens Problem(define your own exceptions)
    BOARD_SIZE = 8
    
    class BailOut(Exception):
        pass
    
    def validate(queens):
        left = right = col = queens[-1]
        for r in reversed(queens[:-1]):
            left, right = left-1, right+1
            if r in (left, col, right):
                raise BailOut
    
    def add_queen(queens):
        for i in range(BOARD_SIZE):
            test_queens = queens + [i]
            try:
                validate(test_queens)
                if len(test_queens) == BOARD_SIZE:
                    return test_queens
                else:
                    return add_queen(test_queens)
            except BailOut:
                pass
        raise BailOut
    
    queens = add_queen([])
    print (queens)
    print ("
    ".join(". "*q + "Q " + ". "*(BOARD_SIZE-q-1) for q in queens))
    
    # 33 lines: "Guess the Number" Game
    import random
    guesses_made = 0
    name = input('Hello! What is your name?
    ')
    
    number = random.randint(1, 20)
    print ('Well, {0}, I am thinking of a number between 1 and 20.'.format(name))
    
    while guesses_made < 6:
    
        guess = int(input('Take a guess: '))
    
        guesses_made += 1
    
        if guess < number:
            print ('Your guess is too low.')
    
        if guess > number:
            print ('Your guess is too high.')
    
        if guess == number:
            break
    
    if guess == number:
        print ('Good job, {0}! You guessed my number in {1} guesses!'.format(name, guesses_made))
    else:
        print ('Nope. The number I was thinking of was {0}'.format(number))
    
    
  • 相关阅读:
    mysql命令大全(转发)
    算法大神学习之路
    MYSQL之explain的作用与相关知识
    FastDFS(分布式存储系统)+nginx web 服务器
    获取用户浏览历史记录(django_redis)
    用户登陆装饰器和页面跳转(包含mixin的使用)
    .NET 方法回调
    asp.net viewstate 数据过大 导致错误
    asp.net viewstate 数据大导致错误
    软件测试 Record
  • 原文地址:https://www.cnblogs.com/liuliu3/p/6909669.html
Copyright © 2011-2022 走看看