【敬初学者】Python基础学完了,该怎么知道自己学的怎么样呢?十个经典实战小项目附源码

前言

初学者要想成功,一句话,大量的实操,大量的练,乍一看我的这个答案似乎有点敷衍,但是这确实是我接触Python以来,总结出的最有价值的经验,接下来分享我自己初学时用来练手的经典实战小项目,适合初学者敲的代码。
在这里插入图片描述

1.街霸游戏

1.1 KO街霸

在这里插入图片描述游戏小剧场
特别调查员春丽突然收到了来自中尉查理的一封邮件,邮件里详细地说明了神月家族在美国唐人街举办的街霸挑战赛,挑战的终极boss正是街霸维加。春丽在很小的时候,父亲就被维加残忍地杀害,为报父仇,春丽毅然决然地买好了飞往唐人街的机票。

邪恶的维加正通过催眠术,控制着在擂台上饮败的格斗家们在世界各地执行暗杀计划。

隆远在印度修行,孤身一人的春丽能在擂台上挑战成功吗?

程序完整源码

这是一个针对Python初学者的练手小程序,简单地模拟春丽与维加的格斗过程。有一定开发经验的朋友可以对程序进行扩展,比如利用多进程来模拟春丽同时与多人进行格斗。

Python

# 导入random模块,执行random模块中的choice方法来随机获取列表中的元素
import random
import time


VEGA_STRATEGIES = ["原地蹲防", "失误", "回旋攻击", "失误", "伤害修正", "回血", "超必杀"]
CHUNLI_KUNFU = ["气功拳", "旋转踢", "百裂脚", "霸山天升脚"]


def countdown(seconds=3, message=""):
    """
    :param seconds: 倒数的秒数
    :param message:  倒计时结束后输出的提示信息
    :return:
    """
    for _ in range(seconds, 0, -1):
        _, _ = print(_), time.sleep(1)
    else:
        print(message)
        
        
def  generate_prompts(kunfu):
    """
    :param kunfu: 街霸格斗选手的格斗招数,为一个列表对象,例如["气功拳", "旋转踢"]
    :return: 返回用户指令输入的提示信息,为一个字符串对象
    """
    prompts = "\n"
    for index, value in enumerate(kunfu):
        prompts += "<{}>{}".format(index, value)
    prompts += "\n输入<>中的指令来挑战街霸:__\b\b"
    return prompts
    
    
    
def fight():
    # 定义整型变量fighter,用来保存街霸维加的血量
    vega = 100
    # 定义整型变量chunli,用来保存春丽的血量
    chunli = 100
    blood = 5
    prompts = generate_prompts(CHUNLI_KUNFU)
    countdown(message="Fight!")
    # 执行while循环,不断重复执行下面的代码
    while True:
        # 春丽或boss其中一人血量为0时就退出战斗
        if vega * chunli == 0:
            break
        # 执行input函数获得键盘的输入内容
        command = input(prompts)
        # 对输入的字符串类型转换为整型,读者在输入时必须输入有效的数字,否则会抛出异常
        try:
            command = int(command)
            _ = CHUNLI_KUNFU[command]
        except (ValueError, IndexError):
            print("春丽,这是在战斗,请输入正确的战斗指令!")
            continue
        print("春丽对街霸使出了{}".format(CHUNLI_KUNFU[command]))
        # 使用random模块中的choice函数,来随机选择列表里的值
        vega_strategy = random.choice(VEGA_STRATEGIES)
        if vega_strategy == "失误":
            print("街霸维加在对战中反击失误!")
        else:
            print("街霸维加在对战中对你使用了{}".format(vega_strategy))
        if vega_strategy in {
   "原地蹲防", "回血"}:
            if vega_strategy == "回血" and vega < 100:
                vega += blood
        elif vega_strategy == "失误":
            vega -= blood*2
        elif vega_strategy == "伤害修正":
            vega -= blood
        elif vega_strategy == "超必杀":
            chunli -= blood*2
        else:
            chunli -= blood
        chunli = 0 if chunli  <=0 else chunli
        vega = 0 if vega  <=0 else vega
        
        print("\n-*- 春丽现在的血量:{}  维加现在的血量:{} -*-".format(chunli, vega))
        time.sleep(3)
    if chunli == 0:
        print("春丽,你战败了!")
    else:
        print("维加,我今天终于把你打败,父亲泉下有知,可以瞑目了!")
        
        
        
if __name__ == "__main__":
    fight()

程序的输出界面

在这里插入图片描述

1.2 春丽VS巴洛克

在这里插入图片描述
游戏小剧场
虽然美丽的春丽打败了维加,但邪恶的影罗组织并未就此覆灭。许多年以后,春丽站在A号街区,会突然想起打败神月卡琳后的那个下午。当时,身躯高大的巴洛克已将面具摘下,道场中的其他四名影子杀手,形如雕塑,酷似木偶…春丽经过这场残酷的战斗以后,在背部留下了一道很长的月牙形伤痕。

在本节程序实战中,通过多进程的方式来模拟春丽一人对抗影罗组织的五名邪恶杀手。

参考源码

通过多进程+队列来模拟春丽1VS5的街霸游戏挑战赛:

from multiprocessing import Process, Queue
import random



class Fighter:
    def __init__(self, name, blood = 100, justice = True, kungfu = None, enemies = 1):
        """
        :param name:  表示该fighter的姓名
        :param blood: 表示该fighter的血量
        :param justice: 布尔类型,表示该fighter是否代表正义的一方
        :param kungfu: 表示该fighter的格斗技能
        :param enemies: 表示该fighter对抗的敌人数
        """
        self.__name = name
        self.__blood = blood
        self.__justice = justice
        self.__kungfu = kungfu
        self.__enemies = enemies
        
        
        
    def  attack(self):
       kungfu, harm = None, 0
       if self.__blood > 0:
           kungfu = random.choice(list(self.__kungfu.keys()))
           harm = self.__kungfu[kungfu]
       return kungfu, harm
       
       
       
    @property
    def nam
  • 3
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值