zoukankan      html  css  js  c++  java
  • 《Python核心编程》第二版第162页第六章练习 续六 Python核心编程答案自己做的

    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)

  • 相关阅读:
    [置顶] cocos2d-x 3.0游戏开发xcode5帅印博客教学 003.[HoldTail]游戏世界以及背景画面
    flex调用webservice中的datatable结果写入datagrid
    linux shell编程指南第十一章------------合并与分割2
    Java GUI使用exe4j打包exe文件
    最小生成树kruskal算法
    JQuery Datatable Ajax请求两次问题的解决
    其实我还好
    EFM32在使用IAR开发环境配置ICf文件以及指定程序存储地址空间
    hdu1151Air Raid
    UIWebview打开.txt文件中文乱码解决
  • 原文地址:https://www.cnblogs.com/balian/p/2070263.html
Copyright © 2011-2022 走看看