400-616-5551

您所在位置: 首页> 学习课程> python游戏实践 | Python 实现简单的24点游戏

python游戏实践 | Python 实现简单的24点游戏

发布百知教育 来源:学习课程 2019-11-25

游戏规则:


给出4个1-10的数,通过加减乘除运算得到24


思路:


1,通过使用循环列出4个数所有24种排列方式;

2,将3个运算符插入到每两个数之间;

3,计算三个运算符的两边的数,并将数保存用于运算;

4,4个数变3个数,3个数变两个数,两个数变1个数;

5,注意除号运算。


import random as r
import os

number = [0, 0, 0, 0]
countTool = ["+", "-", "*", "/"]
iop = 1
k = "("
z = ")"
# 计算两个数(param, param1)运算的结果,运算符op
def count_2_number(param, param1, op):
   if countTool[op] == "+":
       return param + param1
   if countTool[op] == "-":
       return param - param1
   if countTool[op] == "*":
       return param * param1
   if countTool[op] == "/" and param1 != 0 and param % param1 == 0:
       return param / param1
   else:
       return -9999
# 获得等于24的表达式 参数(param, param1, param2, param3
# 计算4个数的所有得到24的表达式
def get_expression(param, param1, param2, param3):
   for op1 in range(4):
       front = count_2_number(param, param1, op1)
       for op2 in range(4):
           middle = count_2_number(param1, param2, op2)
           again1 = count_2_number(front, param2, op2)
           again2 = count_2_number(param, middle, op1)
           for op3 in range(4):
               last = count_2_number(param2, param3, op3)
               again3 = count_2_number(param1, last, op3)
               again4 = count_2_number(middle, param3, op2)

               # 5种不同的运算顺序得到的5种结果
               
result1 = count_2_number(again1, param3, op3)
               result2 = count_2_number(again2, param3, op3)
               result3 = count_2_number(param, again3, op1)
               result4 = count_2_number(param, again4, op1)
               result5 = count_2_number(front, last, op2)

               if result1 == 24:
                   return k + k + str(param) + countTool[op1] + str(param1) + z + countTool[op2] + str(
                       param2) + z + countTool[op3] + str(param3) + "=24"
               
if result2 == 24:
                   return k + str(param) + countTool[op1] + k + str(param1) + countTool[op2] + str(
                       param2) + z + z + countTool[op3] + str(param3) + "=24"
               
if result3 == 24:
                   return str(param) + countTool[op1] + k + str(param1) + countTool[op2] + k + str(
                       param2) + countTool[op3] + str(param3) + z + z + "=24"
               
if result4 == 24:
                   return str(param) + countTool[op1] + k + k + str(param1) + countTool[op2] + str(
                       param2) + z + countTool[op3] + str(param3) + z + "=24"
               
if result5 == 24:
                   return k + str(param) + countTool[op1] + str(param1) + z + countTool[op2] + k + str(
                       param2) + countTool[op3] + str(param3) + z + "=24"
   
return "null"
# 使用4个嵌套for循环列出排列组合
def count24():
   haveResult = 0
   
for a in range(4):
       for b in range(4):
           if a == b:
               continue
           for
c in range(4):
               if a == c or b == c:
                   continue
               for
d in range(4):
                   if a == d or b == d or c == d:
                       continue
                   
# print(str(number[a]) + "\t"
                   #       + str(number[b]) + "\t"
                   #       + str(number[c]) + "\t"
                   #       + str(number[d]) + "\t")
                   
expr = get_expression(number[a], number[b], number[c], number[d])
                   if expr.__eq__("null"):
                       continue
                   else
:
                       print(expr)
                       haveResult = 1
   
if haveResult == 0:
       print("无解!")


# 等待用户输入 给出答案
def wait_for_input():
   cmdStr = input()
   count24()


while iop == 1:
   print("请通过计算获得24:=======================================")
   for i in range(4):
       number[i] = 1 + (r.random() * 10).__int__()
       print(number[i])
   wait_for_input()



python培训班:http://www.baizhiedu.com/python2019


上一篇:Python3.9新鲜出炉,Python3.9有什么特性?

下一篇:应届生去公司找个Java程序员的职位需要什么技能?

相关推荐

www.baizhiedu.com

有位老师想和您聊一聊

关闭

立即申请