PythonDay08
本节内容
- 关键字
- 循环嵌套
- 转义字符
- 函数
- 模块
- 列表
- 循环遍历
- 元组
- 字典
- 切片
- 名片管理系统
1.关键字
在Python内部已经使用的标识符
关键字具有特殊的功能和含义
开发者不允许定义和关键字相同的名字的标识符
import keyword
print(keyword.kwlist)
2.简单猜拳游戏
import random
player=int(input("请出拳石头(1)/剪刀(2)/布(3):"))
computer=random.randint(1,3) #生成随机数大于等于1,小于等于3,下限必须小于上限
print("玩家选择的拳头是%d--电脑出的拳是%d"%(player,computer))
if ((player==1 and computer==2)
or (player==2 and computer==3)
or (player==3 and computer==1)):
print("玩家胜利")
elif player==computer:
print("平局")
else:
print("电脑胜利")
3.打印小星星
#打印小星星
row=1
while row<=5:
col = 1
while col <= row:
print("*",end='')
col+=1
#在一行星星输出完成后换行
print("")
row+=1
4.九九乘法表
# 九九乘法表
row = 1
while row <= 9:
col = 1
while col <= row:
print("%d*%d=%d" % (row, col, row * col), end="\t")
col += 1
print("")
row += 1
5.转义字符\t 、\n 、\"
#\t在控制台输出一个制表符,协助在输出文本时垂直方向保持对齐
print("1\t2\t3")
print("10\t20\t30")
#\n在控制台输出一个换行符
print("hello\n python")
#\"可以输出"
print("hello\"hello")
6.函数
函数:具有独立功能的代码块组织为一个小模块,在需要的时候调用。
函数使用包含:
1.定义函数----封装独立的功能
2.调用函数----享受封装的成果
函数的作用,在开发程序时,使用函数可以提高编写的效率以及代码的重用
定义函数
def 函数名():
函数封装的代码
.....
- def是define的缩写
- 函数名应该能够表达函数封装代码的功能
- 函数名称命名应该符合标识符的命名规则
函数调用
通过 函数名() 即可完成对函数的调用
F8 Step Over可以单步执行代码,会把函数看作一行代码直接执行;
F7 Step Into可以单步执行代码,如果是函数,会进入函数内部;
函数参数
def sum_2_sum(num1,num2):
"""对两个数字求和"""
sum=num1+num2
print("%d+%d=%d"%(num1,num2,sum))
sum_2_sum(20,50)
形参:定义函数时,小括号中的参数,是用来接收参数用的,在函数内部作为变量使用;
实参:调用函数,小括号中的参数,是用来把数据传递到函数内部用的;
函数返回值
一个函数执行结束后,告诉调用者一个结果,以便调用者针对具体的结果做后续的处理;
返回值是函数完成工作后,最后给调用者的一个结果;
在函数中使用return关键字可以返回结果;
调用函数一方,可以使用变量来接收函数的返回结果;
def sum_2_sum(num1,num2):
"""对两个数字求和"""
result=num1+num2
return result
#可以使用变量接收函数执行的返回结果
sum=sum_2_sum(10,20)
print("%d"%sum)
函数的嵌套调用
一个函数里面又调用另一个函数,这就是函数嵌套调用;
def test1():
print("*"*50)
def test2():
print("-"*50)
test1()
print("+"*50)
test2()
函数嵌套的演练
#任意字符和任意次数的拼接
def print_line(char,times):
print(char*times)
print_line("hi ",40)
def print_lines(char,times):
"""打印多行分割线
@param char:分割线使用的分隔字符
@param times:分隔线重复的次数
"""
row=0
while row<5:
print_line(char,times)
row+=1
print_lines("-",20)
7.使用模块中的函数
模块是Python程序架构的一个核心概念;
模块就好比是工具包,要想使用这个工具包中的工具,就要导入import这个模块;
模块名也是一个标识符;文件不能以数字开头,可以由字母,下划线,数字组成;
def print_line(char,times):
print(char*times)
def print_lines(char,times):
"""打印多行分割线
@param char:分割线使用的分隔字符
@param times:分隔线重复的次数
"""
row=0
while row<5:
print_line(char,times)
row+=1
import 模块
模块.print_line("-",50)
print(模块.name)
8.高级变量类型
列表:专门用于存储一串信息,列表用[]定义,数据之间用,分隔;
列表索引从0开始,索引就是数据在列表中的位置编号,索引又可以称为下标;
列表的常用操作
name_list=["zhangsan","lisi","wangwu"]
#取值和取索引
print(name_list[0])
print(name_list)
print(name_list.index("zhangsan"))
#修改
name_list[1]="李四"
#增加
#apeend在列表末尾追加数据
name_list.append("wangxiaoer")
#insert在列表指定索引位置插入数据
name_list.insert(1,"xiaoqiang")
#把其他列表内容追加到当前列表末尾
temp_list=["111","222","333"]
name_list.extend(temp_list)
#删除
#remove删除列表中指定数据
name_list.remove("111")
#pop默认把列表最后一个元素删除
name_list.pop()
#pop可以指定要删除元素的索引
name_list.pop(3)
#clear可以清空列表
name_list.clear()
#del本质是将一个变量从内存中删除的
name="xiaoming"
del name
del name_list[1]
name=["张三","李四","王五","王小二","张三"]
list_len=len(name)
print(list_len)
count=name.count("张三")
print(count)
#从列表中删除第一次出现的元素,不存在则报错
name.remove("张三")
print(name)
#升序
num=[6,8,4,1,10]
num.sort()
#降序
num.sort(reverse=True)
#逆序(反转)
num.reverse()
9.关键字,函数和方法
关键字使用时后面不需要括号;如for 、del、 if、 continue、 and......
函数封装了独立功能,可以直接调用; 函数名(参数)
方法和函数类似,同样封装了独立功能;
方法需要通过对象来调用,表示针对这个对象要做的操作; 对象.方法名(参数);
10.列表循环遍历
遍历就是从头到尾依次从列表中获取数据;
在循环体内部针对每一个元素,执行相同的操作;Python中专门提供迭代遍历;
使用for就能够实现迭代遍历;
for 循环内部使用的变量 in 列表
fir name in name_list:
循环内部针对列表元素进行操作
print(name)
mz=["张三","李四","王五","熊猫"]
"""
顺序从列表中依次获取数据,每一次循环数据都保存在my_name这个变量中;每一次的数据都可以取得
"""
for my_name in mz:
print("我是:%s"%my_name)
11.元组
与列表类似,不同之处在于元组的元素不能修改;
元组表示多个元素组成的序列;用于存储一串信息、数据之间使用,分隔;
元组用( )定义,元组的索引从0开始;
info_tuple=("zhangsan",18,1.78)
print(info_tuple[0])
tuple=() #创建空元组
元组只包含一个元素时,需要在元素后面添加逗号;
info_tuple=(50,)
格式字符串,格式化字符串后面的( )本质上就是一个元组;让列表不可以被修改,保护数据安全;
info_tuple=("zhangsan",18,1.78,"zhangsan")
print(info_tuple[0])
single_tuple=(6,)
#根据数据内容,取索引
print(info_tuple.index("zhangsan"))
#统计计数
print(info_tuple.count("zhangsan"))
#统计元组中包含元素的个数
print(len(info_tuple))
for my_info in info_tuple:
print(my_info)
infoxm_tuple=("xiaoming",18,1.78)
print("%s 年龄是 %d 身高是 %.2f"% ("xiaoming",18,1.78))
print("%s 年龄是 %d 身高是 %.2f"% infoxm_tuple)
元组和列表之间的转换
num_list=[1,2,3,4]
num_tuple=tuple(num_list)
print(type(num_tuple))
num2_list=list(num_tuple)
print(type(num2_list))
12.字典
字典是除列表以外最灵活的数据类型;同样用来存储多个数据,通常存储描述一个物体的相关信息;
列表是有序集合,字典是无序集合;
字典用{ }定义,使用键值对存储数据,键值对之间用,分隔;
键key是索引,值value是数据,键和值之间使用:分隔,键必须是唯一的,值可以取任何数据类型,但键只能使用字符串、数字或元组;
#字典是无序的数据集合
xiaoming={"name":"xiaoming",
"age":18,
"gender":True,
"height":1.78,
"weight":70
}
print(xiaoming)
#取值
print(xiaoming["name"])
#增加/修改 key不存在,新增键值对;key存在,修改已存在的键值对;
xiaoming["hobby"]="seesee"
xiaoming["name"]="xm"
print(xiaoming)
#删除
xiaoming.pop("name")
print(xiaoming)
#统计键值对数量
print(len(xiaoming))
#合并字典
temp_dict={"height":180,"see":"see"}
xiaoming.update(temp_dict)
#清空字典
xiaoming.clear()
print(xiaoming)
字典的循环遍历
xiaoming_dict={"name":"xiaoming",
"qq":"12345",
"phone":"10000"}
#k是每一次循环中,获取到的键值对的key
for k in xiaoming_dict:
print("%s:%s"%(k,xiaoming_dict[k]))
字典和列表的应用
card_list=[
{"name":"zhangsan","qq":"12345","phone":"101"},
{"name":"lisi","qq":"11111","phone":"001"}
]
for card_info in card_list:
print(card_info)
13.字符串定义和遍历
str1="hello python"
str2='我是"刘西瓜"'
print(str2)
print(str1[6])
for char in str1:
print(char)
#统计字符串的长度
print(len(str1))
#统计某一个小字符串出现的次数
print(str1.count("l"))
#某一个子字符出现的位置
print(str1.index("llo"))
print(str1.index("lo"))
#判断空白字符,只包含空格则返回True
space_str=" \t\n\r"
print(space_str.isspace())
#判断字符串中是否包含数字
num_str="一千零一"
print(num_str.isdecimal())
print(num_str.isdigit())
print(num_str.isnumeric())
hello_str="hello world"
#判断是否以指定字符串开始
print(hello_str.startswith("hel"))
#判断是否以指定字符串结束
print(hello_str.endswith("ld"))
#查找指定字符串
print(hello_str.find("llo"))
print(hello_str.index("ld"))
#替换字符串
#replace不会修改原有字符串的内容,只会返回一个新的字符串;
print(hello_str.replace("world","python"))
print(hello_str)
poem=["\t\n登鹳雀楼",
"王之涣",
"白日依山尽",
"黄河入海流\t\n",
"欲穷千里目",
"更上一层楼"]
for poem_str in poem:
#使用strip方法去除字符串中的空白字符
#再使用center方法居中显示文本
print("|%s|" % poem_str.strip().center(10, " "))
poem="\t\n登鹳雀楼王之涣\t白日依山尽黄河入海流\t\n欲穷千里目更上一层楼"
#拆分字符串
poem_list=poem.split()
print(poem_list)
#合并字符串
result=" ".join(poem_list)
print(result)
14.切片
切片适用于字符串、列表、元组
切片使用索引值来限定范围,从一个大的字符串中切出小的字符串;
列表和元组都是有序的集合,都能够通过索引值获取到对应的数据;
字典是一个无序的集合,是使用键值对保存数据。
字符串[开始索引:结束索引:步长] 指定的区间属于左闭右开;
num_str="0123456789"
#截取从2-5位置的字符串
print(num_str[2:6])
#截取2-末尾的字符串
print(num_str[2:])
#截取从开始-5位置的字符串
print(num_str[0:6])
print(num_str[:6])
#截取完整字符串
print(num_str[:])
#从开始位置,每隔一个字符截取字符串
print(num_str[::2])
#从索引1开始,每隔一个取一个
print(num_str[1::2])
#截取从2-末尾-1的字符串
print(num_str[2:-1])
#截取字符串末尾两个字符
print(num_str[-2:])
#字符串的逆序
print(num_str[-1::-1])
15.名片管理系统
#保存主程序功能代码,程序的入口
import cards_tools
while True:
# TODO(xm) 显示功能菜单
cards_tools.show_menu()
action_str=input("请选择执行的操作:")
print("您选择的操作是[%s]"%action_str)
#1,2,3针对名片操作
if action_str in ["1","2","3"]:
# TODO 新增名片
if action_str=="1":
cards_tools.new_card()
# TODO 显示全部
elif action_str=="2":
cards_tools.show_all()
# TODO 查询名片
elif action_str=="3":
cards_tools.search_card()
#0退出系统
elif action_str=="0":
print("欢迎再次使用该系统,系统退出")
break
else:
print("输入不正确,重新选择")
#其他内容输入错误,需要提示用户
#实现对名片的新增、查询、修改、删除等功能
#列表记录所有的名片字典
card_list=[]
def show_menu():
print("*"*50)
print("欢迎使用【名片管理系统】V2.0")
print("1.新增名片")
print("2.显示全部")
print("3.搜索名片")
print("0.退出系统")
print("*"*50)
def new_card():
"""新增名片"""
print("-"*50)
print("新增名片")
#1.提示用户输入名片的详细信息
name_str=input("请输入姓名:")
phone_str=input("请输入电话号码:")
qq_str=input("请输入QQ:")
email_str=input("请输入邮箱:")
#2.使用用户输入的信息建立一个名片字典
card_dict={"name":name_str,
"phone":phone_str,
"qq":qq_str,
"email":email_str}
#3.将名片字典添加到列表中
card_list.append(card_dict)
print(card_list)
#4.提示用户添加成功
print("添加%s的名片成功"%name_str)
def show_all():
"""显示所有名片"""
print("-" * 50)
print("显示所有名片")
#判断是否存在名片记录
if len(card_list)==0:
print("当前没有任何名片记录")
#下方代码不会被执行,可以返回一个函数执行结果
#后面没有内容时,会返回到调用函数的位置
return
#打印表头
for name in ["姓名","电话","QQ","邮箱"]:
print(name,end="\t\t")
print("")
#打印分隔线
print("="*50)
#遍历名片列表一次输出字典信息
for card_dict in card_list:
print("%s\t\t%s\t\t%s\t\t%s"%(card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
def search_card():
"""搜索名片"""
print("-" * 50)
print("搜索名片")
#1.提示用户输入要搜索的名字
find_name=input("请输入搜索的名字:")
#2.遍历名片列表,查询要搜索的名字;没找到,提示用户
for card_dict in card_list:
if card_dict["name"]==find_name:
print("姓名\t\t电话\t\tQQ\t\t邮箱")
print("%s\t\t%s\t\t%s\t\t%s" % (card_dict["name"],
card_dict["phone"],
card_dict["qq"],
card_dict["email"]))
# TODO 找到的名片进行修改和删除操作
deal_card(card_dict)
print("="*50)
break
else:
print("没有找到%s"%find_name)
def deal_card(find_dict):
"""处理查找到的名片
@param find_dict:查找到的名片
"""
print(find_dict)
action_str=input("请选择要执行的操作"
" 1修改 2删除 0返回上一级")
if action_str=="1":
find_dict["name"]=input_card_info(find_dict["name"],"姓名:")
find_dict["phone"] = input_card_info(find_dict["phone"],"电话:")
find_dict["qq"] = input_card_info(find_dict["qq"],"QQ:")
find_dict["email"] = input_card_info(find_dict["email"],"邮箱:")
print("修改名片成功")
elif action_str=="2":
card_list.remove(find_dict)
print("删除名片成功")
def input_card_info(dict_value,tip_message):
"""输入名片信息
@param dict_value:字典原有的值
@param tip_message: 输入的提示文字
@return:如果用户输入内容,就返回内容;否则返回字典中原有的值
"""
# 1.提示用户输入内容
result_str=input(tip_message)
# 2.针对用户的输入进行判断,如果用户输入了内容,直接返回结果
if len(result_str)>0:
return result_str
# 3.如果用户没有输入内容,返回字典中原有的值
else:
return dict_value