1. 第一段代码
既然环境已经搭建好了,那我们趁热打铁,赶快来写段代码试试吧!
知道的小伙伴都知道,按照传统,学习编程的第一段代码就是输出"hello world!"
1.1 命令行实现
这是很简单的,直接用命令行就能实现。
我们打开命令行端口,输入Pyhton或者Python3即可进入Python
当显示出python版本号和>>>这三个尖括号时就说明可以运行python代码了!
我们输入print("hello world!")后回车,第一段代码就运行成功了!
聪明的小伙伴会发现了,这种方式只适合输入一行一行的代码,那么有没有办法一次性写一堆呢?
1.2 编写脚本文件
当然有!我们以pycharm为例,我们先新建一个 helloworld.py文件,然后写下这两行代码:
print("hello world!")
print("你好啊,我是第二行代码")
然后右键,运行,或者点击上方的绿色小箭头
运行后可以看到,代码输出了以下内容!
2.如何实现抽卡模拟器?
2.1 先来次单抽
好了,热身阶段完毕!我们已经了解到了 Python 运行的两种方式,命令行和编写脚本,接着我们来看个例子!
我们先从最基础的功能开始,模拟一个简单的单抽,从奖池中随机抽取一个奖品。
代码示例:
import random
# 定义奖池
roles = ["流萤", "钟离", "胡桃", "5元外卖优惠券","v你50","篮球"]
# 单抽功能
def draw_once():
return random.choice(roles)
# 抽卡!
print("欢迎使用抽卡模拟器!")
result = draw_once()
print(f"恭喜抽到奖品:{result}")
运行结果:
欢迎使用抽卡模拟器!
恭喜抽到奖品:篮球
在这个例子中,我们运用了random这个随机数模块,这是我们模拟概率的核心工具。
Python 之所以如此受欢迎,很大程度上是因为它拥有丰富的“工具箱”——模块(第三方库)。
你可以理解为Python 可以从“应用商店”下载很多已经广泛使用的代码,来实现不同的功能。
比如 requests 库来实现对网页的访问,os 模块帮你操作文件系统。
而当自带的工具箱不够用时,我们可以通过 pip 安装更多工具,这就像从网上下载一款新软件。
2.2 用好 pip,不再重复造轮子
pip 是Python的包管理工具,全称是 “Pip Installs Packages”,类似于应用商店,可以帮你安装各种第三方库,比如绘图的 matplotlib,处理数据的 pandas 等。
当你需要安装某个库文件时,仅需要执行下面的代码
pip install 库名
比如想爬取某个网页,就可以安装 requests 库
pip install requests
注:若 pip 无法使用,请检查是否正确安装,或使用 pip3
2.2.1 更换 pip 源
由于 pip 默认从国外的源地址下载库,受网络环境影响,可能导致下载缓慢。
那么我们就可以通过切换下载源来解决!
国内拥有 pip 的镜像源,比如阿里云、清华大学等,更换源可以临时使用,也可以永久配置。
如果你只是偶尔需要更换源,可以在安装库时通过 -i 参数指定镜像地址。
#临时更换为清华源
pip install requests -i https://pypi.tuna.tsinghua.edu.cn/simple
如果你希望每次使用 pip 时都自动使用国内镜像源,可以通过修改 pip 的配置文件来实现。
2.2.2 永久修改下载源
Windows 的配置文件路径通常为:
C:\Users<你的用户名>\AppData\Roaming\pip\pip.ini
macOS 和 Linux配置文件路径通常为:
~/.pip/pip.conf
在配置文件中添加以下内容,即可设置镜像源地址为清华大学源
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
以下是一些国内常用的镜像源地址,你可以随意选择一个:
• 阿里云: mirrors.aliyun.com/pypi/simple…
• 清华大学: pypi.tuna.tsinghua.edu.cn/simple
• 中国科技大学: pypi.mirrors.ustc.edu.cn/simple/
• 豆瓣: pypi.douban.com/simple/
修改配置文件后,可以用以下命令查看 pip 是否使用了新的源:
pip config list
如果显示类似以下内容,则说明配置成功:
[global]
index-url = https://pypi.tuna.tsinghua.edu.cn/simple
2.3 完善抽卡系统,添加稀有度和概率
真实的抽卡中,奖励并不是平等的——稀有奖励出现的概率通常更低。
我们可以用一个概率分布来模拟这个机制。
代码示例:
import random
#定义奖池和稀有度
roles = {
"五星": ["v你50", "钟离","篮球"],
"四星": ["黑塔", "5元外卖优惠券"],
"三星": ["硬币一枚", "生锈的剑", "派蒙表情包"]
}
#定义稀有度概率
probabilities = {"五星": 0.02, "四星": 0.10, "三星": 0.88}
#单抽
def draw_once():
rand = random.random() # 生成 0 到 1 的随机数
if rand < probabilities["五星"]:
rarity = "五星"
elif rand < probabilities["五星"] + probabilities["四星"]:
rarity = "四星"
else:
rarity = "三星"
return rarity, random.choice(roles[rarity])
#抽卡
rarity, result = draw_once()
print(f"恭喜抽到 [{rarity}] 奖品:{result}")
运行结果:
在这个例子中,我们遇到了字典和列表的数据类型:
roles = {
"五星": ["v你50", "钟离","篮球"],
"四星": ["黑塔", "5元外卖优惠券"],
"三星": ["硬币一枚", "生锈的剑", "派蒙表情包"]
}
使用了条件判断if,用来判断随机数所在的范围。
还使用了def来定义一个函数,用来封装一个具体的功能,在这里我们先了解其功能即可,后续会详细讲解。
2.4 加入十连抽与保底机制
为了让抽卡体验更贴近实际,我们增加十连抽功能,并添加“至少保底一个五星奖励”的逻辑。
代码示例
# 十连抽功能
def draw_ten():
results = [draw_once() for _ in range(10)] # 循环调用单抽10次
return results
# 模拟十连抽
print("试试手气")
choice = input("请选择操作:1. 单抽 2. 十连抽\n")
if choice == "1":
rarity, prize = draw_once()
print(f"恭喜你获得 [{rarity}] 奖品:{prize}")
elif choice == "2":
results = draw_ten()
print("恭喜你获得:")
for rarity, prize in results:
print(f"[{rarity}] {prize}")
else:
print("无效选择,请重新运行!")
在上一个例子中,我们将单次抽卡的操作定义为了一个函数draw_once()。
这其实就类似于我们数学上的函数 f(x),不过数学上是给定变量x可以计算一个结果。
在编程中给定的不只是数字,结果也可能是一串操作。
我们把这种功能复用的操作叫作**封装**,这是编程中非常重要的思想,也是提高效率的关键。
因此在这个例子中,我们只需要调用十次单抽,即可实现“十连抽”
接下来我们实现保底机制
代码示例
# 初始化抽卡数据
draw_count = 0
five_star_guarantee = 90 # 每90次保底出五星
statistics = {"五星": 0, "四星": 0, "三星": 0}
# 单抽功能(加入保底)
def draw_once():
global draw_count, five_star_guarantee
draw_count += 1
# 如果达到保底次数,强制出五星
if draw_count >= five_star_guarantee:
rarity = "五星"
draw_count = 0 # 出现五星时,重置计数器
else:
rand = random.random()
if rand < probabilities["五星"]:
rarity = "五星"
draw_count = 0 # 出现五星时,重置计数器
elif rand < probabilities["五星"] + probabilities["四星"]:
rarity = "四星"
else:
rarity = "三星"
prize = random.choice(prizes[rarity])
statistics[rarity] += 1 # 更新统计
return rarity, prize
# 模拟十连抽
results = [draw_once() for _ in range(10)]
print("十连抽结果:")
for rarity, prize in results:
print(f"[{rarity}] {prize}")
# 显示累计统计
print("\n抽奖统计:")
for rarity, count in statistics.items():
print(f"{rarity}: {count}次")
我们只需要设置一个计数器,每次抽奖时使得抽奖次数加 1,90 次后必出 5 星,不足 90 次出 5 星时重置计数器。
在这个过程中,涉及变量、循环语句、条件判断等多方面内容。
可以说,这个例子学会就可以解决 60%的问题,后续我们也将详细介绍具体的语法内容。
运行结果
下面是这个例子的完整代码
import random
# 定义奖池和稀有度
roles = {
"五星": ["v你50", "钟离", "篮球"],
"四星": ["黑塔", "5元外卖优惠券"],
"三星": ["硬币一枚", "生锈的剑", "派蒙表情包"]
}
# 定义稀有度概率
probabilities = {"五星": 0.02, "四星": 0.10, "三星": 0.88}
# 初始化统计变量
draw_count = 0 # 抽奖次数
five_star_guarantee = 90 # 保底:90次内必出五星
statistics = {"五星": 0, "四星": 0, "三星": 0} # 统计每个稀有度的中奖次数
# 单抽功能(含保底机制)
def draw_once():
#全局变量,修改抽卡次数
global draw_count, five_star_guarantee
draw_count += 1 # 每次抽奖计数器加1
# 如果达到保底次数,强制出五星
if draw_count >= five_star_guarantee:
rarity = "五星"
draw_count = 0 # 重置计数器
else:
# 按概率随机抽取
rand = random.random()
if rand < probabilities["五星"]:
rarity = "五星"
draw_count = 0 # 出现五星时,重置计数器
elif rand < probabilities["五星"] + probabilities["四星"]:
rarity = "四星"
else:
rarity = "三星"
prize = random.choice(roles[rarity]) # 从对应稀有度中随机选择奖品
statistics[rarity] += 1 # 更新统计
return rarity, prize
# 十连抽功能
def draw_ten():
results = [draw_once() for _ in range(10)] # 调用单抽10次
return results
# 主程序
def main():
print("欢迎使用抽卡模拟器!")
while True:
choice = input("请选择操作:1. 单抽 2. 十连抽 3. 查看统计 4. 退出\n")
if choice == "1":
rarity, prize = draw_once()
print(f"恭喜你获得 [{rarity}] 奖品:{prize}")
elif choice == "2":
results = draw_ten()
print("十连抽结果:")
for rarity, prize in results:
print(f"[{rarity}] {prize}")
elif choice == "3":
print("\n抽奖统计:")
for rarity, count in statistics.items():
print(f"{rarity}: {count}次")
print(f"距离保底还需抽取:{five_star_guarantee - draw_count} 次\n")
elif choice == "4":
print("感谢陪伴,下次再见👋🏻!")
break
else:
print("无效输入,请重新选择!")
# 运行主程序
if __name__ == "__main__":
main()
3.小结
通过这个例子,你已经接触到了以下Python基础知识:
- 开始运行:两种运行代码的方式
- 库的使用: 使用强大的第三方库来实现各种功能.
- 数据结构: 使用字典和列表管理复杂奖池和结果数据。
- 循环与条件: 实现十连抽和保底逻辑,体验循环的灵活性。
- 函数的调用: 写一次代码后续重复使用,封装的思想。
对于初学者来说,本例可能有点难度,别担心,只要能搞懂第一个最简单的例子就足够了!
经过后续的学习,掌握这些概念都不在话下!
动手试试吧!
学习总是从模仿开始,发挥你的创造力,修改示例的代码,自己来运行试试!
参考选题:
1. 实现一个随机点名器,所有同学都等概率被选到,且不会连续选到同一人
2. 拼手气红包,模拟微信红包分配,确保每个人分到的金额不低于 0.01 元
觉得有挑战?没关系,先试试而已,体会一下编程的感觉。
从小项目开始,你会逐渐发现它的无限可能性,快动手试试吧!