应用一
CRAPS赌博游戏:
玩家摇两颗色子,如果第一次摇出了7点或11点,玩家胜;
如果摇出了2点、3点或12点,庄家胜;
其他情况不分胜负,游戏继续。
玩家重新摇色子,如果摇出了第一次摇的点数,玩家胜;
如果摇出了7点,庄家胜;
其他情况游戏继续,直到分出胜负。
import random # 导入随机数函数
money = 1000 # 给定初始资金
while money > 0: # 资金必须大于0才能开始
print(f'玩家总资产:{money}元。') # 打印现有资金
debt = int(input('请下注:')) # 输入下注资金,
while debt <= 0 or debt > money: # 输入的下注资金小于0或者大于现有资金需要重新输入
debt = int(input('请下注:'))
first_point = random.randint(1, 6) + random.randint(1, 6) # 第一次摇色子
print(f'玩家摇出了{first_point}点') # 打印色子点数
if first_point in [7, 11]: # 色子点数是7或者11
print('玩家胜')
money += debt # 玩家胜利,下注资金加倍返回
elif first_point in [2, 3, 12]: # 色子点数是2或者3或者12
print('庄家胜') # 庄家胜利,扣除下注资金
money -= debt
else:
while True: # while循环
current_point = random.randint(1, 6) + random.randint(1, 6)# 第二次摇色子
print(f'玩家摇出了{current_point}点') # 打印第二次摇色子点数
if current_point == first_point: # 如果第二次点数等于第一次点数则玩家胜利
print('玩家胜')
money += debt
break # 结束本循环回到上一级
elif current_point == 7: # 如果玩家摇出7点,庄家胜利
print('庄家胜')
money -= debt
break # 结束本循环回到上一级
print('玩家破产,游戏结束!')
应用二
色子点数统计:把一颗色子摇6000次,统计每一面出现的次数。
import random # 导入随机数函数
fs = [0] * 6 # fs = [0 , 0 , 0 , 0 , 0 , 0]
for _ in range(6000):
face = random.randint(1, 6) # 随机产生1到6的数字,运行6000次
fs[face - 1] += 1 # 用色子点数减一作列表下标取除元素,元素出现一次就加一
for i in range(1, 7):
print(f'{i}点出现了{fs[i - 1]}次') # 打印色子个面出现的次数
应用三
列表生成式(推导式):创建列表的一种字面量语法
a = [x for x in range(1, 101)]
print(a)
b = [x for x in range(2, 101, 2)]
print(b)
c = [x for x in range(1, 101) if x % 3 == 0 or x % 5 == 0]
print(c)
d = [x ** 2 for x in range(1, 11)] # [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
print(d)
应用四
实现一个双色球随机选号的程序
import random # 导入随机数产生的函数
n = int(input('机选几注: ')) # 输入下注的数量
for _ in range(n):
red_balls = [x for x in range(1, 34)] # 产生一个1到33的序列
selected_balls = random.sample(red_balls, 6) # 通过random模块的sample函数实现无放回随机抽样,抽出6个红球
selected_balls.sort() # 给列表元素排序(默认升序,从小到大)
blue_ball = random.randint(1, 16) # 在1到16中抽取一个蓝球
selected_balls.append(blue_ball) # 将蓝色球号码加入红色球列表最后
for ball in selected_balls: # 遍历各个球号码
print(f'{ball:0>2d}', end=' ') # 格式化输出整数,不够两位左边补0
print()
应用五
Josephu(约瑟夫)环问题:
有15个男人和15个女人乘船在海上遇险,为了让一部分人活下来,
不得不将其中15个人扔到海里,有个人想了个办法让大家围成一个圈,
由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,
报到9的人继续扔到海里面,直到将15个人扔到海里。
最后15个女人都幸免于难,15个男人都被扔到了海里。
问这些人最开始是怎么站的,哪些位置是男人,哪些位置是女人。
persons = [True] * 30 # 赋值一个列表,三十个元素都是True
index, counter, num = 0, 0, 0 # 赋值三个变量,列表下标为0,死亡人数为0,人员报数为0
while counter < 15: # 建立while循环,当死亡人数小于15时一直循环
if persons[index]: # 报数开始,每过一人数字加1
num += 1
if num == 9: # 当人员报数是9时,将此人员元素改为False
persons[index] = False
counter += 1 # 死亡人数加1,报数重新开始
num = 0
index += 1 # 接着上次False元素继续报数,
index %= 30 # 用x对30取余数,30的余数只能是0到29
for person in persons:
print('女' if person else '男', end='') # 三元条件运算,用person遍历persons元素是True就打印女,否则打印男
print()