python - 如何更改此程序以使用 random.shuffle 而不是 random.sample?
问题描述
我想知道是否有人愿意帮助我,当涉及到这个程序时。背景故事是创建一个纸牌游戏,当你随机抽取 6 张牌时,如果其中一张牌是 A,则玩家赢一美元,否则输一美元。这种情况一直持续到玩家将钱翻倍或全部输光。游戏运行 1000 次,初始初始为 10 美元。这是我的代码:
import random
faceValues = ['ace', '2', '3', '4', '5', '6',
'7', '8', '9', '10', 'jack',
'queen', 'king']
suits = ['clubs', 'diamonds', 'hearts',
'spades']
def shuffledDeck():
deck = []
for faceValue in faceValues:
for suit in suits:
deck.append(faceValue + ' of ' + suit)
random.shuffle(deck)
return deck
def faceValueOf(card):
return card.split()[0]
def suitOf(card):
return card.split()[2]
d = shuffledDeck()
def game(initial):
counts = 0
bankroll = initial
while 0 < bankroll < 2*initial:
ace = 0
table = random.sample(shuffledDeck(),6)
counts += 1
for cards in table:
if faceValueOf (cards) == 'ace':
ace += 1
if ace >= 1:
bankroll += 1
else:
bankroll -= 1
return counts
initial = float(input('Enter initials: '))
totalcounts = 0
for x in range(1000):
totalcounts += game(initial)
print('Average number of rounds: ', totalcounts/1000)
我想知道如何才能改变这个程序,所以我可以使用 random.shuffle,而不是使用 random.sample。我尝试了很多方法来改变这个程序,但无论什么时候,我的最终结果都不一样。我只是想改变我必须抽牌的部分。当从最初的 10 开始运行这个程序时,就所玩的回合而言,答案是大约 45 到 50。编辑:试图保持程序相对相同,只想改变我真正需要的。
解决方案
我认为您可以对游戏机制采取更简单的方法。用于numpy
从 1 到 52 取六个随机整数。将 ace 定义为具有 1-4 的值。因此,如果已排序数组的第一个元素 < 5,那么您就画了一张 ace。
import numpy as np
# simulates six cards
draw = np.sort(np.random.randint(1, 52, 6))
if draw[0] < 5:
print('drew an ace')
else:
print('did not draw an ace')
每当您需要进行另一轮时,您可以在循环中重复抽签。
如果您需要保留卡片名称,则构建卡片组一次,并在每次迭代时从卡片组数组中采样六个项目。没有必要洗牌。
推荐阅读
- typescript - 如何确定联合类型是否为函数
- ruby-on-rails - rails 视图中的 image_tag 需要很长时间才能在控制器测试中呈现
- javascript - ReactJS 上的 .map() 方法
- r - 将 SharePoint 列表中的数据读入 R
- java - Selenium Java:如何使用注释从 Excel 中读取数据
- erlang - 如何接收发送到在 gen_server 内运行的 PID 的消息
- angular - angular-oauth2-oidc - 阅读用户声明
- django - 如何自动将配置文件添加到 ManyToManyField?
- javascript - 自定义钩子是一个函数,如何触发另一个函数组件的重新渲染?
- ffmpeg - 我可以将多个 ffmpeg 输出通过管道传输到不同的管道吗?