zoukankan      html  css  js  c++  java
  • 基础部分:《实战深度理解笔记》6产品思维

    大综合:【产品思维】

    实例1 【早中晚饭吃什么】

    A. 流程结构:time/random模块 /循环/判断

     1 ## 【早中晚饭吃什么】
     2 ##(1)time,random,判断,循环
     3 import random,time
     4 list=['鱼香','酸白菜','玉米','水果','酱爆','烧茄子']
     5 last=[]
     6 a=input('你要吃饭吗?吃就enter,不吃任意键:')
     7 if a=='':
     8     start=time.time() # 时间戳time.time(),1548730796.4549906
     9     start_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(start))
    10 ## 墙上时间time.strftime(time.localtime(time.time())),比如2019-1-29
    11 ## time.localtime(sta)  # 当地时间time.localtime(time.time()),非正式格式,运行如下:
    12 ## time.struct_time(tm_year=2019,tm_mon=1,tm_mday=29,tm_hour=10,tm_min=59,tm_sec=56,tm_wday=1,tm_yday=29,tm_isdst=0)
    13     b=random.sample(list,4)  # 在列表list里面选5个得到1个b=[]
    14     ## !!.choice() 得到1个str会重复/.sample()得到1个list,独立不重复
    15     for i in range(len(b)):
    16         c=input('你想吃'+b[i]+'吗?吃就enter,不吃任意键:')
    17         if c=='':
    18             last.append(b[i])
    19             print('已添加进点餐单!')
    20             time.sleep(1)
    21         else:
    22             print('这道菜很有营养呦~下次吃')
    23             time.sleep(1)
    24     print('
    您点的餐有:', end='')
    25     food=','.join(last)  # 【取出[]里面的str】
    26     print(food)
    27     time.sleep(1)
    28     end=time.time()
    29     end_time=time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(end))
    30     print('您进店的时间是:'+start_time)
    31     print('您的下单时间是:'+end_time)
    32     print('您可以用餐2h,enjoy you time! ')
    33 else:
    34     print('还是少吃点吧,不按时吃饭对胃不好~
    ')

     B. 类/对象函数

     1 ##(2)类/对象
     2 import random,time
     3 class Foodlist():
     4     def __init__(self):
     5         self.x=['鱼香', '酸白菜', '玉米', '水果', '酱爆', '烧茄子']
     6         self.a = input('你要吃饭吗?吃就enter,不吃任意键:')
     7     def order(self):
     8         last = []
     9         b = random.sample(self.x, 4)  # 在列表list里面选5个得到1个b=[]
    10  ## !!.choice() 得到1个str会重复/.sample()得到1个list,独立不重复
    11         for i in range(len(b)):
    12             c = input('你想吃' + b[i] + '吗?吃就enter,不吃任意键:')
    13             if c == '':
    14                 last.append(b[i])
    15                 print('已添加进点餐单!')
    16                 time.sleep(1)
    17             else:
    18                 print('这道菜很有营养呦~下次吃')
    19                 time.sleep(1)
    20         print('
    您点的餐有:', end='')
    21         food = ','.join(last)  # 【取出[]里面的str】
    22         print(food)
    23         time.sleep(1)
    24     def staa(self):
    25         start = time.time()  # 时间戳time.time(),1548730796.4549906
    26         self.start_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(start))
    27  ## 墙上时间time.strftime(time.localtime(time.time())),比如2019-1-29
    28  ## time.localtime(sta)  # 当地时间time.localtime(time.time()),非正式格式,运行如下:
    29  ## time.struct_time(tm_year=2019,tm_mon=1,tm_mday=29,tm_hour=10,tm_min=59,tm_sec=56,tm_wday=1,tm_yday=29,tm_isdst=0)
    30     def endd(self):
    31         end = time.time()
    32         self.end_time = time.strftime('%Y-%m-%d %H:%M:%S', time.localtime(end))
    33     def congra(self):
    34         print('您进店的时间是:' + self.start_time)
    35         print('您的下单时间是:' + self.end_time)
    36         print('您可以用餐2h,enjoy you time!
     ')
    37 chi=Foodlist()    # 实例化对象
    38 
    39 if chi.a=='':
    40     chi.staa()   # 进店时间
    41     chi.order()  # 选餐
    42     chi.endd()   # 下单时间
    43     chi.congra() # 结束语
    44 else:
    45     print('还是少吃点吧,不按时吃饭对胃不好~
    ')

      

    实例2 【锦绣花园6栋.csv】

     1 ## 2.类、对象
     2 import csv,time
     3 ## (1)填写表头
     4 with open('sample/锦秀花园6栋.csv','w',newline='') as a:
     5     b=csv.writer(a)
     6     head=['小区','地址','建筑年份','楼栋','单元','户室','面积','朝向']
     7     b.writerow(head)
     8 
     9 ## (2)可以循环利用的有:
    10 ## '小区','地址','建筑年份','楼栋'
    11 ## 1栋楼-x单元1楼的'户室y01-y04','面积','朝向'
    12 name='锦绣花园'
    13 add='深圳市南山区粤海街道'
    14 year='2015'
    15 dong='6栋'
    16 danyuan=int(input('6栋-单元数(1-4):'))
    17 
    18 ## (3)遍历1栋楼的所有住户信息+录入:所有单元-起始楼层-每个户室(面积,朝向)
    19 class Sixdong():
    20     def __init__(self):
    21         self.sf = int(input('起始楼层(3):'))
    22         self.ef = int(input('终止楼层(5):'))
    23         self.unit = {}  # 6栋所有单元+所有楼层:{单元:{楼层:{户室:'朝向,面积'},,,},,,}
    24 
    25     ### A. 单元循环
    26     def dy_loop(self):
    27         for i in range(danyuan):
    28             print('
    第%d单元信息:' % (i + 1))
    29             judge = input('判断起始楼层尾号:<01,02>?是请enter,否任意键:')
    30             if judge == '':
    31                 # sfe=input('起始楼层尾号(01-04,逗号分开):') # 01,02
    32                 # sf_e=sfe.split(',')   #['01','02']
    33                 sf_e = ['01', '02']
    34             else:
    35                 sf_e = ['01', '02', '03', '04']
    36 
    37     ### B. 起始3楼户室循环,录入模板
    38             data0 = {}  # {户室:'朝向,面积',,,}
    39             unit0 = {}  # {楼层:{户室:'朝向,面积'},,,}
    40             for ii in sf_e:
    41                 sf_hushi = int(str(self.sf) + ii)
    42                 area = int(input(str(sf_hushi) + '面积:'))
    43                 direct = int(input(str(sf_hushi) + '朝向(1.南北 2.东西):'))
    44                 data0[sf_hushi] = [area, direct]  # 3楼{301:[80,2], 302:[80,2]}
    45                 unit0[self.sf] = data0  # 3楼{3:{301:[80,2], 302:[80,2]}}
    46                 self.unit[i + 1] = unit0  # 1单元3楼{1:{3:{301:[80,2], 302:[80,2]}}}
    47             print('
    第%d单元-起始户室(3)data0=:' % (i + 1), end='')
    48             print(data0)  # 3楼{301:[80,2], 302:[80,2]}
    49             print('起始楼层-户室(3)unit0=:', end='')
    50             print(unit0)  # 3楼{3:{301:[80,2], 302:[80,2]}}
    51             print('第%d单元-起始楼层-户室(3)unit=:' % (i + 1), end='')
    52             print(self.unit)  # 1单元3楼{1:{3:{301:[80,2], 302:[80,2]}}}
    53             time.sleep(1)
    54 
    55     ### C. 参照起始楼层3楼循环,把4-5楼填满   #{401:[80,2], 402:[80,2]}
    56             for mf in range(self.sf + 1, self.ef + 1):  # a. 所有楼层循环(4,6)
    57                 data1 = {}  # 中间变量
    58                 unit1 = {}  # 中间变量
    59                 for iii in sf_e:  # b. 每楼层户室循环
    60                     hushi = int(str(mf) + iii)
    61                     data1[hushi] = [area, direct]
    62                     unit1[mf] = data1
    63                 unit0[mf] = data1
    64                 self.unit[i + 1] = unit0
    65             print('
    第%d单元 顶楼data1=:' % (i + 1), end='')
    66             print(data1)  # {501: [70, 1], 502: [70, 1]}
    67             print('所有楼层-户室unit0=:', end='')
    68             print(unit0)
    69             # {3:{301:[70,1],302:[70,1]}, 4:{}, 5:{}}
    70             print('所有单元-所有楼层-户室unit=:', end='')
    71             print(self.unit)
    72             # {1:{3:{},4:{},5:{},  2:{3:{},4:{},5:{}}
    73 
    74     ## (4)输出内容,存放到.csv
    75             for sub_dict in unit0.values():
    76                 # 3,4,5的值 {301:[70, 1], 302:[70, 1]}
    77                 for j, jj in sub_dict.items():
    78                     ## 301:[70, 1], 302:[70, 1]
    79                     q = ['南北', '东西']
    80                     jj[1] = q[(jj[1] - 1)]
    81                     print('单元:%d 户室:%d 面积:%d 朝向:%s' % (i + 1, j, jj[0], jj[1]))
    82                     w = name + ' ' + add + ' ' + year + ' ' + dong + ' ' + str(i + 1)
    83                         + ' ' + str(j) + ' ' + str(jj[0]) + ' ' + jj[1]
    84                     print(w)
    85                     record = w.split(' ')  # ['2', '301', '80', '东西']
    86                     print(record)
    87                     with open('sample/锦秀花园6栋1.csv', 'a+', newline='') as f:
    88                         b = csv.writer(f)
    89                         b.writerow(record)
    90         print('
    叮咚!excel录入工作完成,撒花~~')
    91 auto=Sixdong()  # 实例化
    92 print(auto.sf)
    93 print(auto.ef)
    94 auto.dy_loop()

     

    实例3 【血量游戏】

    A. 项目1(for/while/if)

    Aa. 全封装函数def-- 函数的同级调用:函数名(a,b,...)

     1 ## (2)全封装函数def
     2 # -- 函数的同级调用:函数名(a,b,...)
     3 import time,random
     4 def show(a_life,a_attack,b_life,b_attack):
     5     print('【玩家】 血量:%s 攻击:%s' % (a_life,a_attack))
     6     time.sleep(1)
     7     print('【敌人】 血量:%s 攻击:%s' % (b_life,b_attack))
     8     time.sleep(1)
     9     pk(a_life,a_attack,b_life,b_attack)     ## 同级调用pk()
    10 def pk(a_life,a_attack,b_life,b_attack):
    11     k=0
    12     while a_life > 0 and b_life > 0:     # 指不定pk几次
    13         a_life = a_life-b_attack
    14         b_life = b_life-a_attack
    15         k = k + 1
    16         print('---------------第%d局--------------------'%k)
    17         print('你发起了攻击,【敌人】剩余血量%s' % b_life)
    18         if b_life>0:
    19             print('敌人向你发起了攻击,【玩家】剩余血量%s' % a_life)
    20             time.sleep(1)
    21             continue
    22         else:
    23             a_life=a_life + b_attack
    24             print('敌人死了,【玩家】最终剩余血量%s' % (a_life))
    25             break
    26     result(a_life, b_life)  ## 同级调用result()
    27 def result(a_life, b_life):
    28     if a_life> 0 and b_life <= 0:
    29         print('----------------------------------------')
    30         print('you win!')
    31     elif a_life<=0 and b_life>0:
    32         print('----------------------------------------')
    33         print('you lose~')
    34     else:
    35         print('----------------------------------------')
    36         print('平局!')
    37 ## 主函数
    38 def main():
    39     a_life = random.randint(100, 150)
    40     a_attack = random.randint(30, 50)
    41     b_life = random.randint(100, 150)
    42     b_attack = random.randint(30, 50)
    43     show(a_life,a_attack,b_life,b_attack)
    44   ## pk()已经在show()里面调用了!!
    45   ## result()已经在pk()里面调用了!!
    46 main()  # 调用,开始跑程序

     Ab. 封装成类class-函数def -- 类函数的同级调用:self.函数名(a,b,...)

    #  注意def时第一个位置是self:函数名(self,a,b,...)

     1 ### 项目1    V2.0小课
     2 ## (3)封装成类class-函数def
     3 # -- 类函数的同级调用:self.函数名(a,b,...)
     4 #  注意def时第一个位置是self:函数名(self,a,b,...)
     5 import time,random
     6 class Pk():
     7     def __init__(self):
     8         self.a_life = random.randint(100, 150)
     9         self.a_attack = random.randint(30, 50)
    10         self.b_life = random.randint(100, 150)
    11         self.b_attack = random.randint(30, 50)
    12     def show(self):
    13         print('【玩家】 血量:%s 攻击:%s' % (self.a_life,self.a_attack))
    14         time.sleep(1)
    15         print('【敌人】 血量:%s 攻击:%s' % (self.b_life,self.b_attack))
    16         time.sleep(1)
    17         self.pk(self.a_life, self.b_life)  ## 同级调用pk()
    18     def pk(self,a_life,b_life):
    19         k=0
    20         while a_life > 0 and b_life > 0:
    21             a_life= a_life-self.b_attack
    22             b_life= b_life-self.a_attack
    23             k = k + 1
    24             print('---------------第%d局--------------------' % k)
    25             print('你发起了攻击,【敌人】剩余血量%s' % b_life)
    26             if b_life > 0:
    27                 print('敌人向你发起了攻击,【玩家】剩余血量%s' % a_life)
    28                 time.sleep(1)
    29                 continue
    30             else:
    31                 a_life = a_life + self.b_attack
    32                 print('敌人死了,【玩家】最终剩余血量%s' % (a_life))
    33                 break
    34         self.result(a_life,b_life)    ## 同级调用result()
    35     def result(self,a_life,b_life):
    36         if a_life > 0 and b_life <= 0:
    37             print('----------------------------------------')
    38             print('you win!')
    39         elif a_life <= 0 and b_life > 0:
    40             print('----------------------------------------')
    41             print('you lose~')
    42         else:
    43             print('----------------------------------------')
    44             print('平局!')
    45 game=Pk() # 实例化
    46 game.__init__()  # 随机产生
    47 game.show()  ## 里面同级调用pk()result()
    48 ## 不用写game.pk() game.result()

     

    B. 项目2(类class/函数def)

    Ba封装成-函数def

     1 ### 项目2
     2 ## 2. 全封装函数def -- 函数的同级调用:函数名(a,b,...)
     3 
     4 import random,time
     5 ## (1) 设定角色信息:生成展示排序
     6 def set():
     7 ### 我方
     8     a_choice=  ['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
     9     a_players=random.sample(a_choice,3) #['【独行剑客】', '【格斗大师】', '【森林箭手】']
    10     a={}   #{角色:[血量,攻击力],,,}
    11     for i in range(3):
    12         a_li = random.randint(100, 150)
    13         a_at = random.randint(30, 50)
    14         a[a_players[i]]=[a_li,a_at]   #{角色:[血量,攻击力],,,}
    15 #### 敌方
    16     b_choice= ['【暗黑战士】','【黑暗弩手】','【骷髅骑士】','【嗜血刀客】','【首席刺客】','【陷阱之王】']
    17     b_players=random.sample(b_choice,3)
    18     b={}
    19     for i in range(3):
    20         b_li = random.randint(100, 150)
    21         b_at = random.randint(30, 50)
    22         b[b_players[i]]=[b_li,b_at]
    23 #### 展示
    24     print('--------------------【角色信息】----------------------')
    25     print('我的人物:
    ',end='')
    26     for i0,j0 in a.items():  # 取字典的键:值
    27         a_name=i0
    28         a_life=j0[0]
    29         a_attack=j0[1]
    30         print('%s 血量:%d 攻击力:%d'%(a_name,a_life,a_attack))
    31     time.sleep(1)
    32     print('------------------------------------------------------')
    33     print('电脑敌人:
    ',end='')
    34     di=[]        # 敌方出场顺序
    35     for i1,j1 in b.items():  # 取字典的键:值
    36         di.append(i1)
    37         b_name=i1
    38         b_life=j1[0]
    39         b_attack=j1[1]
    40         print('%s 血量:%d 攻击力:%d' % (b_name, b_life, b_attack))
    41     time.sleep(1)
    42 #### 排序
    43     print('
    --------------------【出场顺序】----------------------')
    44     wo=['','','']
    45     for i0,j0 in a.items():  # 取字典的键:值
    46      ## 重点!!
    47         x=int(input('你想将%s放在第x个上场(x=1,2,3):'%i0))
    48         wo[x-1]=(i0)  # 将i0放到wo的第(x-1)的位置
    49     print('
    我方角色出场顺序:%s%s%s'%(wo[0],wo[1],wo[2]))
    50     print('敌方角色出场顺序:%s%s%s'%(di[0],di[1],di[2]))
    51     time.sleep(1)
    52     pk(a,b,wo,di)  # 同级调用
    53 
    54 ## (2) 3vs3 过程
    55 def pk(a,b,wo,di):
    56     for k in range(3):     # 角色只有3个,一共3局
    57         print('
    ---------------------【第%d局】----------------------'%(k+1))
    58         print('我方角色%s VS 敌方角色%s'%(wo[k],di[k]))
    59         wo_value=a[wo[k]]   # [血量,攻击力]
    60         a_life=wo_value[0]   # 血量
    61         a_attack=wo_value[1] # 攻击力
    62         print('%s 血量:%d 攻击力:%d'%(wo[k],a_life,a_attack))
    63         di_value=b[di[k]]   # [血量,攻击力]
    64         b_life=di_value[0]   # 血量
    65         b_attack=di_value[1] # 攻击力
    66         print('%s 血量:%d 攻击力:%d'%(di[k],b_life,b_attack))
    67         print('------------------------------------------------------')
    68         input('请按enter继续:')
    69      ## 单局战果
    70         a_mark=0 # 记分牌
    71         b_mark=0
    72         while a_life > 0 and b_life > 0:  # 每1局指不定pk几次
    73             b_life = b_life-a_attack
    74             print('%s发起了攻击,%s剩余血量%s'%(wo[k],di[k],b_life))
    75             if b_life>0:
    76                 a_life = a_life - b_attack
    77                 print('%s发起了攻击,%s剩余血量%s' % (di[k], wo[k], a_life))
    78                 time.sleep(1)
    79                 if a_life>0:
    80                     time.sleep(1)
    81                     continue
    82                 else:
    83                     b_mark=b_mark+1  # 单局结果计分
    84                     print('我死了,%s最终剩余血量%s' % (di[k], b_life))
    85             else:
    86                 a_mark=a_mark+1     # 单局结果计分
    87                 print('敌人死了,%s最终剩余血量%s' %(wo[k],a_life))
    88     result(a_mark,b_mark)  # 同级调用
    89 
    90 ## (3) 游戏结局
    91 def result(a_mark,b_mark):
    92     print('------------最终结果--------------')
    93     if a_mark>b_mark:
    94         print('you win!撒花~】')
    95     elif a_mark<b_mark:
    96         print('好遗憾,you lose~】')
    97     else:
    98         print('哇,实力不相上下,平局!】')
    99 set()  # 启动程序

     

    Bb. 封装成类class-函数def

      1 ### 项目2
      2 ## 3. 封装成类class-函数def -- 类函数的同级调用:self.函数名(a,b,...)
      3 #  注意def时第一个位置是self:函数名(self,a,b,...)
      4 
      5 import random,time
      6 class Game():
      7     def __init__(self):   # 原始函数里面不能同级调用,它没有同级
      8         self.a_choice=  ['【狂血战士】','【森林箭手】','【光明骑士】','【独行剑客】','【格斗大师】','【枪弹专家】']
      9         self.b_choice = ['【暗黑战士】', '【黑暗弩手】', '【骷髅骑士】', '【嗜血刀客】', '【首席刺客】', '【陷阱之王】']
     10 
     11 ## (1) 设定角色信息:生成展示排序
     12     def set(self):
     13     ### 我方
     14         a_players=random.sample(self.a_choice,3) #['【独行剑客】', '【格斗大师】', '【森林箭手】']
     15         a={}   #{角色:[血量,攻击力],,,}
     16         for i in range(3):
     17             a_li = random.randint(100, 150)
     18             a_at = random.randint(30, 50)
     19             a[a_players[i]]=[a_li,a_at] #{角色:[血量,攻击力],,,}
     20     #### 敌方
     21         b_players=random.sample(self.b_choice,3)
     22         b={}
     23         for i in range(3):
     24             b_li = random.randint(100, 150)
     25             b_at = random.randint(30, 50)
     26             b[b_players[i]]=[b_li,b_at]
     27         self.show(a,b)    # 类函数同级调用一定要加self.!!
     28 
     29     def show(self,a,b):
     30     #### 展示
     31         print('--------------------【角色信息】----------------------')
     32         print('我的人物:
    ',end='')
     33         for i0,j0 in a.items():  # 取字典的键:值
     34             a_name=i0
     35             a_life=j0[0]
     36             a_attack=j0[1]
     37             print('%s 血量:%d 攻击力:%d'%(a_name,a_life,a_attack))
     38         time.sleep(1)
     39         print('------------------------------------------------------')
     40         print('电脑敌人:
    ',end='')
     41         di=[]        # 敌方出场顺序
     42         for i1,j1 in b.items():  # 取字典的键:值
     43             di.append(i1)
     44             b_name=i1
     45             b_life=j1[0]
     46             b_attack=j1[1]
     47             print('%s 血量:%d 攻击力:%d' % (b_name, b_life, b_attack))
     48         time.sleep(1)
     49     #### 排序
     50         print('
    --------------------【出场顺序】----------------------')
     51         wo=['','','']
     52         for i0,j0 in a.items():  # 取字典的键:值
     53          ## 重点!!
     54             x=int(input('你想将%s放在第x个上场(x=1,2,3):'%i0))
     55             wo[x-1]=(i0)  # 将i0放到wo的第(x-1)的位置
     56         print('
    我方角色出场顺序:%s%s%s'%(wo[0],wo[1],wo[2]))
     57         print('敌方角色出场顺序:%s%s%s'%(di[0],di[1],di[2]))
     58         time.sleep(1)
     59         self.pk(a,b,wo,di)   # 类函数同级调用一定要加self.!!
     60 
     61     ## (2) 3vs3 过程
     62     def pk(self,a,b,wo,di):
     63         for k in range(3):     # 角色只有3个,一共3局
     64             print('
    ---------------------【第%d局】----------------------'%(k+1))
     65             print('我方角色%s VS 敌方角色%s'%(wo[k],di[k]))
     66             wo_value=a[wo[k]]   # [血量,攻击力]
     67             a_life=wo_value[0]   # 血量
     68             a_attack=wo_value[1] # 攻击力
     69             print('%s 血量:%d 攻击力:%d'%(wo[k],a_life,a_attack))
     70             di_value=b[di[k]]   # [血量,攻击力]
     71             b_life=di_value[0]   # 血量
     72             b_attack=di_value[1] # 攻击力
     73             print('%s 血量:%d 攻击力:%d'%(di[k],b_life,b_attack))
     74             print('------------------------------------------------------')
     75             input('请按enter继续:')
     76          ## 单局战果
     77             a_mark=0 # 记分牌
     78             b_mark=0
     79             while a_life > 0 and b_life > 0:  # 每1局指不定pk几次
     80                 b_life = b_life-a_attack
     81                 print('%s发起了攻击,%s剩余血量%s'%(wo[k],di[k],b_life))
     82                 if b_life>0:
     83                     a_life = a_life - b_attack
     84                     print('%s发起了攻击,%s剩余血量%s' % (di[k], wo[k], a_life))
     85                     time.sleep(1)
     86                     if a_life>0:
     87                         time.sleep(1)
     88                         continue
     89                     else:
     90                         b_mark=b_mark+1  # 单局结果计分
     91                         print('我死了,%s最终剩余血量%s' % (di[k], b_life))
     92                 else:
     93                     a_mark=a_mark+1     # 单局结果计分
     94                     print('敌人死了,%s最终剩余血量%s' %(wo[k],a_life))
     95         self.result(a_mark,b_mark)  # 类函数同级调用一定要加self.!!
     96 
     97     ## (3) 游戏结局
     98     def result(self,a_mark,b_mark):
     99         print('------------最终结果--------------')
    100         if a_mark>b_mark:
    101             print('you win!撒花~】')
    102         elif a_mark<b_mark:
    103             print('好遗憾,you lose~】')
    104         else:
    105             print('哇,实力不相上下,平局!】')
    106 start=Game()  # 实例化
    107 start.__init__()  # 启动程序
    108 start.set()

     

     

    C. 项目3(角色克制)

    【类对象的2种用法(1)类作为函数包 (class里面很多def)  (2)类作为实例模板 (继承、调用)

    Ca封装成-函数def

      1 ### 项目3
      2 import random,time
      3 def start():
      4     print('---------------欢迎来到“炼狱角斗场”----------------')
      5     time.sleep(1)
      6     words='''在昔日的黄昏山脉,奥卡帝国的北境边界上,有传说中的“炼狱角斗场”
      7 '献血与战斗是角斗士的归宿,金钱与荣耀是角斗士的信仰!
      8 今日,只要【你的队伍】能取得胜利,你将获得一笔够花500年的财富
      9 将随机生成【你的队伍】和【敌人队伍】!'''
     10     for i in words:
     11         print(i,end='')   # 在python软件中是一个字一个字输出的
     12     time.sleep(1)
     13     print('
    狭路相逢勇者胜,请按enter继续~')
     14 
     15 ## (1) 设定角色信息:生成展示排序
     16 def set():
     17     print('--------------------【角色信息】----------------------')
     18     print('我的人物:')
     19 ### 我方
     20     a = {}   #{(127, 40): '【暗影刺客】', (114, 47): '【精灵弩手】', (139, 33): '【暗影刺客】'}
     21     k = 0
     22     for i in range(3):
     23         name = random.choice(['【暗影刺客】', '【精灵弩手】', '【圣光骑士】'])
     24         a_li = random.randint(100, 150)
     25         a_at = random.randint(30, 50)
     26         if name == '【暗影刺客】':  # 每个角色血量、攻击力都不一样
     27             k0 = 3
     28             k1 = 5
     29         elif name == '【精灵弩手】':
     30             k0 = 4
     31             k1 = 4
     32         else:
     33             k0 = 5
     34             k1 = 3
     35     ## 重点!!若写成a[y]=[a_li,a_at]出现相同的y会覆盖
     36         a[k0*a_li, k1*a_at] = name
     37         print('%s 血量:%d 攻击力:%d'%(name, k0*a_li, k1*a_at))
     38     time.sleep(1)
     39 
     40     print('------------------------------------------------------')
     41     print('电脑敌人:')
     42 #### 敌方
     43     b = {}
     44     k = 0
     45     for i in range(3):
     46         b_name= random.choice(['【暗影刺客】', '【精灵弩手】', '【圣光骑士】'])
     47         b_li = random.randint(100, 150)
     48         b_at = random.randint(30, 50)
     49         ## 重点!!若写成a[y]=[a_li,a_at]出现相同的y会覆盖
     50         if b_name == '【暗影刺客】':
     51             k0 = 3
     52             k1 = 5
     53         elif b_name == '【精灵弩手】':
     54             k0 = 4
     55             k1 = 4
     56         else:
     57             k0 = 5
     58             k1 = 3
     59         b[k0*b_li, k1*b_at] = b_name
     60         print('%s 血量:%d 攻击力:%d' %(b_name, k0*b_li, k1*b_at))
     61     time.sleep(1)
     62     order(a, b)
     63 
     64 #### 排序
     65 def order(a, b):
     66     print('
    --------------------【出场顺序】----------------------')
     67 ## 重点!! 变成 列表嵌套元组list[tuple,,]=[(key:val),,,]一一对应排序
     68     a=sorted(a.items())  # 列表嵌套元组[( (血量,攻击力): 人物 ),(),()]
     69     b=sorted(b.items())
     70     for i in range(3):
     71         a_name = a[i][1]        # 人物
     72         b_name=b[i][1]
     73     #    a_life = a[i][0][0]    # 血量
     74     #    a_attack = a[i][0][1]  # 攻击力
     75         x = int(input('你想将%s放在第x个上场(x=1,2,3):' % a_name))
     76     #  x是按血量大小问的!!
     77         a[i]=a[x-1]   #a 是排序后的 列表嵌套元组[(),(),,,]
     78     print('
    我方角色出场顺序:%s%s%s' % (a[0][1], a[1][1],a[2][1]))
     79     print('敌方角色出场顺序:%s%s%s' % (b[0][1], b[1][1],b[2][1]))
     80     time.sleep(1)
     81     pk(a,b) # 同级调用
     82 
     83 ## (2) 3vs3 过程
     84 def pk(a,b):
     85     for k in range(3):     # 角色只有3个,一共3局
     86     # 我方
     87         a_name = a[k][1]  # 人物
     88         a_life = a[k][0][0]  # 血量
     89         a_attack = a[k][0][1]  # 攻击力
     90     #敌方
     91         b_name = b[k][1]  # 人物
     92         b_life = b[k][0][0]  # 血量
     93         b_attack = b[k][0][1]  # 攻击力
     94         print('
    ---------------------【第%d局】----------------------'%(k+1))
     95         print('我方角色%s VS 敌方角色%s'%(a_name,b_name))
     96         print('%s 血量:%d 攻击力:%d'%(a_name,a_life,a_attack))
     97         print('%s 血量:%d 攻击力:%d'%(b_name,b_life,b_attack))
     98         print('------------------------------------------------------')
     99         input('请按enter继续:')
    100      ## 单局战果
    101         a_mark=0 # 记分牌
    102         b_mark=0
    103         while a_life > 0 and b_life > 0:  # 每1局指不定pk几次
    104             b_life = b_life-a_attack
    105             print('%s发起了攻击,%s剩余血量%s'%(a_name,b_name,b_life))
    106             if b_life>0:
    107                 a_life = a_life - b_attack
    108                 print('%s发起了攻击,%s剩余血量%s' % (b_name,a_name, a_life))
    109                 time.sleep(1)
    110                 if a_life>0:
    111                     time.sleep(1)
    112                     continue
    113                 else:
    114                     b_mark=b_mark+1  # 单局结果计分
    115                     print('我死了,%s最终剩余血量%s' % (b_name, b_life))
    116             else:
    117                 a_mark=a_mark+1     # 单局结果计分
    118                 print('敌人死了,%s最终剩余血量%s' %(a_name,a_life))
    119     time.sleep(1)
    120     result(a_mark,b_mark) # 同级调用
    121 
    122 ## (3) 游戏结局
    123 def result(a_mark,b_mark):
    124     print('------------最终结果--------------')
    125     if a_mark>b_mark:
    126         print('you win!撒花~】')
    127     elif a_mark<b_mark:
    128         print('好遗憾,you lose~】')
    129     else:
    130         print('哇,实力不相上下,平局!】')
    131 start() # 启动程序
    132 set()  # 启动程序

     

    Cb. 封装成类class-函数def

      1 ### 项目3
      2 ##【类对象的2种用法】
      3 ##(1)类作为 函数包 (class里面很多def)
      4 ##(2)类作为 实例模板 (继承、调用)
      5 import random,time
      6 # 创建一个类,可实例化成具体的游戏角色
      7 class Role():
      8     def __init__(self, name='【角色】'):  # 把角色名作为默认参数
      9         self.name = name
     10         self.life = random.randint(100, 150)
     11         self.attack = random.randint(30, 50)
     12 # 创建三个子类,可实例化为3个不同类型的角色
     13 class Knight(Role):
     14     def __init__(self, name='【圣光骑士】'):  # 把子类角色名作为默认参数
     15         Role.__init__(self, name)  # 利用了父类的初始化函数
     16         self.life = self.life * 5  # 骑士有5份血量
     17         self.attack = self.attack * 3  # 骑士有3份攻击力
     18 # 职业克制关系
     19     def fight_buff(self,opponent,str1, str2):
     20         if opponent.name=='【暗影刺客】':
     21             self.attack=int(1.5*self.attack)
     22             print('『%s』【圣光骑士】对 『%s』【暗影刺客】说:“让无尽光芒制裁你的堕落!”' % (str1, str2))
     23 
     24 class Assassin(Role):
     25     def __init__(self, name='【暗影刺客】'):
     26         Role.__init__(self, name)
     27         self.life = self.life * 3
     28         self.attack = self.attack * 5
     29     def fight_buff(self,opponent,str1,str2):
     30         if opponent.name=='【精灵弩手】':
     31             self.attack=int(1.5*self.attack)
     32             print('『%s』【暗影刺客】对 『%s』【精灵弩手】说:“主动找死,就别怪我心狠手辣。”' % (str1, str2))
     33 
     34 class Bowman(Role):
     35     def __init__(self, name='【精灵弩手】'):
     36         Role.__init__(self, name)
     37         self.life = self.life * 4
     38         self.attack = self.attack * 4
     39     def fight_buff(self,opponent,str1,str2):
     40         if opponent.name=='【圣光骑士】':
     41             self.attack=int(1.5*self.attack)
     42             print('『%s』【精灵弩手】对 『%s』【圣光骑士】说:“骑着倔驴又如何?你都碰不到我衣服。”' % (str1, str2))
     43 
     44 # 创建一个类,可生成3V3并展示:可分为:欢迎语→随机生成→展示角色
     45 class Game:
     46     def __init__(self):
     47         # 初始化各种变量
     48         self.players = []  # 存玩家顺序
     49         self.enemies = []  # 存敌人顺序
     50         self.score = 0  # 比赛积分
     51         self.i = 0  # 记轮次
     52         # 执行各种游戏函数
     53         self.game_start()  # 欢迎语
     54         self.born_role()   # 随机生成6个角色
     55         self.show_role()   # 展示角色
     56         self.order_role()  # 排序并展示
     57         self.pk_role()     # 让双方 Pk 并展示结果
     58         self.show_result() # 展示最终结局
     59 # 欢迎语
     60     def game_start(self):
     61         print('---------------欢迎来到“炼狱角斗场”----------------')
     62         time.sleep(1)
     63         words = '''在昔日的黄昏山脉,奥卡帝国的北境边界上,有传说中的“炼狱角斗场”
     64 献血与战斗是角斗士的归宿,金钱与荣耀是角斗士的信仰!
     65 今日,只要【你的队伍】能取得胜利,你将获得一笔够花500年的财富
     66 将随机生成【你的队伍】和【敌人队伍】!'''
     67         for i in words:
     68             print(i, end='')  # 在python软件中是一个字一个字输出的
     69         time.sleep(1)
     70         print('
    狭路相逢勇者胜,请按enter继续~')
     71 # 随机生成6个角色
     72     def born_role(self):
     73         for i in range(3):  # 类作为 实例模板,()里面是被调用的类函数
     74             self.players.append(random.choice([Knight(), Assassin(), Bowman()]))
     75             self.enemies.append(random.choice([Knight(), Assassin(), Bowman()]))
     76 # 展示角色
     77     def show_role(self):
     78         print('----------------- 角色信息 -----------------')
     79         print('你的队伍:')
     80         for i in range(3):
     81             print('『我方』%s 血量:%s  攻击:%s' %
     82                   (self.players[i].name, self.players[i].life, self.players[i].attack))
     83         print('--------------------------------------------')
     84         print('敌人队伍:')
     85         for i in range(3):
     86             print('『敌方』%s 血量:%s  攻击:%s' %
     87                   (self.enemies[i].name, self.enemies[i].life, self.enemies[i].attack))
     88         print('--------------------------------------------')
     89 # 排序并展示
     90     def order_role(self):
     91         order_dict = {}
     92         for i in range(3):
     93             order = int(input('你想将 %s 放在第几个上场?(输入数字1~3)' % self.players[i].name))
     94             order_dict[order] = self.players[i]   ## ???
     95         self.players = []
     96         for i in range(1, 4):
     97             self.players.append(order_dict[i])
     98         print('
    你的队伍出场顺序是:%s、%s、%s'
     99               % (self.players[0].name, self.players[1].name, self.players[2].name))
    100         print('敌人队伍出场顺序是:%s、%s、%s'
    101               % (self.enemies[0].name, self.enemies[1].name, self.enemies[2].name))
    102 # 让双方 Pk 并展示结果
    103     def pk_role(self):
    104         for i in range(3):
    105             input('请按回车键继续。')
    106             print('
    ----------------- 【第%s轮】 -----------------' % (i + 1))
    107             # 每一局开战前加buff,角色克制,强遇弱攻击力翻倍
    108             self.players[i].fight_buff(self.enemies[i], '我方', '敌方')
    109             self.enemies[i].fight_buff(self.players[i], '敌方', '我方')
    110             # print('--------------------------------------------')
    111 
    112             while self.players[i].life > 0 and self.enemies[i].life > 0:
    113                 self.enemies[i].life -= self.players[i].attack
    114                 self.players[i].life -= self.enemies[i].attack
    115                 print('我方%s 发起了攻击,敌方%s 剩余血量 %s' %
    116                       (self.players[i].name, self.enemies[i].name, self.enemies[i].life))
    117                 print('敌方%s 发起了攻击,我方%s 剩余血量 %s' %
    118                       (self.enemies[i].name, self.players[i].name, self.players[i].life))
    119                 print('--------------------------------------------')
    120                 time.sleep(1)
    121             if self.players[i].life <= 0 and self.enemies[i].life > 0:
    122                 print('
    很遗憾,我方%s 挂掉了!' % (self.players[i].name))
    123                 self.score -= 1
    124             elif self.players[i].life > 0 and self.enemies[i].life <= 0:
    125                 print('
    恭喜,我方%s 活下来了。' % (self.players[i].name))
    126                 self.score += 1
    127             else:
    128                 print('
    我的天,他们俩都死了啊!')
    129 # 展示最终结局
    130     def show_result(self):
    131         if self.score > 0:
    132             print('【最终结果】
    你赢了!')
    133         elif self.score == 0:
    134             print('【最终结果】
    平局。')
    135         else:
    136             print('【最终结果】
    你输了。')
    137 g=Game()  # 启动游戏

     

     

    实例4 【新年尬聊】

     涉及知识点:【文件读取】【异常处理】【模块】【字典列表】【for/while/if】

      1 # 涉及知识点:【文件读取】【异常处理】
      2 # 【模块】【字典列表】【for/while/if】
      3 import requests,json,random,time
      4 words='''今天就是除夕啦,我们都老了一岁~
      5 为了帮大家应对七大姑八大姨的 '灵魂拷问' ~ ,模拟可能会面对的一些状况:
      6 可以根据题目选出自己认为合适的选项~
      7 完成题目,即可得出你应对灵魂“拷问”的灵敏度。'''
      8 for i in words:
      9     print(i,end='')
     10     time.sleep(0.1)
     11 print('下面是尬聊(避坑)指南~~')
     12 time.sleep(1)
     13 print('------------------------------------话题开始---------------------------------------')
     14 time.sleep(1)
     15 
     16 ## 1. 文件读取.json 嵌套字典列表类型
     17 try:
     18     with open('sample/new_year_questions.json', encoding='utf-8') as f:
     19         a=f.read()     # <class str>  用read方法读取得到str类型
     20         q_json = json.loads(a)    # str解析成 嵌套字典列表类型
     21 except FileNotFoundError:
     22 # .json网源码文件: new_year_questions.json(存储了json-嵌套字典列表类型的数据)
     23     res = requests.get('https://static.pandateacher.com/new_year_questions.json')
     24     q_json= res.json()   #【对象.json方法】将内容str转换成 字典嵌套列表类型
     25     with open('sample/new_year_questions.json', 'w', encoding='utf-8') as f:
     26         f.write(res.text )  # 对象.text获取到str类型
     27 except Exception as e:   # 若为其它异常,则表示加载题库失败,需要终止程序
     28     print("加载题目失败,失败原因:{}".format(e))  # ??
     29     exit()
     30 
     31 ## 2. 展示问题、4个选项,并积分
     32 question = q_json['questions_list']  # <class 'list'>  共8个question
     33 # 列表嵌套字典[{q:'',a:[{},{},{},{}]},{},{}]
     34 result = q_json['result']            # <class 'dict'>  共4个result
     35 mark = {1: 0,2: 0,3: 0,4: 0}  # 设置计分器
     36 num=1
     37 for k in question:  # question-列表嵌套字典8个[{ q:'',a:[{des:''},{},{},{}] },{},,{}]
     38     print(str(num) + '. 背景:'+k['q'])   # k-字典8个{ q:'',a:[{des:''},{},{},{}] }
     39     # 使用enumerate(列表)进行遍历 和 直接遍历列表 区别在于:
     40     # enumerate会自动给列表中的每个值添加序号,序号i从0开始。
     41     time.sleep(1)
     42     for i, answer in enumerate(k['a']):     # answer={des:''} 共4个
     43         print('(%d) %s'%(i+1, answer['desc']))
     44         time.sleep(1)
     45     while True:
     46         try:
     47             choice = int(input('你的回答是(1/2/3/4):'))
     48             if not 1 <= choice <= 4:
     49                 raise Exception
     50             # 手动发出异常,raise表示产生异常+异常类型.被except捕捉
     51             else:
     52                 mark[choice]=mark[choice]+1
     53                 break    # 跳转到for循环,for k in...
     54         except:
     55             x=input('输入不是答案序号(1-4),请重新输入~
    结束请按enter:')
     56             if x=='':
     57                 exit()
     58             else:
     59                 continue  # 返回while,chioce=input..
     60     num=num+1
     61     print('
    --------------------------------------------------------------------------------')
     62     time.sleep(1)
     63 
     64 ## 3. 生成结果
     65 print('结果运算中...')
     66 time.sleep(1)
     67 max_key=1
     68 max_val =0
     69 for key,val in mark.items():  # 遍历4次{1:1, 2:0, 3:3, 4:4}
     70     print('('+str(key)+')选项,你选了'+str(val)+'')
     71 # a.如果val < max_val,最终是final[str(max_key)]
     72 # b.如果val = max_val,
     73 # c.如果val > max_val,暂时将key设置为max_key,接着循环。
     74     if val == max_val:
     75         max_key = random.choice([key,max_key])
     76     elif val > max_val:
     77         max_key = key
     78         max_val = val
     79     else:  # 后续val< max_val
     80         pass
     81 final=result[str(max_key)]  # '1':[{ topic: "霸气",performance:'应对' ]}
     82 r1=final[0]['topic']        # final['topic']取不出来,因为[{ }]
     83 print('猪年气质:%s
    话题表现:%s'%(final[0]['topic'],final[0]['performance']))
     84 time.sleep(1)
     85 print('Wish you clear and fearless. Happy New Year!')
     86 
     87 
     88 ## 4. 把程序提交到前端程序接口;涉及知识:【爬虫】、【接口授权】
     89 # jwt表示用户token,里面包含了权限信息,不加这个token就无法访问下面的URL
     90 jwt = 'eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJhcHAiOiJweWNsYXNzIiwiZXhwIjoxNTQ5NjExNzg5LCJpZCI6NDI2MzU5LCJvaWQiOiJvUmI4T3dnSlo3UjhraExpWEtsTzVOVklldFMwIiwicGF0aCI6Ii8iLCJwdWlkIjoiMTg5MGZlODEtNTI5NS00ZDE5LThlMmItNzc2ZTA0OTZhN2VkIiwic2NlbmUiOiJwY19zY2FuIiwic3ViIjoibzdoTEgwemc4VGxjQnpCNGVtNEpUbHRrdThObyJ9.g4UoftsqN6gIVDstgWfOfMj0mAyEv7Y-A4iFdipZtwQ'
     91 # 把本地的 questions.json 中的题目 POST 到 接口
     92 url = 'https://www.pypypy.cn/python-class-fos/api-academy-go/spring-activity/json-data'
     93 # json.dumps(字典)表示将字典转换成json格式的数据,默认将中文转换成ASCII格式,
     94 # 这里将ensure_ascii设置为False,表示不使用ASCII格式对中文编码。
     95 headers = {'Authorization': 'Bearer {}'.format(jwt)}
     96 data = {'data': question}
     97 try:
     98     res = requests.post(url, json=data, headers=headers)
     99 # 【response对象.raise_for_status方法】将失败的请求当作异常抛出
    100     res.raise_for_status()
    101     if res.json()['errcode'] != 0:  # 若post失败,展示失败信息,重试
    102         print(res.json()['errmsg'])
    103         print('请尝试重新运行程序!')
    104     else:    # 若post成功,则提示成功
    105         print('提交到前端程序接口成功,点击【提交练习】后,手机扫码即可体验程序。')
    106 except requests.exceptions.HTTPError as e:
    107     print(e)
    108     print('请尝试重新运行程序!')
    109 except Exception:
    110     print('提交到前端程序接口失败!')
    111     print('请尝试重新运行程序!')

     

     

  • 相关阅读:
    weblogic.xml 精妙设置
    mysql --> select * from Employee group by name这样的语法有什么意义?
    oracle pctfree和pctused详解
    超详细 SpringMVC @RequestMapping 注解使用技巧
    Spring 注解概览
    Js替换字符串中的所有空格
    面试题精选
    Axure RP Extension for Chrome修复
    【javascript】获取 格式化时间
    万能清除浮动
  • 原文地址:https://www.cnblogs.com/lj-attitudes0303/p/10354732.html
Copyright © 2011-2022 走看看