报名了阿里大学的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基础实战的更多相关文章

  1. python基础 实战作业 ---Excel基本读写与数据处理

    代码地址如下:http://www.demodashi.com/demo/11650.html 看完本篇需要: 10min 作业练习需要: 0.5h~3h(依练习者对python熟悉程度而定) 看完本 ...

  2. python基础实战之猜年龄游戏

    目录 一.Python基础实战之猜年龄游戏 给定年龄,用户可以猜三次年龄 年龄猜对,让用户选择两次奖励 用户选择两次奖励后可以退出 age = 18 # 答案 count = 0 # 游戏次数控制 p ...

  3. python基础实战

    字符串的互相转换 字典的排序 字典的排序可以直接把,key值或者,values拿出来排序 也可以用dict.items拿出所有的key,value的值再加key=lambda x:x[1] 来排序. ...

  4. 五、Python基础(2)

    五,Python基础(2) 1.数据类型基础 (一)什么是数据类型? 用于区分变量值的不同类型. (二)为何对数据分类? 针对不同状态就应该用不同类型的数据去标识. (三)数据类型分类 1.数字类型 ...

  5. python基础篇(完整版)

    目录 计算机基础之编程和计算机组成 什么是编程语言 什么是编程 为什么要编程 编程语言的分类 机器语言(低级语言) 汇编语言 高级语言 计算机的五大组成 CPU(相当于人类的大脑) 多核CPU(多个大 ...

  6. 第三章:Python基础の函数和文件操作实战

    本課主題 Set 集合和操作实战 函数介紹和操作实战 参数的深入介绍和操作实战 format 函数操作实战 lambda 表达式介绍 文件操作函数介紹和操作实战 本周作业 Set 集合和操作实战 Se ...

  7. 第四章:Python基础の快速认识內置函数和操作实战

    本課主題 內置函数介紹和操作实战 装饰器介紹和操作实战 本周作业 內置函数介紹和操作实战 返回Boolean值的內置函数 all( ): 接受一個可以被迭代的對象,如果函数裡所有為真,才會真:有一個是 ...

  8. python网络爬虫实战PDF高清完整版免费下载|百度云盘|Python基础教程免费电子书

    点击获取提取码:vg1y python网络爬虫实战帮助读者学习Python并开发出符合自己要求的网络爬虫.网络爬虫,又被称为网页蜘蛛,网络机器人,是一种按照一定的规则,自动地抓取互联网信息的程序或者脚 ...

  9. python基础语法和实战练习

    (一)Python基础学习 Num01:python的基本数据类型 ①字符串:可进行拼接和截取 ②数字:int,float,complex(复数) 涉及到格式转换:int(x)转换为整数,float( ...

随机推荐

  1. Mac spotlight无法搜索的解决方法

    出现问题: 1. 在打开spotlight快速搜索的时候输入两个字符,后该搜索框自动会消失,很是奇怪重启等操作也没有效果 问题原因: 可能因为之前因为耗电原因关闭的全局搜索的索引,或者由于索引出现错误 ...

  2. adb调试

    adb usb调试,adb网络调试是非常实用的工具,通过电脑连接手机达到文件传输.电脑端安装app刷机等功能材料: 材料: 1.电脑端安装号对应手机的驱动程序 2.电脑端下载好adb调试工具 3.手机 ...

  3. B-树(B树)详解

    具体讲解之前,有一点,再次强调下:B-树,即为B树.因为B树的原英文名称为B-tree,而国内很多人喜欢把B-tree译作B-树,其实,这是个非常不好的直译,很容易让人产生误解.如人们可能会以为B-树 ...

  4. redis源码解析(1):redisObject对象说明

    Redis在实现键值对数据库时,并没有直接使用数据结构,而是基于已有的数据结构创建了一个对象系统,每种对象至少包含一种数据结构. redis3.0 中对象结构: typedef struct redi ...

  5. elasticsearch简单实现

    初次接触分布式是全文搜索引擎,之前都是spinx+coreseek,先简单实现初步了解先 官方文档:https://www.elastic.co/guide/cn/elasticsearch/guid ...

  6. 1.2浅谈Spring-Spring结构

    时隔很多天的我又回来....最近发展了一下自己的爱好,所以拖了很长时间. 前面我们从概念性上分析了spring的特性 这里我们附上Spring框架的结构图 我们简单的来说一些这个框架图 我们从下往上看 ...

  7. 第三节: EF调用普通SQL语句的两类封装(ExecuteSqlCommand和SqlQuery )

    一. 前言 在前面的两个章节中,我们分别详细介绍了EF的增删改的两种方式(方法和状态)和EF查询的两种方式( Lambda和Linq ),进行到这里,可以说对于EF,已经入门了,本来应该继续往下进行E ...

  8. 常见的游戏AI技术对比(FSM,HFSM,BT,GOAP,HTN,Utilitay,机器学习)

    最近研究的内容,比较懒还没写文章,先占个坑,过几天补

  9. luogu P5301 [GXOI/GZOI2019]宝牌一大堆

    传送门 wdnm又是打麻将 首先国土无双可以直接枚举哪种牌用了\(2\)次算贡献,然后\(7\)个对子可以把每种牌的对子贡献排序,取最大的\(7\)个,剩下的牌直接暴力枚举是不行的,考虑dp,设\(f ...

  10. CCF CSP 认证

    参加第八次CCF CSP认证记录 代码还不知道对不对,过两天出成绩. 成绩出来了,310分. 100+100+100+10+0: 考试13:27开始,17:30结束,提交第4题后不再答题,只是检查前四 ...