用数组做一副扑克牌用扑克牌做数学游戏
下面我将展示如何用Python创建一个扑克牌的类,并使用它进行一些数学游戏。
python
import random
class Deck:
def __init__(self):
self.suits = ['♠', '♥', '♦', '♣']
self.values = ['A', '2', '3', '4', '5', '6', '7', '8', '9', '10', 'J', 'Q', 'K']
self.cards = []
self.reset
def reset(self):
重置并洗牌
self.cards = []
for suit in self.suits:
for value in self.values:
# 为每张牌分配数值(用于数学游戏)
numeric_value = self.get_numeric_value(value)
self.cards.append({
'suit': suit,
'value': value,
'numeric_value': numeric_value
})
self.shuffle
def shuffle(self):
洗牌
random.shuffle(self.cards)
def get_numeric_value(self, value):
将牌面值转换为数值
if value == 'A':
return 1
elif value in ['J', 'Q', 'K']:
return 10
else:
return int(value)
def deal(self, num_cards=1):
发牌
if len(self.cards)
raise ValueError("牌不够了!")
dealt_cards = []
for _ in range in range(num_cards):
dealt_cards.append(self.cards.pop)
return dealt_cards
def display_card(self, card):
显示单张牌
return f"{card['value']}{card['suit']}
def display_cards(self, cards):
显示多张牌
return [self.display_card(card) for card in cards]
def __str__(self):
return f"牌堆中有 {len(self.cards)} 张牌
# 数学游戏函数
def blackjack_game:
21点游戏简化版
deck = Deck
player_hand = deck.deal(2)
dealer_hand = deck.deal(2)
print("=== 21点游戏 ===")
print(f"你的手牌: {deck.display_cards(player_hand)}")
print(f"庄家的明牌: {deck.display_card(dealer_hand[0])}")
player_score = sum([card['numeric_value'] for card in player_hand])
print(f"你的当前分数: {player_score}")
while player_score
action = input("要牌(hit)还是停牌(stand)? ").lower
if action == 'hit':
new_card = deck.deal(1)[0]
player_hand.append(new_card)
player_score += new_card['numeric_value']
print(f"你抽到了: {deck.display_card(new_card)}")
print(f"你的手牌: {deck.display_cards(player_hand)}")
print(f"你的当前分数: {player_score}")
if player_score > 21:
print("爆了! 你输了!")
return
else:
break
dealer_score = sum([card['numeric_value'] for card in dealer_hand])
print(f"庄家的手牌: {deck.display_cards(dealer_hand)}")
print(f"庄家的分数: {dealer_score}")
# 庄家抽牌直到至少17点
while dealer_score
new_card = deck.deal(1)[0]
dealer_hand.append(new_card)
dealer_score += new_card['numeric_value']
print(f"庄家抽到了: {deck.display_card(new_card)}")
print(f"最终结果
if dealer_score > 21 or player_score > dealer_score:
print("恭喜! 你赢了!")
elif player_score
print("你输了!")
else:
print("平局!")
def poker_probability:
计算特定牌型的概率
print("\
=== 扑克概率计算 ===")
print("计算在一副牌中随机抽取5张牌,获得以下牌型的概率:")
# 组合计数函数
def nCr(n, r):
import math
return b(n, r)
total_combinations = nCr(52, 5)
print(f"总可能的5张牌组合数: {total_combinations:,}")
# 同花顺
straight_flush = 4 * 10 # 4种花色 × 10种可能的顺子(A-5到10-A)
print(f"同花顺概率: {straight_flush/total_combinations*100:.6f}% ({straight_flush}种)")
# 四条
four_of_a_kind = 13 * nCr(4, 4) * nCr(48, 1)
print(f"四条概率: {four_of_a_kind/total_combinations*100:.6f}% ({four_of_a_kind}种)")
# 葫芦
full_house = 13 * nCr(4, 3) * 12 * nCr(4, 2)
print(f"葫芦概率: {full_house/total_combinations*100:.6f}% ({full_house}种)")
# 同花
flush = nCr(13, 5) * 4
print(f"同花概率: {flush/total_combinations*100:.6f}% ({flush}种)")
# 顺子
straight = 10 * (4**5)
print(f"顺子概率: {straight/total_combinations*100:.6f}% ({straight}种)")
def memory_math_game:
记忆与数学游戏
print("\
=== 记忆与数学游戏 ===")
print("记住显示的牌,然后回答数学问题!")
deck = Deck
cards_to_memorize = deck.deal(5)
print("记住这些牌:")
for i, card in enumerate(cards_to_memorize, 1):
print(f"{i}. {deck.display_card(card)}")
import time
time.sleep(10) # 给玩家10秒记忆时间
# 清屏效果
print("\
* 50)
# 数学问题
values = [card['numeric_value'] for card in cards_to_memorize]
total = sum(values)
answer = int(input(f"这些牌的总数值是多少? "))
if answer == total:
print("正确! 太棒了!")
微扑克在线print("这些牌是:", deck.display_cards(cards_to_memorize))
print(f"数值分别是: {values}, 总和是: {total}")
else:
print(f"错误! 正确答案是: {total}")
print("这些牌是:", deck.display_cards(cards_to_memorize))
print(f"数值分别是: {values}")
# 主程序
if __name__ == "__main__":
print("欢迎来到扑克牌数学游戏!")
while True:
print("\
请选择游戏:")
print("1. 21点游戏")
print("2. 扑克概率计算")
print("3. 记忆与数学游戏")
print("4. 退出")
choice = input("请输入选择(1-4): ")
if choice == '1':
blackjack_game
elif choice == '2':
poker_probability
elif choice == '3':
memory_math_game
elif choice == '4':
print("谢谢玩扑克牌数学游戏!")
break
else:
print("无效选择,请重新输入!")
程序功能说明
这个程序实现了以下功能:
1. 扑克牌类(Deck):
2. 数学游戏:
如何使用
1. 运行程序后,选择想要玩的游戏
2. 按照提示进行操作
3. 游戏结束后可以选择继续玩其他游戏或退出
这个程序不仅展示了如何使用数组/列表来管理扑克牌,还结合了多种数学概念,包括概率计算、算术运算和逻辑思维训练。