6-14.
随机数。设计一个“石头、剪子、布”游戏,有时又叫“Rochambeau”,你小时候可能玩过,下面是规则。你和你的对手,在同一时间做出特定的手势,必须是下面一种:石头、剪子、布。胜利者从下面的规则产生,这个规则本身是个悖论。
(a)布包石头。
(b)石头砸剪子。
(c)剪子剪破布。在你的计算机版本中,用户输入他/她的选项,计算机找一个随机选项,然后由你的程序来决定一个胜利者或者平手。注意,最好的算法是尽量少使用if语句。
【答案】
代码如下:
def showmenu():
    print '''
    (S)tone
    S(h)ears
    (C)loth
    (Q)uit
    '''
   
def computer_choice():
    import random
    return random.choice('shc')

def your_choice():
    input = raw_input('Please select your choice ...')
    return input.lower()
    # From www.cnblogs.com/balian/

def fight(your_input, computer_input):
    if your_input == computer_input: print 'Nobody Win.\n'
    elif your_input == 'c' and computer_input == 's': print 'You Win.\n'
    elif your_input == 's' and computer_input == 'h': print 'You Win.\n'
    elif your_input == 'h' and computer_input == 'c': print 'You Win.\n'
    else: print 'Sorry, Computer Win.\n'
   
CMDs = {'s': 'Stone', 'h': 'Shears', 'c': 'Cloth'}

run = True
while run:
    showmenu()
    your_input = your_choice()
    if your_input == 'q':
        print 'Game Over!'
        run = False
    else:
        computer_input = computer_choice()
        print 'Your have input %s.' % CMDs[your_input]
        print 'Computer have input %s.' % CMDs[computer_input]
        print 'the result is ... \n'
        fight(your_input, computer_input)
       
【参考】
python随机数、随机字符、随机字符串,来自http://hi.baidu.com/hzq_gyn/blog/item/24cd76c717fa70a48326acc1.html

import random
import string
#随机整数:
print random.randint(1,50)
#随机选取0到100间的偶数:
print random.randrange(0, 101, 2)
#随机浮点数:
print random.random()
print random.uniform(1, 10)
#随机字符:
print random.choice('abcdefghijklmnopqrstuvwxyz!@#$%^&*()')
#多个字符中选取特定数量的字符:
print random.sample('zyxwvutsrqponmlkjihgfedcba',5)
#多个字符中选取特定数量的字符组成新字符串:
print string.join(random.sample(['z','y','x','w','v','u','t','s','r','q','p','o','n','m','l','k','j','i','h','g','f','e','d','c','b','a'], 5)).replace(' ','')
#随机选取字符串:
print random.choice(['剪刀', '石头', '布'])
#打乱排序
items = [1, 2, 3, 4, 5, 6, 7, 8, 9, 0]
print random.shuffle(items)
 

6-15.
转换。
(a)给出两个可识别格式的日期,比如MM/DD/YY或者DD/MM/YY格式。计算出两个日期之间的天数。
(b)给出一个人的生日,计算此人从出生到现在的天数,包括所有的闰月。
(c)还是上面的例子,计算出此人下次过生日还有多少天。


【答案】
(a)代码如下:
def date_convert(date_input):
    month = int(date_input.split('/')[0])
    day   = int(date_input.split('/')[1])
    year  = int('20' + date_input.split('/')[2])
    return (year, month, day)

import datetime
date_input = raw_input('Please input the begin date, MM / DD / YY ... ')
d1 = datetime.date(date_convert(date_input)[0], date_convert(date_input)[1], date_convert(date_input)[2])
date_input = raw_input('Please input the end date, MM / DD / YY ... ')
d2 = datetime.date(date_convert(date_input)[0], date_convert(date_input)[1], date_convert(date_input)[2])
print (d2 - d1).days

(b)代码如下:
def date_convert(date_input):
    month = int(date_input.split('/')[0])
    day   = int(date_input.split('/')[1])
    year  = int(date_input.split('/')[2])
    return (year, month, day)

import datetime
date_input = raw_input('Please input his birthday, MM / DD / YYYY ... ')
d1 = datetime.date(date_convert(date_input)[0], date_convert(date_input)[1], date_convert(date_input)[2])
print (datetime.date.today() - d1).days


(c)代码如下:

def date_convert(date_input):
    month = int(date_input.split('/')[0])
    day   = int(date_input.split('/')[1])
    year  = int(date_input.split('/')[2])
    return (year, month, day)

import datetime
date_input = raw_input('Please input his birthday, MM / DD / YYYY ... ')

import time
next_year = int(time.strftime('%Y',time.localtime(time.time()))) + 1
next_birthday = datetime.date(next_year, date_convert(date_input)[1], date_convert(date_input)[2])
print (next_birthday - datetime.date.today()).days

【参考】
python 获取当前时间 (http://www.cnblogs.com/wanpython/archive/2010/08/07/1794598.html)
python 的常用时间操作,取得当前时间等 (http://blog.csdn.net/caisini_vc/archive/2010/05/24/5619954.aspx)
python 的内嵌time模板翻译及说明 (http://blog.csdn.net/kiki113/archive/2009/03/28/4033017.aspx)
Python构造日期对象和计算日期间天数差的问题(http://zhidao.baidu.com/question/177073017.html)

python时间模块time,日期模块datetime,格式化用strftime()

>>> import datetime
>>> help(datetime)查看2009年5月31日和2009年2月1日间隔多少天
>>> d1=datetime.date(2009,05,31)
>>> d2=datetime.date(2009,02,01)
>>> d1-d2
datetime.timedelta(119) // 可以看出2009年5月31日和2009年2月1日间隔为119天

计算日期之间的工作日(http://book.51cto.com/art/201005/198608.htm)
The datetime Module(http://effbot.org/librarybook/datetime.htm)

posted on 2011-06-03 07:22  balian  阅读(961)  评论(0编辑  收藏  举报