上次,我们有一个问题:如果一些想作弊的人用随便乱输的方法算出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实操系列,再见!