背景:最近看了一部赌王体坛纪录片,片中出现了一句话,只要66%胜率,别墅靠海完全不是问题,在赔率吃亏的情况下,仅靠多出的16%胜率,能赢吗?带着疑问,我写了段代码验证一下是否真是如此。
规则:假设投入固定本金100元,每次下注10元,胜率66%,赔率0.8,错误的话则损失投注金额
import random
#下注次数
final_count = int(input('请输入下注次数:'))
#final_count = 100
current_count = 1
#获得随机数,间接表示获胜概率,用1-66表示胜利,即66%的胜率,剩余表示失败,即34%失败率
num = random.randint(1, 100)
#本金,本次测试固定为100
money = int(input('请输入投入本金:'))
#money = 100
#单次下注金额(这是需要进一步优化的点)
# per_money = int(input('请输入单次下注金额:'))
per_money = int(money/10)
#per_money = 30
while current_count < final_count:
#判断剩余本金是否能完成单次下注
if money <= per_money:
print('本金小于下注单次金额,无法完成下注!')
break
#获得一个随机数
num = random.randint(1, 100)
#根据随机数大小对本金进行增减
if num >= 1 and num <= 66:
profit = per_money * 0.8
money += profit
else:
money -= per_money
#计算下注次数
current_count += 1
#输出打印计算过程,1代表胜利,0代表失败
if num >= 1 and num <= 66:
print(str(current_count) + '\t' + '胜负:1\t'+ '金额:' + str(money))
else:
print(str(current_count) + '\t' + '胜负:0\t' + '金额:' + str(money))
投注100次运行结果如下:
假如投注10000次,结果会如何呢?
接近20000元,一个非常惊人的结果。
改进:我们改进一下投注额的算法,将投注额改为每次投入本金的1/10,即随着本金增大,投注额等比例变多
import random
#下注次数
final_count = int(input('请输入下注次数:'))
#final_count = 100
current_count = 1
#获得随机数,间接表示获胜概率,用1-66表示胜利,即66%的胜率,剩余表示失败,即34%失败率
num = random.randint(1, 100)
#本金,本次测试固定为100
money = int(input('请输入投入本金:'))
while current_count < final_count:
#获得一个随机数
num = random.randint(1, 100)
#投注额占本金的1/10
per_money = money/10
#根据随机数大小对本金进行增减
if num >= 1 and num <= 66:
profit = per_money * 0.8
money += profit
else:
money -= per_money
#输出打印计算过程,1代表胜利,0代表失败
if num >= 1 and num <= 66:
print(str(current_count) + '\t' + '胜负:1\t'+ '金额:' + str(money))
else:
print(str(current_count) + '\t' + '胜负:0\t' + '金额:' + str(money))
# 计算下注次数
current_count += 1
投注10000次结果结果如下,达到了一个非常吃惊的数字:
回到现实,要想产生这样的结果,还是不切实际的,必须满足以下两个条件:
- 胜率能稳定保持在66%
- 投注额不会受到最高投注额的限制