第三周笔记
四张扑克通过加减乘除和括号算24点
1. 电脑出题
1. 1.电脑产生4个随机数,并判断输入的结果是否为24
import random
import re
poke = [str(random.randint(1, 13)), str(random.randint(1, 13)), str(random.randint(1, 13)),str(random.randint(1, 13))]
expr = input('请输入算式:')
if sorted(poke)==sorted(re.split('[\+\-\*\/]', expr)):
print('恭喜你答对了')
else:
print('输入错误')
1.2.防止用户作弊,输入不是给的四个数,更改判断的部分
expr = input('请输入算式:')
a = re.split('[\+\-\*\/\(\)]', expr)
res = [i for i in a if i != ""]
if sorted(poke) == sorted(res):
try:
if eval(expr) == 24:
print('恭喜你答对了')
else:
print('你答错了')
except:
pass
else:
print('输入错误')
2.电脑答题
2.1. 输入四个数字电脑穷举法计算是否==24
import itertools
# python f字符串 f'{}' 花括号里面可以写表达式
expr = input('请输入四个数字:')
for i in itertools.permutations(re.split('[\,]', expr)): #4个数字
for j in itertools.product(['+', '-', '*', '/'], repeat=3): #四个运算符取三个
expr = [f'{i[0]}{j[0]}{i[1]}{j[1]}{i[2]}{j[2]}{i[3]}']
if eval == 24:
print({i[0]}{j[0]}{i[1]}{j[1]}{i[2]}{j[2]}{i[3]}, '==24')
else :
print("无解")
2.2.加上括号出现的情况
expr = input('请输入四个数字:')
for i in itertools.permutations(re.split('[\,]', expr)):
for j in itertools.product(['+', '-', '*', '/'], repeat=3):
expr = [f'(({i[0]}{j[0]}{i[1]}){j[1]}{i[2]}){j[2]}{i[3]}', # 123
f'({i[0]}{j[0]}{i[1]}){j[1]}({i[2]}{j[2]}{i[3]})', # 132
f'({i[0]}{j[0]}({i[1]}{j[1]}{i[2]})){j[2]}{i[3]}', # 213
f'{i[0]}{j[0]}(({i[1]}{j[1]}{i[2]}){j[2]}{i[3]})', # 231
f'{i[0]}{j[0]}({i[1]}{j[1]}({i[2]}{j[2]}{i[3]}))', # 321
]
for k in expr:
try:
if eval(k) == 24:
print(k, '==24')
except ZeroDivisionError:
# ZeroDivisionError可以省略
pass
3.最后整合一下
"""
@author:zhang
@software: PyCharm
@file: 24点游戏.py
@time: 2022/9/16 19:07
"""
import random
import re
import itertools
while True:
print("*****************")
print("*\t算24点小游戏\t*")
print("*\t1.电脑出题\t*")
print("*\t2.电脑做题\t*")
print("*\t3.退出游戏\t*")
print("*****************")
num = input("请选择菜单数字按Enter键(1~3):")
if num == "1":
poke = [str(random.randint(1, 13)), str(random.randint(1, 13)), str(random.randint(1, 13)),str(random.randint(1, 13))]
print('第二单元教学用《CUI速算24点》基础版')
print(f'四个随机数:{poke}')
expr = input('请输入算式:')
a = re.split('[\+\-\*\/\(\)]', expr)
res = [i for i in a if i != ""]
if sorted(poke) == sorted(res):
try:
if eval(expr) == 24:
print('恭喜你答对了')
else:
print('你答错了')
except:
pass
else:
print('输入错误')
elif num == "2":
expr = input('请输入四个数字:')
for i in itertools.permutations(re.split('[\,]', expr)):
for j in itertools.product(['+', '-', '*', '/'], repeat=3):
expr = [f'(({i[0]}{j[0]}{i[1]}){j[1]}{i[2]}){j[2]}{i[3]}', # 123
f'({i[0]}{j[0]}{i[1]}){j[1]}({i[2]}{j[2]}{i[3]})', # 132
f'({i[0]}{j[0]}({i[1]}{j[1]}{i[2]})){j[2]}{i[3]}', # 213
f'{i[0]}{j[0]}(({i[1]}{j[1]}{i[2]}){j[2]}{i[3]})', # 231
f'{i[0]}{j[0]}({i[1]}{j[1]}({i[2]}{j[2]}{i[3]}))', # 321
]
for k in expr:
try:
if eval(k) == 24:
print(k, '==24')
except ZeroDivisionError:
# ZeroDivisionError可以省略
pass
else:
break
4.转成.exe游戏
项目路径的终端下输入:
pip install pyinstaller -i https://pypi.douban.com/simple
pyinstaller -F -i 应用图标.ico 文件名.py
https://igoutu.cn/icons%E6%89%BE%E5%9B%BE%E6%A0%87%E7%9A%84%E7%BD%91%E7%AB%99