• 不简单的二进制运算游戏-python3.0


    简单的四位二进制运算游戏依靠人脑计算二进制数值,阶乘类型的,我使用的是python3.0+实现的。

    思路:

    1,首先我们要产生随机题目,而且后续可以扩展难度:

    2,问题有了,就要生成四个答案,其中一个为正确答案:

    3,问题只有一个唯一正确的答案,而因为难度不同答案也会不一样:

    4,再写一个用于在cmd环境下退出的方法:

    5,写一下游戏的主体逻辑方法和一些小小的优化:

    6,最后我们加入一个异常捕捉,就大功告成了!

    运行的结果:

    软件全部的源码:

      1 # -*- coding: GB2312 -*-
      2 import random #用来生成随机数的函数
      3 import os #支持cmd命令行
      4 
      5 def roll_dice(numbers,points):#随机生成题目
      6  if points is None:
      7   points = []  # points为空列表,后续可以插入新值到该列表
      8  while numbers > 0:
      9   point = random.randrange(0,2)#生成0-1的随机数
     10   points.append(point) # 用append()方法将point数值插入points列表中
     11   numbers = numbers - 1# 完成一次,numbers减1,当小于等于0时不再执行该循环
     12  return points
     13 def roll_ys(number,points_ys):#随机的生成答案
     14  numbers=3
     15  if points_ys is None:
     16     points_ys = []  # points为空列表,后续可以插入新值到该列表
     17  while numbers > 0:
     18   if number == 4:
     19        point = random.randrange(1,17)#生成1-16的随机数
     20   elif number == 5:
     21        point = random.randrange(1,33)#生成1-32的随机数
     22   elif number == 6:
     23        point = random.randrange(1,65)#生成1-64的随机数
     24   elif number == 7:
     25        point = random.randrange(1,129)#生成1-128的随机数
     26   elif number == 8:
     27        point = random.randrange(1,257)#生成1-256的随机数
     28   if point not in points_ys:
     29      points_ys.append(point) # 用append()方法将point数值插入points列表中
     30      numbers = numbers - 1# 完成一次,numbers减1,当小于等于0时不再执行该循环
     31  return points_ys
     32 def ex():#退出方法
     33     os.system('echo 本游戏由steven制作,版权属于16软件五班一组!')
     34     os.system('echo 按任意键退出!')
     35     os.system('pause>nul')
     36 def suanfa(points):#计算难度的正确答案
     37     if len(points)==4:
     38         ppt = (1 * points[3]) + (2 * points[2]) + (4 * points[1]) + (8 * points[0])
     39         return ppt
     40     if len(points)==5:
     41         ppt = (1 * points[4]) + (2 * points[3]) + (4 * points[2]) + (8 * points[1])+(16 * points[0])
     42         return ppt
     43     if len(points)==6:
     44         ppt = (1 * points[5]) + (2 * points[4]) + (4 * points[3]) + (8 * points[2])+(16 * points[1])+(32 * points[0])
     45         return ppt
     46     if len(points)==7:
     47         ppt = (1 * points[6]) + (2 * points[5]) + (4 * points[4]) + (8 * points[3])+(16 * points[2])+(32 * points[1])+(64 * points[0])
     48         return ppt
     49     if len(points)==8:
     50         ppt = (1 * points[7]) + (2 * points[6]) + (4 * points[5]) + (8 * points[4])+(16 * points[3])+(32 * points[2])+(64 * points[1])+(128 * points[0])
     51         return ppt
     52 def start_game():#开始游戏
     53      #定义需要的数组
     54      zcl = 0
     55      cwl = 0
     56      cs = 0
     57      zc = 0
     58      cw = 0
     59      lu = 1
     60      #提示语句
     61      print ("本游戏由steven制作,版权属于16软件五班一组!")
     62      print ("-----二进制游戏?想考的好?不存在的!------")
     63      print ('----- 游戏现在正式开始 -----')
     64      number = int(input('请输入挑战的等级(4-8)'))
     65      while 1:#游戏主循环
     66           points = roll_dice(number,points = None)
     67           pt = suanfa(points)
     68           points_ys = roll_ys(number,points_ys = None)
     69           if pt == 0:#判断是否为空值
     70               continue
     71           if pt in points_ys:#检测pt在points_ys是否存在,存在即随机增加数值po插入
     72               po = random.randrange(3,6)
     73               po+=pt
     74               points_ys.append(po)
     75           else:
     76               points_ys.append(pt)
     77           points_ys.sort()
     78           print ('第%s轮,给出的二进制是:'%lu,points)
     79           print ('结果的数字可能是是:',points_ys)
     80           if lu >= 2:#退出语句判断条件
     81               print ("现在,你可以输入5167来退出游戏")
     82           your_choice = input('请回答:') #赋值为points_ys值,用户需输入为正确数值才可以
     83           if your_choice == "5167" :#结算条件
     84              zcl = (zc/cs)*100
     85              cwl = (cw/cs)*100
     86              print ("本次挑战: 
     	 正确率为%s"%zcl+"%"+"
     	 错误率为%s"%cwl+"%")
     87              if 100 >= zcl > 90:
     88                  print ("你真的很不错,期待下一次你依旧可以创造奇迹!")
     89                  ex()
     90                  exit()
     91              elif  90 >zcl >= 50:
     92                  print ("你还需要努力,加油少年!")
     93                  ex()
     94                  exit()
     95                  
     96              else:
     97                  print ("佩服佩服,你的数学是体育老师教的么?")
     98                  ex()
     99                  exit()
    100                  
    101           if int(your_choice) == pt:#判断正确
    102                       print ("正确")
    103                       float(zcl)
    104                       lu+=1
    105                       cs+=1
    106                       zc+=1
    107                       zcl = (zc/cs)*100
    108                       print ("正确率为%s"%zcl+"%")
    109                       print ("请再接再厉!")
    110                       continue
    111           else:#判断错误
    112                       print ("错误")
    113                       float(cwl)
    114                       cs+=1
    115                       cw+=1
    116                       lu+=1
    117                       cwl = (cw/cs)*100
    118                       print ("错误率为%s"%cwl+"%")
    119                       print ("正确答案为%s"%pt)
    120                       continue
    121           
    122                  
    123 try:#异常捕捉
    124     os.system('title 本游戏由steven制作,版权属于16软件五班一组!版本v0.5')
    125     start_game()
    126 except ValueError:#防止乱输入的问题
    127         print ("输入有误,请重新输入!")
    128         start_game()
    View Code

    本文所有权利归山河故我所有,转载请标明出处!

  • 相关阅读:
    Retrofit2.0+OkHttp设置统一的请求头(request headers)
    Retrofit、Okhttp使用小记(cookie,accesstoken,POST
    quartz持久化部署实现
    支付宝支付-常用支付API详解(查询、退款、提现等)
    支付宝支付-提现到个人支付宝
    Git 版本还原命令
    CEF JS实现获取剪贴板图片的DataURL
    CEF 自定义用户协议(scheme)实现以二进制流的方式显示图片、视频、音频
    CEF C++调用前端js方法展示传递过来的图片数据
    C++读写图片数据转成Base64格式
  • 原文地址:https://www.cnblogs.com/Steven-Tim/p/10021175.html
Copyright © 2020-2023  润新知