day006--列表应用

应用一

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()
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值