4 24点(4)


上次,我们有一个问题:如果一些想作弊的人用随便乱输的方法算出24,那样游戏就没有意义了。我们要保证这样的事情不能发生。

变量设置

numlst = []
f = False

提取数字

首先要for循环:

for i in range(len(bds)):
	st = ''

接着要判断是否在数字范围内:

if bds[i] >= '0' and bds[i] <= '9':

然后就加入一个新字符串内:

st += bds[i]

判断是否是最后一个数字:

if i == len(bds) - 1:
	break

判断后面是否还连着数字:

if bds[i + 1] >= '0' and bds[i + 1] <= '9':
	st += bds[i + 1]
	f = True

最后将这个字符串加入列表中:

numlst.append(st)

更改与判断数字

首先依然是变量:

flag2 = True
numlst2 = list(numlst)

这里要复制一个列表是因为循环过程中原列表索引不能改变。
还有就是不能写numlst2 = numlst,否则因为对象的原因,这两个列表会同时变化,其他类型也一样。

接着就是判断:

for i in range(len(numlst)):
	if numlst[i] == '1':
		numlst[i] = 'A'
	elif numlst[i] == '11':
		numlst[i] = 'J'
	elif numlst[i] == '12':
		numlst[i] = 'Q'
	elif numlst[i] == '13':
		numlst[i] = 'K'
	if numlst[i] in c:
		numlst2.pop(0)

c就是之前那个有原来数字的列表。可以去翻我前一个博客去看。

判断里面还有没有数字:

if numlst2:
	flag2 = False

在之前的判断答对了的那里加上:

if int(eval(bds)) == 24 and flag2 == True:
    print('恭喜您答对了!')
else:
    print('您答错了。')
    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')
        numlst = []
        f = False
        
        for i in range(len(bds)):
            st = ''
            if f:
                f = False
                continue
            f = False
            
            if bds[i] >= '0' and bds[i] <= '9':
                st += bds[i]
                if i == len(bds) - 1:
                    break
                if bds[i + 1] >= '0' and bds[i + 1] <= '9':
                    st += bds[i + 1]
                    f = True
                numlst.append(st)
                
        flag2 = True
        numlst2 = list(numlst)
        
        for i in range(len(numlst)):
            if numlst[i] == '1':
                numlst[i] = 'A'
            elif numlst[i] == '11':
                numlst[i] = 'J'
            elif numlst[i] == '12':
                numlst[i] = 'Q'
            elif numlst[i] == '13':
                numlst[i] = 'K'
            if numlst[i] in c:
                numlst2.pop(0)
                
        if numlst2:
            flag2 = False
            
        if int(eval(bds)) == 24 and flag2 == True:
            print('恭喜您答对了!')
        else:
            print('您答错了。')
            continue
        
    elif ans == 'B':
        if r == False:
            print('这道题确实无解。')
        else:
            print('这道题有解。')
            print('如:')
            print(r)
            continue

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

到此为止,我的24点系列已经完全结束了,因为我要开发新游戏,所以可能后面会久一点才会更新Python实操系列,再见!

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值