Python练习

'''
3.人和机器猜拳游戏写成一个类,有如下几个函数:
1)函数1:选择角色1 曹操 2张飞 3 刘备
2)函数2:角色猜拳1剪刀 2石头 3布 玩家输入一个1-3的数字
3)函数3:电脑出拳 随机产生1个1-3的数字,提示电脑出拳结果
4)函数4:角色和机器出拳对战,对战结束后,最后出示本局对战结果...赢...输,然后提示用户是否继续?按y继续,按n退出。
5)最后结束的时候输出结果 角色赢几局 电脑赢几局,平局几次 游戏结束
'''
第一种方法:
class ren_VS_jiqi:
    def role_choice(self):
        self.roles = {1:'曹操',2:'张飞',3:'刘备'}
        self.role_num = int(input('请选择角色1 曹操 2张飞 3 刘备:'))
        return self.roles[self.role_num]
    def role_punch(self):
        # self.role = self.role_choice()
        while True:
            punch = {'1': '剪刀', '2': '石头', '3': '布'}
            role_punch1 = input('请猜拳1剪刀 2石头 3布:')
            if role_punch1 in punch.keys():
                print('%s出的拳是:%s' %(self.roles[self.role_num],punch[role_punch1]))
                break
            else:
                print('输入有误,请重新输入!')
                continue
        return role_punch1
    def machine_punch(self):
        import random
        punch1 = {'1': '剪刀', '2': '石头', '3': '布'}
        machine_punch = str(random.randint(1,3))
        print("机器出拳:%s" % punch1[machine_punch])
        return machine_punch
    def R_Vs_M(self):
        role = self.role_choice()
        result_reny = 0 #人赢
        result_jiqiy = 0 #机器赢
        result_ping = 0 #平局
        while True:
            ren_num = int(self.role_punch())
            jiqi_num = int(self.machine_punch())
            if ren_num != jiqi_num:
                if ren_num == 1 and jiqi_num ==3:
                    result_reny +=1
                elif ren_num == 2 and jiqi_num == 1:
                    result_reny +=1
                elif ren_num == 3 and jiqi_num == 1:
                    result_reny +=1
                else:
                    result_jiqiy +=1
            else:
                result_ping +=1
            choice=input("是否要继续猜拳?按y继续,按n退出")
            if choice=='y':
                continue
            else:
                break
        print("对战结束:%s赢了%s局,电脑赢了%s局,平了%s局"%(self.roles[self.role_num],result_reny,result_jiqiy,result_ping))
ren_VS_jiqi().R_Vs_M()

  第二种方法:

class HumanVSMachine:
    def choose_role(self):
        while True:
            role_info={"1":"曹操","2":"张飞","3":"刘备"}
            role_num=input("请选择你喜欢的角色:1:曹操 2:张飞 3:刘备")
            if role_num in role_info.keys():
                print("你选择的角色是%s"%role_info[role_num])
                break
            else:
                print("角色选择错误,请重新选择!")
                continue
        #返回一个值  返回角色值
        return role_info[role_num]
     #方法一:
    def cq(self,role,mode):#mode=1  人出拳 mode=2  就是电脑出拳
        import random
        cq_info={"1":"石头","2":"剪刀","3":""}
        if mode==1:
            cq_num=input("请输入对应的数字出拳:1石头 2剪刀 3布")
        elif mode==2:
            cq_num=str(random.randint(1,3))
        if cq_num in cq_info.keys():
            print(role+"出的是%s"%cq_info[cq_num])
        else:
            print("出拳错误!")
        return cq_num
    # 方法二:
    # def role_cq(self,role_name):
    #     cq_num=input("请输入对应的数字出拳:1剪刀 2石头 3布")
    #     cq_info={"1":"剪刀","2":"石头","3":"布"}
    #     if cq_num in cq_info.keys():
    #         print(role_name+",你出的是%s"%cq_info[cq_num])
    #     else:
    #         print("出拳错误!")
    #     return cq_num
    #
    # def machine_cq(self):
    #     cq_num=str(random.randint(1,3))#需要转换一下格式
    #     cq_info={"1":"剪刀","2":"石头","3":"布"}
    #     if cq_num in cq_info.keys():
    #         print("电脑出的是%s"%cq_info[cq_num])
    #     else:
    #         print("出拳错误!")
    #     return cq_num#字符串
 
    def human_vs_machine(self):
        #人机对战
        role=self.choose_role()#角色
        #变量:
        human_win=0
        ping=0
        machine_win=0
        while True:
            #方法一:
            # human_cq=int(self.role_cq(role))#角色出拳
            # machine_cq=int(self.machine_cq())#机器出拳
            #方法二
            human_cq=int(self.cq(role,1))
            machine_cq=int(self.cq("电脑",2))
 
            if human_cq!=machine_cq:#数值比较 1 石头  2 剪刀  3布
                if human_cq==1 and machine_cq==2:
                    human_win+=1
                elif human_cq==2 and machine_cq==3:
                    human_win+=1
                elif human_cq==3 and machine_cq==1:
                    human_win+=1
                else:
                    machine_win+=1
            else:
                ping+=1
            choice=input("是否要继续猜拳?按y继续,按n退出")
            if choice=='y':
                continue
            else:
                break
        print("对战结束:人赢了%s局,电脑赢了%s局,平了%s局"%(human_win,machine_win,ping))
 
HumanVSMachine().human_vs_machine()

 

posted @ 2018-10-25 20:45  邪狂  阅读(307)  评论(0编辑  收藏  举报
柔柔弱弱