背景介绍
这一切都应该要从一只蝙蝠讲起了,但是我们这次长话短说,今天看媛媛在玩一个叫做“24点”的游戏,其中有些题对于小学生来说比较刁钻,居然要使用到分数,于是便写了24点的解答程序。正好让她先学学排列组合。
代码如下:
class Tenty_four:
def __init__(self, number: dict):
self.result = {}
self.number = number
self.typeid = ['+', '-', '*', '/']
self.basket_num = []
self.basket_typ = []
self.basket_new = []
def digital(self):
for i in self.number:
for j in self.number:
if j != i:
for m in self.number:
if m != i and m != j:
for n in self.number:
if n != i and n != j and n != m:
a = [self.number[i], self.number[j], self.number[m], self.number[n]]
self.basket_num.append(a)
for item in self.basket_num:
if item not in self.basket_new:
self.basket_new.append(item)
def operate(self):
for i in self.typeid:
for j in self.typeid:
for k in self.typeid:
a = [i, j, k]
self.basket_typ.append(a)
def bracket(self):
k = ["(", ")"]
for i in self.basket_new:
for j in self.basket_typ:
self.result = {
'A': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(k[0], i[0], j[0], i[1], k[1], j[1], i[2], j[2], i[3]),
'B': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(i[0], j[0], k[0], i[1], j[1], i[2], k[1], j[2], i[3]),
'C': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(i[0], j[0], i[1], j[1], k[0], i[2], j[2], i[3], k[1]),
'D': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(k[0], i[0], j[0], i[1], k[1], j[1], k[0], i[2], j[2], i[3], k[1]),
'E': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(k[0], k[0], i[0], j[0], i[1], k[1], j[1], i[2], k[1], j[2], i[3]),
'F': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(k[0], i[0], j[0], k[0], i[1], j[1], i[2], k[1], k[1], j[2], i[3]),
'G': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(i[0], j[0], k[0], k[0], i[1], j[1], i[2], k[1], j[2], i[3], k[1]),
'H': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(i[0], j[0], k[0], i[1], j[1], k[0], i[2], j[2], i[3], k[1], k[1]),
'J': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(k[0], i[0], j[0], i[1], j[1], i[2], k[1], j[2], i[3]),
'K': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(i[0], j[0], k[0], i[1], j[1], i[2], j[2], i[3], k[1]),
}
n = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
for a in n:
try:
eval(self.result[a])
except Exception as e:
pass
finally:
if eval(self.result[a]) == 24:
print(self.result[a])
if __name__ == "__main__":
print('--从小到大输入--')
a = input("请输入第一个数:")
b = input("请输入第二个数:")
c = input("请输入第三个数:")
d = input("请输入第四个数:")
number = {'A': a, 'B': b, 'C': c, 'D': d}
start = Tenty_four(number)
start.digital()
start.operate()
start.bracket()
分布介绍
1.游戏规则
游戏将展示四张卡片,每张卡片上都有一个正整数,每个数字使用一次,进行加、减、乘、除计算得出24点的结果,并将计算过程输入。
2.代码结构
数字枚举
def digital(self):
for i in self.number:
for j in self.number:
if j != i:
for m in self.number:
if m != i and m != j:
for n in self.number:
if n != i and n != j and n != m:
a = [self.number[i], self.number[j], self.number[m], self.number[n]]
self.basket_num.append(a)
for item in self.basket_num:
if item not in self.basket_new:
self.basket_new.append(item)
四个整数一共会产生24种排列组合结果,如果有重复组合存在,还需要对得出的排列结果进行去重处理。
计算符号枚举
def operate(self):
for i in self.typeid:
for j in self.typeid:
for k in self.typeid:
a = [i, j, k]
self.basket_typ.append(a)
四种运算符号总共产生48种排列组合
计算顺序枚举(括号)
def bracket(self):
k = ["(", ")"]
for i in self.basket_new:
for j in self.basket_typ:
self.result = {
'A': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(k[0], i[0], j[0], i[1], k[1], j[1], i[2], j[2], i[3]),
'B': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(i[0], j[0], k[0], i[1], j[1], i[2], k[1], j[2], i[3]),
'C': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(i[0], j[0], i[1], j[1], k[0], i[2], j[2], i[3], k[1]),
'D': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(k[0], i[0], j[0], i[1], k[1], j[1], k[0], i[2], j[2], i[3], k[1]),
'E': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(k[0], k[0], i[0], j[0], i[1], k[1], j[1], i[2], k[1], j[2], i[3]),
'F': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(k[0], i[0], j[0], k[0], i[1], j[1], i[2], k[1], k[1], j[2], i[3]),
'G': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(i[0], j[0], k[0], k[0], i[1], j[1], i[2], k[1], j[2], i[3], k[1]),
'H': "{0}{1}{2}{3}{4}{5}{6}{7}{8}{9}{10}".format(i[0], j[0], k[0], i[1], j[1], k[0], i[2], j[2], i[3], k[1], k[1]),
'J': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(k[0], i[0], j[0], i[1], j[1], i[2], k[1], j[2], i[3]),
'K': "{0}{1}{2}{3}{4}{5}{6}{7}{8}".format(i[0], j[0], k[0], i[1], j[1], i[2], j[2], i[3], k[1]),
}
n = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'J', 'K']
for a in n:
try:
eval(self.result[a])
except Exception as e:
pass
finally:
if eval(self.result[a]) == 24:
print(self.result[a])
四个数字加上三个运算符总共有10种括号位置,直接暴力手打。
使用eval函数运行作为字符串的算式时,会出现除数为零的情况,因此引入异常处理,保证程序运行。
新手写代码,代码可能不是很规整,bug似乎也不少