問題描述:從撲克中每次取出4張牌。使用加減乘除,第乙個能得出24者為贏。(其中,j代表11,q代表12,k代表13,a代表1),按照要求程式設計解決24點遊戲。
思路:1、隨機產生四個數(1-13)將其排列組合結果去重新增到乙個列表中
2、列舉計算並去重
3、顯示
# _author:「yyx」
# date: 2018/10/5
import itertools
import random
listcardnum = # 隨機產生四個數列表
listcardset = # 四個數所有排列組合列表
tuplecard = () # 以元組的形式存放所有的排列組合
listoperator = ["+", "-", "*", "/"] # 運算子列表
listcardvalue = # 滿足24點的結果列表
cardone = 0
cardtwo = 0
cardthree = 0
cardfour = 0 # 四張牌的點數
# 隨機發牌
def card_rand():
for i in range(4):
listcardset = list(set(itertools.permutations(listcardnum, 4)))
return listcardset
listcard = card_rand() # 排列組合結果
# print(listcard)
# 計算
def card_calculate():
for i in range(len(listcard)):
tuplecard = listcard[i]
# print(type(tuplecard))
cardone = tuplecard[0]
cardtwo = tuplecard[1]
cardthree = tuplecard[2]
cardfour = tuplecard[3] # 得到四張牌的點數
flag = false # 標誌位
try:
for o1 in listoperator:
resultone = 0 # 前兩個數的運算結果
if o1 == "+":
resultone = cardone+cardtwo
elif o1 == "-":
resultone = cardone-cardtwo
elif o1 == "*":
resultone = cardone*cardtwo
elif o1 == "/":
resultone = cardone/cardtwo
for o2 in listoperator:
resulttwo = 0 # 前三個數的運算結果
if o2 == "+":
resulttwo = resultone + cardthree
elif o2 == "-":
resulttwo = resultone - cardthree
elif o2 == "*":
resulttwo = resultone * cardthree
elif o2 == "/":
resulttwo = resultone / cardthree
for o3 in listoperator:
resultthree = 0 # 四個數的運算結果
resultfinal = 0 # 最後兩個數的運算結果
if o3 == "+":
resultthree = resulttwo + cardfour
resultfinal = cardthree + cardfour
elif o3 == "-":
resultthree = resulttwo - cardfour
resultfinal = cardthree - cardfour
elif o3 == "*":
resultthree = resulttwo * cardfour
resultfinal = cardthree * cardfour
elif o3 == "/":
resultthree = resulttwo / cardfour
resultfinal = cardthree / cardfour
# 判斷結果是否為24
if resultthree == 24:
flag =true
# 括號運算
elif resultfinal != 24 and 24%resultone == 0:
for o4 in listoperator:
resultthree = 0
if o4 == "+":
resultthree = resultone + resultfinal
elif o4 == "-":
resultthree = resultone - resultfinal
elif o4 == "*":
resultthree = resultone * resultfinal
elif o4 == "/":
resultthree = resultone / resultfinal
if resultthree == 24:
flag = true
if flag:
break
if flag:
break
if flag:
break
if flag:
break
except zerodivisionerror:
pass
return set(listcardvalue) # 去重
if __name__ == "__main__":
print("四張撲克牌為:%s %s %s %s" % (listcard[0][0], listcard[0][1], listcard[0][2], listcard[0][3]))
cal = card_calculate()
print("這組牌共有 %s 種演算法" % len(cal))
for i in cal:
print(i)
總結:演算法是在網上找的,只能看懂這種演算法。。。 24點遊戲簡單版
題目名稱 24點遊戲 經典的紙牌益智遊戲 題目分析 隨機生成4個代表撲克牌牌面的數字字母,程式自動列出所有可能算出24的表示式,可以利用窮舉法列出4個數字加減乘除的各種可能性,包括括號的演算法,並且要利用迴圈控制計算範圍,防止出現重複的表示式。演算法構造 1 利用隨機函式生成4個隨機數 2 將4個數...
Python實現24點遊戲
24點遊戲是經典的紙牌益智遊戲。我的思路是把這4個數分成2部分,前兩個數一起,後兩個數一起,先計算除前兩個數所有可能的結果和後兩個數所有可能的結果。最後將它們的結果互相計算,結果與24比較,如果等於24則成功。建立使用者類,整個遊戲的體系就是建立乙個使用者類來儲存使用者的資訊,如姓名,生命值,分數等...
C 實現簡單24點遊戲
隨機生成4個代表撲克牌牌面的數字字母,程式自動列出所有可能算出24的表示式,用擅長的語言 c c j a或其他均可 實現程式解決問題。程式風格良好 使用自定義注釋模板 列出表示式無重複。以下為源 include include include include using namespace std ...