3 24点(3)


从这次开始,我们就要开始写主程序了,主程序相比函数会难一些,我调试了很久才写出代码。

导入模块

这次要导入的有很多,有:

  1. itertools
  2. random
  3. function
  4. function中的全部函数
  5. datetime
import itertools
import random
import function
from function import *
import datetime

变量声明

level = 1

level就是等级,一开始是等级1,所以不能放循环里面,否则会一直为第1关。

打印欢迎词

print('欢迎来到24点游戏中心!')

循环

while True:

这几个都太简单了,所以我没写解释词。

询问退出

while True:
    a = input('\n您可以输入q键退出\n')
    if a == 'q':
        break

因为while True是死循环,必须要有出口。

变量声明(2)

flag = True

flag就是这局是否答对,每次都要重置,所以要放在循环里。

设置时间

if level <= 20:
    minute = 5
elif level <= 40:
    minute = 4
elif level <= 60:
    minute = 3
elif level <= 100:
    minute = 2
else:
    minute = 1

通过的关越多,时间就越短。

打印级数和时间

print('第{}关'.format(level))
print('时间:{}min'.format(minute))

打印4张扑克牌

首先要用到我们函数中的translate():

c,r = translate()

一样,不知道translate是什么的,去看我前面写的函数程序。
接着一个一个打印:

for i in range(3):
    print(c[i],end = ' ')
print(c[3],end = '\n')

注意,最后一个必须单独打,因为前面设置的是end = ’ ',最后一个要改回end = ‘\n’,否则会一直隔一个空格打下去。

算时间+写问题

要用到datetime.datetime.now()函数和datetime.timedelta(minutes = int)函数:

time1 = datetime.datetime.now()
ans = input('A:我解出来了\nB:我认为无解\n')
time2 = datetime.datetime.now()
timedel = time2 - time1
if timedel > datetime.timedelta(minutes = minute):
    print('时间太久了!')
    flag = False
    continue

有解情况

if ans == 'A':
        bds = input('请输入您计算出来的算式,×用*,÷用/。\n')
      
        if int(eval(bds)) == 24:
            print('恭喜您答对了!')
        else:
            print('您答错了。')
            continue

eval()函数是计算str式子最终的值的,有些时候有除法,有可能会变成24.0≠24,所以要加上int()。

无解情况

elif ans == 'B':
    if r == False:
        print('这道题确实无解。')
    else:
        print('这道题有解。')
        print('如:')
        print(r)
        continue

无解情况有两种:真无解和假无解。
判断的方法就看translate()函数返回的是否为False。

输入错误

else:
    print('输入错误!')
    continue

变量加减

level += 1

注意:自己写的时候要注意有continue,否则无论是对的还是错的都会多一关。

全部程序

import itertools
import random
import function
from function import *
import datetime

level = 1

print('欢迎来到24点游戏中心!')

while True:
    a = input('\n您可以输入q键退出\n')
    if a == 'q':
        break

    flag = True

    if level <= 20:
        minute = 5
    elif level <= 40:
        minute = 4
    elif level <= 60:
        minute = 3
    elif level <= 100:
        minute = 2
    else:
        minute = 1

    print('第{}关'.format(level))
    print('时间:{}min'.format(minute))
    
    c,r = translate()
    for i in range(3):
        print(c[i],end = ' ')
    print(c[3],end = '\n')
    
    time1 = datetime.datetime.now()
    ans = input('A:我解出来了\nB:我认为无解\n')
    time2 = datetime.datetime.now()
    timedel = time2 - time1
    if timedel > datetime.timedelta(minutes = minute):
        print('时间太久了!')
        flag = False
        continue
    
    if ans == 'A':
        bds = input('请输入您计算出来的算式,×用*,÷用/。\n')
        if int(eval(bds)) == 24:
            print('恭喜您答对了!')
        else:
            print('您答错了。')
            continue
        
    elif ans == 'B':
        if r == False:
            print('这道题确实无解。')
        else:
            print('这道题有解。')
            print('如:')
            print(r)
            continue

    else:
        print('输入错误!')
        continue
        
    level += 1

测试

现在测试已经可以,但是如果出现:

输出:A:我解出来了
输出:B:我认为无解
输入:A
输出:请输入您计算出来的算式,×用*,÷用/。
输入:4*6
输出:恭喜您答对了!
系统:加一级
那么该怎么办呢?我们下次再讲优化的方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值