13161216443

您所在位置: 首頁> 學習課程> 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.akpsimsu.com/python2019


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

下一篇:應屆生去公司找個Java程序員的職位需要什么技能?

相關推薦

www.akpsimsu.com

有位老師想和您聊一聊

關閉

立即申請