列表续
综合运用练习:
CRAPS赌博游戏:
玩家摇两颗色子,如果第一次摇出了7点或11点,玩家胜;
如果摇出了2点、3点或12点,庄家胜;
其他情况不分胜负,游戏继续。
玩家重新摇色子,如果摇出了第一次摇的点数,玩家胜;
如果摇出了7点,庄家胜;
其他情况游戏继续,直到分出胜负。
game_count = 0
player_money = 2000
while player_money > 0:
print(f"玩家还有{player_money}元")
money = int(input("请下注:"))
while money <= 0 or money > player_money:
money = int(input("请重新下注:"))
first_point = random.randint(1, 6) + random.randint(1, 6)
print(f"玩家摇出了{first_point}点")
if first_point in [7, 11]:
print("玩家胜利")
player_money += money
elif first_point in [2, 3, 12]:
print("庄家胜利")
player_money -= money
else:
game_over = False
while not game_over:
current_point = random.randint(1, 6) + random.randint(1, 6)
print(f"玩家摇出了{current_point}点")
if current_point == first_point:
print("玩家胜利")
player_money += money
game_over = True
elif current_point == 7:
print("庄家胜利")
player_money -= money
game_over = True
game_count += 1
else:
print(f"玩家玩了{game_count}次游戏,所剩金额{player_money}终于破产了!")
-
列表 - 容器数据类型 - 一个变量可以保存多个数据通过循环可以完成对列表中每个元素的操作
-
列表生成式(推导式) —> 创建列表的一种字面量语法
问题引入:把一颗色字摇6000次,统计每一面出现的次数
import random fs = [0] * 6 for _ in range(6000): face = random.randint(1, 6) # 获取列表元素的索引运算 fs[face - 1] += 1 print(fs) for i in range(len(fs)): print(f"{i + 1}点出现了{fs[i]}次")
-
语法
表名 = [变量名 for 变量名 in range(…, …)]
a = [x for x in range(1, 101)] print(a) # 输出1~100 b = [x for x in range(2, 101, 2)] print(b) # 输出1~100的偶数 c = [x for x in range(1, 101) if x % 3 == 0 or x % 5 == 0] print(c) # 输出1~100中3或5的倍数 d = [x ** 2 for x in range(1, 11)] print(d) # 输出1~10的平方
练习:双色球:6个红色球 + 1个蓝色球
红色球:1-33选6个(不重复)球
蓝色球:1-16个选1个球
实现一个双色球选号的程序import random n = int(input("机选几注?")) red = [x for x in range(1, 34)] blue = [x for x in range(1, 17)] red_blue = [] for _ in range(6): index = random.randrange(len(red)) red_blue.append(red[index]) red.pop(index) red_blue.sort() red_blue.append(blue[random.randint(0, 16)]) print(red_blue) # 方法一 import random n = int(input("机选几注?")) for _ in range(n): red_blue = [] while len(red_blue) <= 6: red_num = random.randint(1, 33) if red_num not in red_blue: red_blue.append(random.randint(1, 33)) # 给列表元素排序(默认升序,从小到达) # red_blue.sort(reversed = True) # 降序 red_blue.sort() red_blue.append(random.randint(1, 16)) for x in red_blue: print(f"{x:0>2d}", end=" ") print() # 方法二
补充:random函数
import random # random模块的sample随机抽样函数 red = [x for x in range(1, 34)] red_blue = random.sample(red, 6) print(red_blue)
练习:有15个男人和15个女人乘船在海上遇险,为了让一部分人活下来,不得不将其中15个人扔到海里,有个人想了个办法让大家围成一个圈,由某个人开始从1报数,报到9的人就扔到海里面,他后面的人接着从1开始报数,报到9的人继续扔到海里面,直到将15个人扔到海里。最后15个女人都幸免于难,15个男人都被扔到了海里。问这些人最开始是怎么站的,哪些位置是男人,哪些位置是女人。
people = [True] * 30
count, index, num = 0, 0, 0
while count < 15:
if people[index]:
num += 1
if num == 9:
people[index] = False
count += 1
num = 0
index += 1
index %= 30
for person in people:
print("女" if person else "男", end="") # 三元条件运算
print()