2021-03-30

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

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值