001 python基础实战
报名了阿里大学的AI,一直没有学习,今天开始正式学习。
今天是第一节,Python的基础编程实战,里面包含两个示例。
一:任务实现文件的批量重命名。
1.创建一个目录
2.程序
#!/usr/bin/python
#-*- coding:UTF-8 -*-
import os
def remove_ad_text(dir2,text):
"""
用来删除特定广告文本的函数
该函数会检索指定根目录下的所有文件和目录,并递归,使得所有的广告词都删除
:param dir2: 指定要检查的根目录
:param text: 指定特定的广告词
:return:
"""
#如果不是目录,则返回
if not os.path.isdir(dir2):
return
#如果传递的dir2末尾没有路径分隔符,则加入路径分割符
if not dir2.endswith(os.path.sep):
dir2+=os.path.sep #获取该目录下的所有文件或者文件夹,返回列表
names=os.listdir(dir2)
#依次遍历目录或者文件名 #对文件与子目录的处理方式不同
for name in names:
#拼接操作,路径和文件名
sub_path=os.path.join(dir2,name)
#是否为目录
if(os.path.isdir(sub_path)):
remove_ad_text(sub_path,text)
##都要重命名
name=name.replace(text,"")
#组合新路劲
new_path=os.path.join(dir2,name)
os.rename(sub_path,new_path) remove_ad_text(r"D:\下载的文件","[www.baidu.com]")
二:21点小游戏
1.题目规则
规则:2-9代表2-9,10-k代表10点,A可代表1点或者10点。
庄家或者玩家各发两张牌,庄家只显示一张牌。
1.玩家可以根据自己牌面的点数,选择是否再要下一张牌,可多次要牌,如果玩家的牌点数超过21点,则玩家负
2.如果玩家没有超过21点,并且选择停牌,则庄家开始发牌,庄家如果没有达到17点,则一直要牌,如果达到17点,则必须停止。如果庄家牌面点数超过21点,则庄家负
3.如果都没有达到21点,点数多着胜利。
2.程序分析
创建一副扑克牌
创建庄家和玩家
发牌,给庄家一张牌,给玩家发两张牌
玩家根据自己的牌面与庄家的牌面来选择是否要牌,这里要咨询
循环:
如果玩家要牌,则继续发牌。发牌之后,判断玩家是否爆牌,如果爆牌,则玩家负。
循环;
如果玩家停牌,则庄家开始要牌,如果庄家小于17,则无条件要牌,如果大于17,小于21,则必须停牌。如果庄家大于21,则庄家负。
如果都没有爆牌,则比较大小的点数。
3.程序
#!/usr/bin/python
#-*- coding:UTF-8 -*-
import sys
import random
import time
class Card:
"""
定义扑克牌,每个对象是一个牌
"""
def __init__(self,card_type,card_text,card_value):
"""
初始化方法
:param card_type: 扑克牌类型
:param card_text: 扑克牌显示的文本
:param card_value: 扑克牌的真实值
"""
self.card_type=card_type
self.card_text=card_text
self.card_value=card_value class Role:
"""
定义角色类,用来表示庄家与玩家,庄家是电脑,玩家是用户
"""
def __init__(self):
"""
初始化方法
"""
#定义列表,用来保存当前角色手中的牌,初始化为空
self.cards=[] def show_card(self):
"""
向控制台上打印所有的牌
:return:
"""
for card in self.cards:
print(card.card_type,card.card_text,sep="",end="")
##换行
print() def get_value(self,min_or_max):
"""
获得当前角色手中牌的点数,这里重要的是知道最大最小点数的计算方式
:param min_or_max: str类型的,值为min或者max
当值为min,返回最小点数。即所有的A都是1,用来判断是否爆牌
当值为max,返回在不爆牌的时候的最大点数。即A可能表示为1或者11。
:return:返回手中牌的点数
"""
#总的点数
sum2=0
#A的数量
A=0
for card in self.cards:
#累加牌面所有的点数
sum2+=card.card_value
if card.card_text=='A':
A+=1
if min_or_max=='max':
#逐渐减少A的数量
for i in range(A):
value=sum2-i*10
if value<=21:
return value
return sum2-A*10 def burst(self):
"""
判断是否爆牌,是则返回True,否则返回False
:return: 返回bool
"""
return self.get_value("min")>21 class CardManager:
"""
扑克牌的管理者,管理一整套牌,并且可以发牌
"""
def __init__(self):
#保存一整套扑克牌
self.cards=[]
#定义牌的类型
all_card_type="♥♠♣♦"
#定义牌面的文本
all_card_text=['A','K','Q','J','','','','','','','','','']
#定义真实值
all_card_value=[11,10,10,10,10,9,8,7,6,5,4,3,2]
#一个嵌套循环,创建一个扑克牌
for card_type in all_card_type:
for index,card_text in enumerate(all_card_text):
card=Card(card_type,card_text,all_card_value[index])
##加到整副扑克牌
self.cards.append(card)
##洗牌,方便发牌
random.shuffle(self.cards) def send_card(self,role,num=1):
"""
给电脑或者玩家发牌,不能重复的发牌
:param role: 角色
:param num: 发牌的张数,默认为1张
:return:
"""
for i in range(num):
card=self.cards.pop()
role.cards.append(card) ##测试
#创建扑克牌管理器
cards=CardManager()
#创建角色
computer=Role()
player=Role()
#初始化
cards.send_card(computer)
cards.send_card(player,2)
##显示
computer.show_card()
player.show_card() ##询问玩家是否要牌
while True:
choice=input("是否再要一张牌?【y/n】")
if choice=='y':
cards.send_card(player)
player.show_card()
computer.show_card()
#判断,玩家是否爆牌
if player.burst():
print("爆牌,输了")
sys.exit()
else:
break ##庄家发牌
while True:
print("庄家发牌中----")
#产生一个间隔
time.sleep(1)
cards.send_card(computer)
player.show_card()
computer.show_card()
##判断,是否爆牌
if computer.burst():
print("庄家爆牌,你赢了")
sys.exit()
elif computer.get_value("max")>=17:
break ##做判断,前提是没有爆牌
play_value=player.get_value("max")
computer_value=computer.get_value("max")
if play_value>computer_value:
print("你赢了")
elif play_value== computer_value:
print("平局")
else:
print("你输了")
4.效果
001 python基础实战的更多相关文章
- python基础 实战作业 ---Excel基本读写与数据处理
代码地址如下:http://www.demodashi.com/demo/11650.html 看完本篇需要: 10min 作业练习需要: 0.5h~3h(依练习者对python熟悉程度而定) 看完本 ...
- python基础实战之猜年龄游戏
目录 一.Python基础实战之猜年龄游戏 给定年龄,用户可以猜三次年龄 年龄猜对,让用户选择两次奖励 用户选择两次奖励后可以退出 age = 18 # 答案 count = 0 # 游戏次数控制 p ...
- python基础实战
字符串的互相转换 字典的排序 字典的排序可以直接把,key值或者,values拿出来排序 也可以用dict.items拿出所有的key,value的值再加key=lambda x:x[1] 来排序. ...
- 五、Python基础(2)
五,Python基础(2) 1.数据类型基础 (一)什么是数据类型? 用于区分变量值的不同类型. (二)为何对数据分类? 针对不同状态就应该用不同类型的数据去标识. (三)数据类型分类 1.数字类型 ...
- python基础篇(完整版)
目录 计算机基础之编程和计算机组成 什么是编程语言 什么是编程 为什么要编程 编程语言的分类 机器语言(低级语言) 汇编语言 高级语言 计算机的五大组成 CPU(相当于人类的大脑) 多核CPU(多个大 ...
- 第三章:Python基础の函数和文件操作实战
本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...
- 第四章:Python基础の快速认识內置函数和操作实战
本課主題 內置函数介紹和操作实战 装饰器介紹和操作实战 本周作业 內置函数介紹和操作实战 返回Boolean值的內置函数 all( ): 接受一個可以被迭代的對象,如果函数裡所有為真,才會真:有一個是 ...
- python网络爬虫实战PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书
点击获取提取码:vg1y python网络爬虫实战帮助读者学习Python并开发出符合自己要求的网络爬虫.网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取互联网信息的程序或者脚 ...
- python基础语法和实战练习
(一)Python基础学习 Num01:python的基本数据类型 ①字符串:可进行拼接和截取 ②数字:int,float,complex(复数) 涉及到格式转换:int(x)转换为整数,float( ...
随机推荐
- SQL---mysql新增字段
) DEFAULT NULL COMMENT '姓名' 修改表 people 增加字段 name 长度100 默认为null 备注:姓名
- 用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建二:配置MyBatis 并测试(1 构建目录环境和依赖)
引言:在用IntelliJ IDEA 开发Spring+SpringMVC+Mybatis框架 分步搭建一 的基础上 继续进行项目搭建 该部分的主要目的是测通MyBatis 及Spring-dao ...
- 【译】1. Java反射——引言
原文地址:http://tutorials.jenkov.com/java-reflection/index.html *By Jakob Jenkov Java的反射机制使得它可以在运行时检查类.接 ...
- ZooKeeper-客户端命令 zkCli
执行 bin/zkCli 文件进入客户端 查看帮助 help ZooKeeper -server host:port cmd args stat path [watch] set path data ...
- C#中的Finalize,Dispose,SuppressFinalize的实现和使用介绍
原文地址:http://www.csharpwin.com/csharpspace/8927r1397.shtml MSDN建议按照下面的模式实现IDisposable接口: public class ...
- [物理学与PDEs]第2章第2节 粘性流体力学方程组 2.3 广义 Newton 法则---本构方程
1. ${\bf P}=(p_{ij})$, 而 $$\bex p_{ij}=-p\delta_{ij}+\tau_{ij}, \eex$$ 其中 $\tau_{ij}$ 对应于摩擦切应力. 2. ...
- 数据库的URL格式
Oracle数据库: 驱动jar包: ojdbc6.jar 驱动程序类名字:oracle.jdbc.OracleDriver JDBC URL:jdbc:oracle:thin:@//<host ...
- centos7 下 nfs 搭建总结
nfs一般用于生产环境磁盘空间不足导致数据无法写入,从而通过异机远程挂载磁盘方式解决问题. 一. rpm -qa | grep nfs-utils rpm -qa | grep rpcbind 二. ...
- 牛牛与数组 (简单dp)
题目链接 这种题一看就是dp啊,dp[i][j]表示第i位放j的方案数,转移方程为dp[i][j]=dp[i-1][k]{k<=i||k%i!=0},当然我们可以三层循环来找,但数据显然会超时, ...
- eclipse hadoop环境搭建 查看HDFS文件内容
1.下载插件 hadoop-eclipse-plugin-2.5.2.jar放入eclipse/plugin 2.准备hadoop-2.5.0-cdh5.3.6 使用WinSCP远程连接虚拟机,复制h ...