前言:一直学也不是个事,这个时候我们应该停下来,把我们前面所学的知识串起来,看看自己能实现什么样的功能,这里我想到两个有趣的程序,大家快来试试吧!
目录
1.石头剪刀布
2.斗地主发牌
要求:题目1: 石头剪刀布
游戏开始,初始状态下用户和电脑都有 100 分,赢一局+10 分,输一局-10 分
当用户为 0 分时,游戏结束,提示游戏结束,比赛输了
当用户为 200 分时,游戏结束,提示游戏结束,赢得比赛、每轮比赛都输出当前的分数
1 代表石头 2 代表剪刀 3 代表布
提示:本题所用到的知识点random,前面没有提到过。
导入random
import random as rd
computer_num = rd.randint(1, 3) #用来随机生成1 ~ 3之间的数字
我这里为了快点胜利设置的是玩家胜利加50分
游戏代码:
"""
题目 1: 石头剪刀布
游戏开始,初始状态下用户和电脑都有 100 分,赢一局+10 分,输一局-10 分
当用户为 0 分时,游戏结束,提示游戏结束,比赛输了
当用户为 200 分时,游戏结束,提示游戏结束,赢得比赛、每轮比赛都输出当前的分数
。1 代表石头 2 代表剪刀 3 代表布
提示:本题所用到的知识点random,前面没有提到过。
导入random
import random as rd
computer_num = rd.randint(1, 3) #用来随机生成1 ~ 3之间的数字
"""
# 导入random模块
import random as rd
# 设置电脑与玩家的初始分数
computer_score = 100 # 电脑分数
player_score = 100 # 玩家分数
# 设置玩家与电脑获胜分别获得对方多少分
computer_victory = 10 # 电脑获胜
player_victory = 50 # 玩家获胜
# 设置数字对应的拳法
rule = {1: '石头', 2: '剪刀', 3: '布'}
# 开始游戏
restart = True # 用来判断电脑是否需要重新出拳
computer_num = 1
while True:
if restart:
# 电脑开始出拳
print('------电脑开始出拳------')
print('----------------------')
computer_num = rd.randint(1, 3)
print('------电脑出拳完毕------')
# 玩家开始出拳
try:
player_num = int(input("请玩家出拳(1:石头,2:剪刀,3:布):"))
# 玩家数字不在出拳范围
if player_num > 3 or player_num < 1:
# 玩家出拳错误
print("------玩家出拳错误------")
# 电脑不需要再重新出拳
restart = False
continue # 这段代码和下面有一段代码重复(这是程序员的大忌),后续可以用函数处理现在就不处理了
restart = True # 玩家出拳成功,电脑重新出拳
"""
石头剪刀布的算法
找规律
玩家 1 电脑 2
玩家 2 电脑 3
玩家 3 电脑 1
这种情况都是玩家胜利
用玩家的出拳数减去电脑的,得到的结果是 -1 或者 2
所以可以得到算法,player_num - computer_num in [-1, 2] 玩家获胜
player_num - computer_num == 0 平局
反之 电脑获胜
(也可以用一个一个的if来判断谁获胜)
"""
print('玩家:', rule[player_num], ' VS ', rule[computer_num], ':电脑')
if (player_num - computer_num) in [-1, 2]:
print('--------玩家获胜--------')
# 加分程序
player_score += player_victory
computer_score -= player_victory
elif player_num - computer_num == 0:
print('----------平局----------')
else:
print('--------电脑获胜--------')
# 加分程序
player_score -= computer_victory
computer_score += computer_victory
# 显示当前分数
print('----------------------------')
print('玩家分数:', player_score)
print('电脑分数:', computer_score)
print('----------------------------')
# 判断游戏是否结束
if player_score <= 0:
print("游戏结束,电脑获胜!")
break
if computer_score <= 0:
print("游戏结束,玩家获胜!")
break
except:
# 玩家出拳错误
print("------玩家出拳错误------")
# 电脑不需要再重新出拳
restart = False
continue
# 本段代码中用到的是for循环+if, 有部分代码重复,后续可以用面向对象的思想来改善。还有提示信息也可以扩展的更好,更像一个游戏。
要求:做出斗地主发牌的效果
提示:random.shuffel(列表)能将列表打乱,sorted()内置函数能排序列表。
效果图:
游戏代码:
"""
斗地主,发牌功能
"""
import random as rd
# 牌库
card_dict = {0: '♦3', 1: '♣3', 2: '♥3', 3: '♠3', 4: '♦4', 5: '♣4', 6: '♥4', 7: '♠4',
8: '♦5', 9: '♣5', 10: '♥5', 11: '♠5', 12: '♦6', 13: '♣6', 14: '♥6', 15: '♠6',
16: '♦7', 17: '♣7', 18: '♥7', 19: '♠7', 20: '♦8', 21: '♣8', 22: '♥8', 23: '♠8',
24: '♦9', 25: '♣9', 26: '♥9', 27: '♠9', 28: '♦10', 29: '♣10', 30: '♥10', 31: '♠10',
32: '♦J', 33: '♣J', 34: '♥J', 35: '♠J', 36: '♦Q', 37: '♣Q', 38: '♥Q', 39: '♠Q',
40: '♦K', 41: '♣K', 42: '♥K', 43: '♠K', 44: '♦A', 45: '♣A', 46: '♥A', 47: '♠A',
48: '♦2', 49: '♣2', 50: '♥2', 51: '♠2', 52: '小王', 53: '大王'}
# 玩家
play1 = {}
play2 = {}
play3 = {}
# 地主牌
landlord_card = {}
a = []
# 发牌算法
# 1.洗牌
list_card = list(card_dict.items())
rd.shuffle(list_card)
# 2.发牌
count = 0
for i in list_card:
if count > 50:
landlord_card[i[0]] = i[1]
continue
if count % 3 == 0:
play1[i[0]] = i[1]
elif count % 3 == 1:
play2[i[0]] = i[1]
else:
play3[i[0]] = i[1]
count += 1
# 给玩家的牌进行排序
play1 = {k: play1[k] for k in sorted(play1.keys(), reverse=True)}
play2 = {k: play2[k] for k in sorted(play2.keys(), reverse=True)}
play3 = {k: play3[k] for k in sorted(play3.keys(), reverse=True)}
print(' '.join(list(play1.values())))
print(' '.join(list(play2.values())))
print(' '.join(list(play3.values())))
print(' '.join(list(landlord_card.values())))