第一次动手写随笔,记录一下今早的1.5小时努力成果

题目是这样的 :

       人和机器进行猜拳游戏写成一个类,首先选择角色:1 曹操 2张飞 3 刘备,然后选择的角色进行猜拳:1剪刀 2石头 3布 玩家输入一个1-3的数字;然后电脑出拳 随机产生1个1-3的数字,提示电脑出拳结果( 1剪刀 2石头 3布 ) ,双方出拳完毕后:角色和机器出拳对战,对战结束后,最后出示本局对战结果...赢...输,然后提示用户是否继续?按y继续,按n退出。最后结束的时候输出结果 角色赢几局 电脑赢几局,平局几次 游戏结束。

代码如下:

  

import random
class game_huaquan(): def Gamer(self):
Part = int(input("请选择你要操作的角色,1.曹操 2.张飞 3.刘备 :"))
print('你选择的角色是:{}'.format(parts[Part]))
return Part
def Game(self,win=0,lose=0,draw=0):
s = ('1', '2', '3')
S = ("","剪刀", "石头", "布")
while True:
input_number = input("请输入出拳结果,1.剪刀 2.石头 3.布\n")
random_number = random.randint(1, 3)
Random = S[random_number]
if input_number not in s:
print('输入有误,请重新输入')
continue
else:
input_number = int(input_number)
Input = S[input_number]
while True:
if input_number == random_number:
print('您出拳结果:{}\n电脑出拳结果:{} \n打平'.format(Input,Random))
draw += 1
if (input_number == 1 and random_number== 2) or (input_number==2 and random_number== 3) or (input_number==3 and random_number== 1):
print('您出拳结果:{} \n电脑出拳结果:{} \n您输了'.format(Input,Random))
lose += 1
if (input_number == 2 and random_number == 1) or (input_number == 3 and random_number== 2) or (input_number == 1 and random_number == 3):
print('您出拳结果:{}\n电脑出拳结果:{} \n您赢了'.format(Input,Random))
win += 1
while True:
con = (input("输入'Y'继续游戏,输入'N'结束游戏:\n")).upper()
if con == 'Y':
break
elif con == 'N':
return win,lose,draw
else:
print("输入错误请重新输入!")
continue
break
def Game_console(self,Part,win,lose,draw):
gamer = parts[Part]
print('本次游戏中,您操作的角色{}赢{}局,输{}局,平{}局,进行了{}局'.format(gamer, win, lose, draw, (win+lose+draw)))
if __name__ == '__main__':
parts = ('曹操', '张飞', '刘备')
part = game_huaquan().Gamer()
Scene = game_huaquan().Game()
game_huaquan().Game_console(part,Scene[0],Scene[1],Scene[2])

  

  注意要点有4处:

        1.出拳情况应该往结果上靠,刚开头走错路,写了9个if,实际上3个就能解决了,要么赢、要么输、要么平。注意到这一点结果判定就很好解决了

        2.循环的跳出,在最后一个break上浪费了我半小时,一直循环跳出不到出拳,以后要注意

        3.不要进行无意义的格式转换,无意义的格式转换容易出错,哪怕第一次运行没问题,第二次,第三次总会出现各种各样奇怪的bug,而且很难找到问题根源

        4.优化出拳结果的时候发现的,输入值是1-3,但是要取出拳结果值却是从0开始取,所以S中0位加一个占位,让取值从1开始

2019-2-22日 优化Game_console模块,缩减代码量,通过part[Part]定位选中角色,并传入打印

2019-2-25日 优化Game模块,减少循环中代码块,删去sum参数,通过win、draw、lose三个参数和来得出sum值,并解决了一个猜拳输入错误,程序崩溃的bug,优化显示问题,猜拳结果从数字转换成出拳方式

Python代码的人机大战(循环嵌套)的更多相关文章

  1. 【python基础语法】多重循环嵌套,函数(第6天课堂笔记)

    1.什么是函数?函数有什么作用? 函数都是有特定功能的,都是由一些有特定功能的进行封装完成的 2.已经学过了哪些内置函数?分别有什么作用? print:输出 input:输入 type:查询数据类型 ...

  2. 【Python】两个for循环嵌套练习

    要求:取下方篮框中内容并写入csv文件中.用两个for循环将每一行取出来作为一个元素存放到新数组中. # coding=utf-8 from selenium import webdriver fro ...

  3. Python基础之if判断,while循环,循环嵌套

    if判断 判断的定义 如果条件满足,就做一件事:条件不满足,就做另一件事: 判断语句又被称为分支语句,有判断,才有分支: if判断语句基本语法 if语句格式: if 判断的条件: 条件成立后做的事 . ...

  4. Python基础总结之第八天开始【while循环以及for循环,循环嵌套等循环相关的知识点】(新手可相互督促)

    ennnnn,年薪20万的梦想是不是又进了一步: 循环,什么是循环,循环就是电池有电,手机屏幕可以循环一整天的使用:循环就是地球不毁灭,太阳日复一日的出现...... 不接受反驳,谢谢!~ 只要条件满 ...

  5. Python代码阅读(第11篇):展开嵌套列表

    Python 代码阅读合集介绍:为什么不推荐Python初学者直接看项目源码 本篇阅读的代码实现了展开嵌套列表的功能,将一个嵌套的list展开成一个一维list(不改变原有列表的顺序). 本篇阅读的代 ...

  6. [Python]循环嵌套nested loop-练习题

    [python的for循环嵌套打印如下图形] 图形一: ******* ******* ******* ******* 图形二: * *** ***** ******* 图形三: * *** **** ...

  7. python中for、while循环、if嵌套的使用

    1.for循环字符串就是一个有序的字符序列for i in range(5):     print(i)定义一个死循环while True:     pass2.break和continue肯定需要和 ...

  8. Python 三级菜单与优化(一层循环嵌套)

    优化的思路是使用单层循环嵌套完成三级菜单,这个优化思路我非常喜欢,我喜欢在编程的时候用最少的东西写出同样的效果,通常这样会绕来绕去,但非常有趣!!! 需求: 1.运行程序输出第一级菜单: 2.选择一级 ...

  9. python利用for..in遍历,while循环嵌套编译九九乘法表的几种模式

    运用for....in...遍历的四种方向的九九乘法表: 左下角: import sysfor i in range(1,10): for j in range(1,i+1): sys.stdout. ...

随机推荐

  1. web(六)css的基本语法、取值与单位

    css语法包含如下部分: 选择器:用于选择需要添加样式的元素. 属性(property):样式的属性名称,例如color代表颜色. 取值与单位:属性对应的值以及单位. 语法规则:css的某些固定语法. ...

  2. Binary Search Tree Learning Summary

    BST Definition BST is short for Binary Search Tree, by definition, the value of right node is always ...

  3. flask中如何生成迁移文件

    在flask网站开发中,如果直接对数据库进行修改的话,风险比较高,最好的是由迁移文件生成,这样确保了数据的误操作. 在Flask中可以使用Flask-Migrate扩展,来实现数据迁移.并且集成到Fl ...

  4. ES5与ES6中的继承

    ES5继承在ES5中没有类的概念,所以一般都是基于原型链继承,具体的继承方法有以下几种: 父类: function Father (name) { this.name = name || 'sam' ...

  5. day04列表

    列表 内容详细 1.列表 公共 独有方法 删除 remove pop clear del区别 强制转换 #表示多个事物 users=["lili","Joe", ...

  6. How to Install Tomcat 8.0.27 on CentOS/RHEL and Ubuntu【转】

    https://tecadmin.net/install-tomcat-8-on-centos-rhel-and-ubuntu/ Apache Tomcat is an opensource web ...

  7. 2017第45周一java多线程创建方法

    1. 从JDK1.5开始,Java提供了3种方式来创建,启动多线程: Ø 继承Thread类来创建线程类,重写run()方法作为线程执行体. Ø 实现Runnable接口来创建线程类,重写run()方 ...

  8. List进行排序

    使用Java中提供的对集合进行操作的工具类Collections,其中的sort方法,重写比较方法 /** * 根据序号对列席人进行排序 * @param lxrUser * @return */ p ...

  9. HTTP客户端/服务端 POST/GET

    获取GET请求内容 实例 //引入模块var http=require('http');var urls=require('url');var util=require('util');//创建服务h ...

  10. 后台自动运行,定期记录定位数据(Hbuilder监听 app由前台切换到后台、切换运行环境的 监听方法)

    http://ask.dcloud.net.cn/question/28090 https://blog.csdn.net/qq_37508970/article/details/86649703 各 ...