Python基础语法--认识Python--学习程序

本文详细介绍了Python编程的基础知识,包括算术运算符、变量类型、流程控制、函数、数据结构如列表、元组、字典以及字符串的使用。此外,还讲解了文件操作和异常处理,帮助读者掌握Python编程的核心概念与实战技巧。
摘要由CSDN通过智能技术生成

yr_01_算数运算符

print(10 + 10)  # 加法
print(10 - 20)  # 减法
print(10 * 20)  # 乘法
print(10 / 20)  # 除法
print(9 // 2)  # 取整
print(9 % 2)  # 取余
print(2 ** 13)  # 幂运算
print("_" * 10)  # 字符串拼接
print("张" + "三")  # 字符串拼接
"""
20
-10
200
0.5
4
1
8192
__________
张三
"""

# 运算优先级
"""
乘方优先级最高
然后是乘、除、取余、取整
最后是加减
"""
print(2 + 3 * 5)  # 17
print((2 + 3) * 5)  # 25

yr_02_赋值

# 1.定义一个变量记录qq号码
qq_number = "1234567"
# 2.定义一个变量记录qq密码
qq_password = "1234"

# 希望通过解释器的方式,输出变量内容,需要使用print函数
print(qq_number, qq_password)  # 1234567 1234

# 定义苹果单价
price = 8.5
# 苹果重量
weight = 7.5
# 计算付款金额
money = price * weight
print(money)  # 63.75

yr_03_变量类型

"""
在python中,定义变量时是不需要指定类型的
在运行时,解释器会根据赋值右侧的数据自动推测出数据准确类型

变量类型:
数字型:int、float、bool(True、False)、complex
非数字型:字符串、列表、元组、字典
"""

# 姓名:小明,年龄:18,性别:男,身高:1.75,体重:75公斤
name = "小明"  # str字符串类型
age = 18  # int整数类型
gender = True  # bool表示布尔类型,True为真,False为假
height = 1.75  # float浮点数
weight = 75    # int整数类型

print(type(name),type(age),type(gender),type(height),type(weight))

yr_04_常用函数

# input函数的输入信息都是字符串(str)类型
password = input("请输入qq密码:")
print(password, type(password))

# 类型转换函数,int(x)将x转换为整数,float(x)将x转换为浮点数
print(int("123"), type(int("123")))  # 字符串转整数
print(float("123.1"), type(float("123.1")))  # 字符串转小数

# 实例,收银员输入:单位元/斤,重量公斤,计算总金额
price = float(input("苹果的单价:"))
weight = float(input("苹果的重量:"))
money = price * weight  # 注意两个字符串变量之间是不能直接用乘法的
print(money)

yr_05_格式化输出

"""
print输出文字时想要输出数据需要使用格式化字符串
%s 字符串
%d  有符号十进制整数. %06d表示六位或六位以上整数输出
%f  浮点数。%.02f表示小数点后两位
%%  输出%
"""

# 定义一个字符串变量name,输出我的名字叫 小明,请多多关照!
name = "大明"
print("我的名字叫 %s,请多多关照!" % name)


# 定义一个整数变量student_no,输出 我的学号是00001
student_no = 23413425436
print("我的学号是 %06d" % student_no)  # 如果字符串小于6为则前面补0,若大于6则原样输出


# 定义小数price、weight、money.输出 苹果单价 9.00 元/斤,购买了 5.00 斤,需要支付 45.00 元
price = 9.2
weight = 5.4
money = price * weight
print("苹果单价 %.02f 元/斤,购买了 %.02f 斤,需要支付 %.02f 元" % (price,weight,money))


# 定义一个小数scale,输出 数据比例是10.00%
scale = 0.254532
print("数据比例是%.02f%%" % (scale * 100))

yr_06_关键字

"""
python 内置关键字
['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'class', 'continue',
 'def', 'del', 'elif', 'else', 'except', 'finally', 'for', 'from', 'global', 'if', 
 'import', 'in', 'is', 'lambda', 'nonlocal', 'not', 'or', 'pass', 'raise', 'return', 
 'try', 'while', 'with', 'yield']
"""
import keyword
print(keyword.kwlist)

"""
标识符是区分大小写的
"""

yr_07_if判断

"""
if 条件1:
    条件1成立时,要做的事情
    .........
elif 条件2:
    条件1成立时,要做的事情
    .........
else:
    以上条件不成立时,要做的事情
    .........

运算符判断 == != > < >= <=
# 用ctrl/添加删除注释
"""


# 定义一个整数变量记录年龄
age = 51
# 判断是否满足18岁
if age >= 18:
    # 如果满足18岁,可以进网吧happy
    print("你已经成年,欢迎进网吧happy")

    print("欢迎欢迎")

print("执行程序")


# 定义一个整数变量记录年龄
age = int(input("请输入年龄:"))
# 判断是否满足18岁
if age >= 18:
    # 如果满足18岁,可以进网吧happy
    print("你已经成年,欢迎进网吧happy")
else:
    # 如果未满18岁,赶紧回家写作业吧
    print("如果未满18岁,赶紧回家写作业吧")


# elif使用,条件是平级的
holiday_name = '生日'
if holiday_name == '情人节':
    print('买玫瑰,看电影')
elif holiday_name == '平安夜':
    print('买苹果,吃大餐')
elif holiday_name == '生日':
    print('买蛋糕')
else:
    print('每天都是节日啊')


# if嵌套,条件是有依赖关系的
has_ticket = True
knife_length = 10
if has_ticket:
    print("车票检查通过,准备进行安检")
    if knife_length > 20:
        print("您携带的刀太长了,有%d公分!" % knife_length)
        print("不允许上车")
    else:
        print("安检通过,祝您旅途愉快")
else:
    print("请先买票.")

yr_08_逻辑运算符

"""
逻辑运算 and or not
"""
# 定义一个age整数变量,编写代码判断年龄是否正确
import random
age = 1200

# 要求人的年龄在0-120
if (age >= 0) and (age <= 120):
    print("年龄正确。")
else:
    print("年龄不正确。")

# 定义两个整形变量python_score/c_score,编写代码判断成绩
python_score = 55
c_score = 65

# 要求一门成绩>60分就算合格
if (python_score > 60) or (c_score > 60):
    print("考试通过。")
else:
    print("考试成绩不合格。")

# 定义一个布尔型变量is_employee,编写代码判断是否是本公司员工
is_emplyee = True

# 要求一门成绩>60分就算合格
if not is_emplyee:
    print("非本公司员工,禁止入内")

random.randint(1, 3)

yr_09_while循环

"""
编程流程:顺序,分支,循环
初始条件设置 -- 通常是重复执行的 计数器
while 条件:
    条件满足时,要做的代码
    。。。。。。
    处理条件(计数器+1)

赋值运算符 =、+=、-=、*=、/=、//=、%=、**=
转义字符 \t,\n,\\.\"
"""

# 打印五遍hello python
i = 0
while i < 5:
    print("hello python")
    i += 1  # 赋值运算符i = i + 1

# 观察一下循环结束后,i的数值
print("观察一下循环结束后i的数值为%d。" % i)

# 0-100之间所有数字循环累加
result = 0
i = 0
while i <= 100:
    result += i
    i += 1
print("0-100之间的数字求和内容 = %d" % result)

# 计算0-100之间所有的偶数的求和内容
result = 0
i = 0
while i <= 100:
    # 判断变量是否为偶数
    if i % 2 == 0:
        result += i
    i += 1
print("0-100之间的偶数求和内容 = %d" % result)

# break退出最近一层的while循环的用法
i = 0
while i < 10:
    if i == 3:
        break
    print(i)
    i += 1

# continue跳过本次循环,重新条件判断
i = 0
while i < 10:
    if i > 3:
        # 注意:在使用continue这个关键字之前,需要确认循环计数是否修改,否则可能导致死循环
        i += 1
        continue
    print(i)
    i += 1

# 循环嵌套打印小星星九九乘法表程序
"""
转义字符
\t 在控制台数据之间增加制表符,使数据对齐
\n 在控制台输出一个换行符
\r 回车、\\ 输出\符号、\"输出”符号
"""
i = 1
while i <= 9:
    j = 1
    while j <= i:
        print("%d * %d = %d" % (j, i, i * j), end="\t")
        j += 1
    print("")
    i += 1

"""
1 * 1 = 1	
1 * 2 = 2	2 * 2 = 4	
1 * 3 = 3	2 * 3 = 6	3 * 3 = 9	
1 * 4 = 4	2 * 4 = 8	3 * 4 = 12	4 * 4 = 16	
1 * 5 = 5	2 * 5 = 10	3 * 5 = 15	4 * 5 = 20	5 * 5 = 25	
1 * 6 = 6	2 * 6 = 12	3 * 6 = 18	4 * 6 = 24	5 * 6 = 30	6 * 6 = 36	
1 * 7 = 7	2 * 7 = 14	3 * 7 = 21	4 * 7 = 28	5 * 7 = 35	6 * 7 = 42	7 * 7 = 49	
1 * 8 = 8	2 * 8 = 16	3 * 8 = 24	4 * 8 = 32	5 * 8 = 40	6 * 8 = 48	7 * 8 = 56	8 * 8 = 64	
1 * 9 = 9	2 * 9 = 18	3 * 9 = 27	4 * 9 = 36	5 * 9 = 45	6 * 9 = 54	7 * 9 = 63	8 * 9 = 72	9 * 9 = 81	
"""

yr_10_函数

"""
定义函数的语法,增加函数注释,形参,实参,返回值
def 函数名():
    函数封装的代码
    .........
"""
# 函数内部通过方法可以修改函数的实参变量,前提是实参变量是可变参数
# 函数内部通过赋值语句不会修改函数的实参变量,无论实参是可变类型还是不可变类型
# python针对列表的+=运算符,本质上是在执行列表的extent()方法


# def say_hello():
#     """定义好函数之后,表示函数定义了一段代码"""
#     print("hello 1")
#     print("hello 2")
#     print("hello 3")
#
#
# say_hello()


# def sum_2_num(num1, num2):    # 形参
#     """对两个数字的求和"""
#     result = num1 + num2
#     print("%d + %d = %d" % (num1, num2, result))
#
#
# sum_2_num(10, 5)  # 实参


# def sum_2_num(num1, num2):    # 形参
#     """对两个数字的求和"""
#     return num1 + num2
#
#
# result = sum_2_num(10, 5)  # 实参
# print("计算结果:%d" % result)


# ctrl+Q如何查看实参
# def print_line(char,times):
#     """打印多行分割线
#
#     :param char: 分割线使用分割字符
#     :param times: 分隔符重复次数
#     """
#     print(char * times)
#
#
# print_line("-", 10)


# 指定函数的缺省参数
# 注意:缺省值应该写在函数形参的最后面
# def print_info(name, gender=True):    # 在指定缺省参数的默认值时,应该使用最常见的参数作为默认值
#     """
#
#     :param name: 班上同学姓名
#     :param gender: True男生,False女生
#     """
#     gender_text = '男生'
#
#     if not gender:
#         gender_text = "女生"
#
#     print("%s 是 %s" % (name, gender_text))
#
#
# print_info("小明")
# print_info("小美", gender=False)


# 递归函数实现数字累计
def sum_numbers(num):
    # 需要有递归出口,否则会死循环
    if num == 1:
        return 1
    # 假设函数能够实现1+2+...+(num-1)
    temp = sum_numbers(num-1) + num
    return temp


print(sum_numbers(3))

yr_11_函数调用(一)

def print_line(char,times):
    """打印多行分割线

    :param char: 分割线使用分割字符
    :param times: 分隔符重复次数
    """
    print(char * times)


def print_lines(char, times):
    i = 0
    while i < 5:
        print_line(char, times)
        i += 1


name = "黑马程序员"

yr_11_函数调用(二)

import yr_11_1

yr_11_1.print_line("-",50)
yr_11_1.print_lines("*",40)
print(yr_11_1.name)

yr_12_列表

"""
非数字型:列表、元祖、字典、字符串
列表list,存储一串信息(有序的数据)
用[]定义列表,中间数据之间用逗号分隔
列表的索引从0开始
列表常用操作11个方法
取值和取索引、修改、增加数据、删除数据、列表统计方法、列表排序方法、迭代遍历列表
"""

namelist = ["lisi", "zhangsan", "wangwu"]
temp_list = ["孙悟空", "朱儿歌"]

# 1.取值和取索引
print(namelist[2])
print(namelist.index("lisi"))

# 2.修改
namelist[0] = 'zhaoliu'

# 3.增加数据
namelist.append("王小二")  # append()在末尾追加一个数据
namelist.insert(1,"小美眉")    # insert()在指定索引追加一个数据

namelist.extend(temp_list)  # extend()可以在列表后面追加一个列表

# 4.删除数据
namelist.remove("wangwu")   # remove删除指定数据第一个数据
namelist.pop(3)  # pop删除指定索引的数据
# namelist.clear()  # clear可以清空数据
del namelist[1]    # del将变量从内存删除

print(namelist)    # ['zhaoliu', 'zhangsan', '孙悟空', '朱儿歌']

# 列表统计方法
list_len = len(namelist)    # 统计列表长度
print("列表中包含的元素个数:%d" % list_len)
count = namelist.count("zhangsan")  # 统计列表中指定数据的个数
print("列表zhangsan的个数:%d" % count)

# 列表排序方法
num_list = [6, 8, 4, 1, 10]
# 升序
# namelist.sort()
# num_list.sort()
# print(namelist,num_list)    # ['zhangsan', 'zhaoliu', '孙悟空', '朱儿歌'] [1, 4, 6, 8, 10]
# # 降序
# namelist.sort(reverse=True)
# num_list.sort(reverse=True)     # ['朱儿歌', '孙悟空', 'zhaoliu', 'zhangsan'] [10, 8, 6, 4, 1]
# print(namelist,num_list)
# # 翻转
# namelist.reverse()
# num_list.reverse()     # ['朱儿歌', '孙悟空', 'zhangsan', 'zhaoliu'] [10, 1, 4, 8, 6]
# print(namelist,num_list)

# 迭代遍历列表
# 从头到位依次把列表的元素取出放到指定变量中
for my_name in namelist:
    print("我的名字叫:%s" % my_name)

yr_13_元组

"""
非数字型:列表、元祖、字典、字符串
元组tuple,存储一串不同信息数据序列,不能修改
用()定义元组,中间数据之间用逗号分隔
元组的索引从0开始
取值和取索引、元组统计方法、元组循环遍历、元组赋值
"""

# 元组定义
info_tuple = ("张三", 18, 1.75)

# 获取值和取元组索引
print(info_tuple[0])
print(info_tuple.index(18))

# 统计数据信息
print(info_tuple.count("张三"))
print(len(info_tuple))

# 元组循环遍历(并不常用)
for my_info in info_tuple:
    print(my_info)


# 元组实现两个变量交换赋值
a = 10
b = 20
a, b = b, a    # 等号右侧是一个元组,与函数多个返回值相同

yr_14_字典

"""
非数字型:列表、元祖、字典、字符串
字典dict,存储一串信息(无序的数据)
用{}定义字典
字典用键值对存储数据,键和值之间使用:分隔,键值对之间用逗号分隔。
取值、修改、增加数据、删除数据、统计方法、合并字典、删除字典、迭代遍历字典
"""

# 定义字典是无序数据集合
xiaoming_dict = {"name": "小明",
            "age": 18,
            "gender": True,
            "height": 1.75,
            "weight": 75.6}
print(xiaoming_dict)     # {'name': '小明', 'age': 18, 'gender': True, 'height': 1.75, 'weight': 75.6}

# 1.取值
print(xiaoming_dict["name"])

# 2.增加/修改
xiaoming_dict["money"] = 10000
xiaoming_dict["age"] = 33
print(xiaoming_dict)    # {'name': '小明', 'age': 33, 'gender': True, 'height': 1.75, 'weight': 75.6, 'money': 10000}

# 3.删除
xiaoming_dict.pop("name")
print(xiaoming_dict)    # {'age': 33, 'gender': True, 'height': 1.75, 'weight': 75.6, 'money': 10000}

# 统计键值对数量len
print(len(xiaoming_dict))   # 5

# 合并字典update方法,若被合并的字符串含有原始的字符串,那么原来的字典值会被修改
temp_dict = {"time":7,
             "age":2}
xiaoming_dict.update(temp_dict)
print(xiaoming_dict)    # {'age': 33, 'gender': True, 'height': 1.75, 'weight': 75.6, 'money': 10000}

# 清空字典clear
# xiaoming_dict.clear()

# 字典循环遍历
for k in xiaoming_dict:     #变量k是每次循环中,获取到的键值对的key
    print("%s-%s" % (k,xiaoming_dict[k]))

# 字典与列表循环遍历
card_list = [
    {"name":"张三",
     'qq':"12345",
     "phone":"110"},
    {"name":"李四",
     'qq':"54321",
     "phone":"11089"}
]

for card_info in card_list:
    print(card_info)

yr_15_字符串

"""
非数字型:列表、元祖、字典、字符串
字符串str,存储一串文本信息
用""或''定义字符串    # '我的外号是"大西瓜"'
字符串的索引计数是从0开始的
取值、修改、增加数据、删除数据、统计方法、迭代遍历字符串
"""

str1 = "hello python"
print(str1[6])  # 拿到指定位置的字符

# 字符串循环遍历
for char in str1:
    print(char,end='-')    # h-e-l-l-o- -p-y-t-h-o-n-
print("")

# 字符串统计方法
print(len(str1))    # 12
print(str1.count("o"))  # 2

# 子字符串出现的位置
print(str1.index("o"))  # 4

# 判断字符串的内容
space_str = " \t\n\r"    # 判断字符串是否只包含空白字符
print(space_str.isspace())    # True

num_str = '1'    # 判断字符串是否只包含数字,都不能判断小数
print(num_str.isnumeric())     # 还可以判断unicode编码
print(num_str.isdecimal())    # 只能判断数字,功能最弱,最常用
print(num_str.isdigit())    # 可以判断中文数字和阿拉伯数字

# 查找和替换字符串
hello_str = "hello world"
print(hello_str.startswith("h"))   # 判断字符串的开始是否是指定字符串
print(hello_str.endswith("world"))    # 判断字符串的结尾是否是指定字符串
print(hello_str.find("llo"))    # 查找指定字符串index方法如果指定的字符串不存在会报错,find方法会返回-1
print(hello_str.replace("world","python"))    # 替换字符串(会返回一个新的字符串,不会修改原有字符串的内容)

# 文本对齐  去除空白字符
poem = ["\t\n登鹳雀楼",
        "王之涣",
        "白日依山尽",
        "黄河入海流\t\n",
        "欲穷千里目",
        "更上一层楼"]
for poem_str in poem:
    poem_str=poem_str.strip()   # 用strip方法可以去掉字符串两侧的空白字符,lstrip方法去掉左侧空白字符,rstrip方法去掉右侧空白字符串
    print("|%s|" % poem_str.center(10, " "))    # center方法居中对齐,ljust方法向左对齐,rjust方法向右对齐

# 字符串拆分和连接
poem = "登鹳雀楼\t王之涣\t白日依山尽\t黄河入海流\t\n欲穷千里目\t更上一层楼\t"
poem_list = poem.split()    # 把大的字符串分割为小的字符串列表
print(poem_list)
print(" ".join(poem_list))    # 把字符串列表合成大字符串

# 字符串切片
num = "0123456789"
print(num[2:6])    # 1.截取从2-5位置的字符串
print(num[2:])    # 截取从2到末尾的字符串
print(num[:6])    # 从字符串开始位置截取到5的位置
print(num[:])    # 截取完整的字符串
print(num[::2])    # 从开始每隔一个位置截取字符串
print(num[1::2])    # 从索引1开始,每隔一个截取一个
print(num[2:-1])    # 截取从2到倒数第二个字符
print(num[-2:])    # 截取末尾两个字符
print(num[::-1])    # 要通过切片获得字符串逆序

yr_16_for循环

"""
python 内置有函数 len、del、max、min
字符串、列表、元组都能进行切片,字典不能进行切片
+ 可以合并列表、元组、字符串
* 可以重复列表、元组、字符串
in/not in 判断列表、元组、字符串、字典(key)中的元素是否存在/是否不存在
"""

for num in [1, 2, 3]:
    print(num)
    if num == 2:
        break
else:       # 只有for循环结束,else后面的语句才会执行,如果break跳出for后,else不会被执行
    print('会执行吗?')

print("循环结束")

yr_17_toos

card_tools = []


def show_menu():
    """显示菜单"""
    print("*" * 50)
    print("欢迎使用【名片管理系统】 V 1.0")
    print("")
    print("1. 新增名片")
    print("2. 显示全部")
    print("3. 查询名片")
    print("")
    print("0. 退出系统")
    print("*" * 50)


def new_card():
    """新增名片"""
    print('新增名片')
    name_str = input("请输入姓名:")
    phone_str = input("请输入电话:")
    qq_str = input("请输入qq;")
    email_str = input("请输入邮箱:")
    card_dict = {
        "name":name_str,
        "phone":phone_str,
        "qq":qq_str,
        "email":email_str
    }
    card_tools.append(card_dict)


def show_all():
    """显示所有名片"""
    print('-' * 50)
    print("显示所有名片")
    if len(card_tools) == 0:
        print("当前没有任何名片记录,请使用新增功能添加名片")
    else:
        for name in ["姓名","电话","QQ","邮箱"]:
            print(name,end="\t\t")
        print("")
        print("=" * 50)
        for i in card_tools:
            print("%s\t\t%s\t\t%s\t\t%s\t\t" % (i["name"],i["phone"],i["qq"],i["email"]))


def search_card():
    """搜索名片"""
    print("搜索名片")
    find_name = input("请输入要搜索的姓名:")
    for card_dict in card_tools:
        if card_dict["name"] == find_name:
            for name in ["姓名", "电话", "QQ", "邮箱"]:
                print(name, end="\t\t")
            print("")
            print("%s\t\t%s\t\t%s\t\t%s\t\t" % (card_dict["name"], card_dict["phone"], card_dict["qq"], card_dict["email"]))
            deal_card(card_dict)
            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_tools.remove(find_dict)
        print("删除名片成功")


def input_card_info(dict_value,tip_message):
    """输入名片信息

    :param dict_value: 字典中原有的值
    :param tip_message: 输入文档提示
    :return: 如果修改了则返回新值,否则返回原有值
    """
    result_str = input(tip_message)
    if len(result_str) > 0:
        return result_str
    else:
        return dict_value

yr_17_名片管理系统

import yr_17_toos

# 无限循环
while True:
    # 显示功能菜单
    yr_17_toos.show_menu()

    action_str = input("请选择希望执行的操作:")
    print("您选择的操作是【%s】" % action_str)

    if action_str in ["1", "2", "3"]:
        # 新增名片
        if action_str == "1":
            yr_17_toos.new_card()
        # 显示全部
        elif action_str == "2":
            yr_17_toos.show_all()
        # 查询名片
        else:
            yr_17_toos.search_card()
    elif action_str == "0":
        print("欢迎再次使用【名片管理系统】")
        break
    else:
        print("您输入的不正确,请重新选择")

yr_18_全局变量和局部变量

# 在函数外部定义的变量叫做全局变量,在函数内部定义的变量叫做局部变量
# 全局变量应该定义在所有函数上方
num = 10


def demo1():
    num = 99    # 在函数内部不可以直接修改全局变量的值
    print("打印num的值:%d" % num)


def demo2():
    global num    # 在函数内部想要修改全局变量的值,则需要使用global关键字
    num = 50
    print("打印num的值:%d" % num)


def demo3():
    print("打印num的值:%d" % num)


demo1()
demo2()
demo3()

yr_19_多值参数

def demo(num, *args, **kwargs):
    """

    :param num: 数字
    :param args: 元组
    :param kwargs: 字典
    """
    print(num)
    print(args)
    print(kwargs)


demo(1, 3, 2, name="小明", age=18)
"""
1
(3, 2)
{'name': '小明', 'age': 18}
"""


# 多个数字求和
def sum_numbers(*args):
    num = 0
    print(args)
    for n in args:
        num += n

    return num


result = sum_numbers(1, 2, 4)
print(result)


def demo(*args, **kwargs):

    print(args)
    print(kwargs)


gl_nums = (1,2,3)
gl_dict = {"name":"小明", "age":18}
demo(*gl_nums,**gl_dict)    # 拆包语法,简化元组变量/字典变量的传递
"""
# demo(gl_nums,gl_dict)    # 不拆包的情况下
((1, 2, 3), {'name': '小明', 'age': 18})
{}
"""

yr_20_面向对象的基础语法

"""定义类,以及封装方法
dir(对象)内置函数,可以查看所有的属性和方法
# 类对象可以只有一个,但是可以创造出不同的对象实例。
class A:
    pass
"""
# 1.每个对象都有自己独立的内存空间,保存各自不同的属性
# 2.多个对象的方法,在内存中只有一份,再调用方法时,需要把对象的引用传递到方法的内部


# 简单类实例
# class Cat:
#     """这是一个猫类"""
#     def eat(self):    # 可以通过self.访问对象的属性,哪个对象引用的方法,self就指向哪个对象。
#         print("%s 爱吃鱼" % self.name)
#
#     def drink(self):
#         print("%s 要喝水" % self.name)
#
#
# tom = Cat()
# tom.name = "tom"    # 添加属性,可以使用对象.属性名 ,利用赋值语句就可以了
# tom.eat()
# tom.drink()
# print(tom)    # 会查看类对象的内存地址


# class Cat:
#     """
#     当使用类名()创建对象时,python会自动执行一下操作:
#     1. 为对象在内存中分配内存空间--创建对象
#     2. 为对象的属性设置初始值--初始化方法(init)
#     这个初始化方法就是__init__方法,是一个内置方法
#     __init__方法是专门定义类具有哪些属性的方法。
#     """
#
#     def __init__(self, new_name):
#         print("这是一个初始化方法")
#         self.name = new_name    # 定义属性
#
#     def eat(self):
#         print("%s 爱吃鱼" % self.name)
#
#     def __del__(self):    # 当对象生命周期结束时,才执行__del__方法
#         print("%s 我去了" % self.name)
#
#     def __str__(self):    # 当向要对对象进行自定义时,使用__str__方法
#         return "我是小猫【%s】" % self.name
#
#
# tom = Cat("Tom")
# print(tom)
# lazy_cat = Cat("大懒猫")
# lazy_cat.eat()


# class Person:
#     def __init__(self, name, weight):
#         self.name = name    # 定义name属性
#         self.weight = weight    # 定义weight属性
#
#     def __str__(self):    # 必须返回字符串
#         return "我的名字叫 %s 体重是 %.2f 公斤" % (self.name, self.weight)
#
#     def run(self):
#         print("%s 爱跑步,跑步锻炼身体" % self.name)
#         self.weight -= 0.5
#
#     def eat(self):
#         print("%s 爱吃东西,吃完东西再减肥" % self.name)
#         self.weight += 1
#
#
# xiaoming = Person("小明", 75.0)
# xiaomei = Person("小美", 45)
# xiaoming.run()
# xiaomei.eat()
# print(xiaoming)
# print(xiaomei)


# 私有属性和私有方法
class Woman:
    def __init__(self, name):
        self.name = name
        self.__age = 18    # 私有属性定义,在属性前面加两个下划线

    def __secret(self):    # 私有方法定义,在方法前面加两个下划线
        # 在对象的方法内部,是可以访问私有属性的
        print("%s 的年龄是 %d" % (self.name, self.__age))


xiaofang = Woman("小芳")
# print(xiaofang.__age)    # 私有属性,在外界不能直接访问私有属性
# xiaofang.__secret()      # 私有方法,在外界不能直接访问私有方法


yr_21_继承

"""继承类语法
class 类名(父类):
    pass
"""


# 继承的属性:传递性,子类拥有父类的所有属性和方法,同样也应该有爷爷的所有属性和方法
# 1.覆盖父类的方法实现(重写)
# 2.对父类方法进行扩展
# 3.父类的私有属性和私有方法并不会被子类继承,
# 4.子类的方法中不能访问父类的私有属性,也不能访问父类的私有方法,可以访问父类的所有公有属性和公有方法


class Animal:

    def eat(self):
        print("吃")

    def drink(self):
        print("喝")


class Dog(Animal):

    def bark(self):
        print("汪汪叫")


class XiaoTianQuan(Dog):

    def fly(self):
        print("我会飞")

    # # 若父类方法无法满足要求,可在子类中将父类的方法进行重写
    # def bark(self):
    #     print("叫的跟神一样")

    def bark(self):
        # 1.针对子类特有需求,编写代码
        print("叫的跟神一样")

        # 2.使用super.父类方法,调用父类方法执行
        super().bark()

        # 3.编写子类特有代码实现
        print("1r37u984r9")


class Cat(Animal):

    def catch(self):
        print("抓老鼠")


wangcai = XiaoTianQuan()
wangcai.fly()
wangcai.bark()  # 如果子类中,重写了父类的方法,会调用在子类的bark方法,不会调用父类的bark方法
wangcai.eat()
wangcai.drink()

"""
多继承:子类可以继承多个父类的属性和方法
class 子类名(父类名1.父类名2,...):
    ....
"""
# 1.多继承时,若父类之间存在同名的属性和方法时,会出现困惑


class A:
    def test(self):
        print("test 方法")


class B:
    def demo(self):
        print("demo 方法")


class C(A, B):
    pass


c = C()
c.test()
c.demo()

yr_22_多态

""" 多态
不同的子类对象,调用相同的父类方法,会得到不同的执行结果
注意:以继承和重写父类方法为前提,增加代码灵活度
"""


class Dog(object):
    def __init__(self, name):
        self.name = name

    def game(self):
        print("%s 蹦蹦跳跳" % self.name)


class XiaoTianQuan(Dog):

    def game(self):
        print("%s 飞到天上去玩耍" % self.name)


class Person(object):
    def __init__(self, name):
        self.name = name

    def game_with_dog(self, dog):
        print("%s 和 %s 快乐的玩耍。。。" % (self.name, dog.name))
        dog.game()


# 1.创建狗
wangcai = XiaoTianQuan("旺财")
# 2.创建人
xiaoming = Person("小明")
# 3.人和狗一起玩
xiaoming.game_with_dog(wangcai)

""" 
# 1.创建狗
wangcai = Dog("旺财")
# 2.创建人
xiaoming = Person("小明")
# 3.人和狗一起玩
xiaoming.game_with_dog(wangcai)

小明 和 旺财 快乐的玩耍。。。
旺财 蹦蹦跳跳 
"""

"""
# 1.创建狗
wangcai = XiaoTianQuan("旺财")
# 2.创建人
xiaoming = Person("小明")
# 3.人和狗一起玩
xiaoming.game_with_dog(wangcai)
小明 和 旺财 快乐的玩耍。。。
旺财 飞到天上去玩耍
"""

yr_23_类属性和类方法

""" 类也是一个特殊的对象
由类创建的实例对象可以调用类内定义的属性和方法
类其实也有属性和方法,类属性记录与类有关的特征,类方法就是针对类对象定义的方法
@classmethod
def 类方法(cls):
    pass
"""

# 类属性构建
# class Tool(object):
#
#     # 使用赋值语句定义类属性,记录所有工具对象的数量
#     count = 0
#
#     def __init__(self, name):
#         self.name = name
#         Tool.count += 1
#
#
# tool1 = Tool("斧头")
# tool2 = Tool("水桶")
# tool3 = Tool("榔头")
# print(Tool.count)    # 输出类属性值


# 类方法构建
# class Tool(object):
#     # 使用赋值语句定义类属性,记录所有工具对象的数量
#     count = 0  # 类属性创建
#
#     @classmethod  # 类方法创建
#     def show_tool_count(cls):
#         print("工具对象的数量 %d" % cls.count)
#
#     def __init__(self, name):
#         self.name = name
#         Tool.count += 1
#
#
# tool1 = Tool("斧头")
# tool2 = Tool("水桶")
# tool3 = Tool("榔头")
# Tool.show_tool_count()  # 类方法


""" 静态方法
@staticmethod
def 静态方法名():
    pass
"""


# 静态方法的构建
class Dog(object):
    @staticmethod
    def run():
        # 不访问实例属性/类属性
        print("小狗快跑。。。")


Dog.run()    # 不需要创建实例对象,就可以使用静态方法

yr_24_类综合实例

"""  《实例定义方法的原则》
1. 实例方法:内部需要访问实例属性,或类属性和实例属性都需要访问
2. 类方法:内部只需要访问类属性
3. 静态方法: 不需要访问实例属性和类属性
"""
class Game(object):

    # 历史最高分
    top_score = 0

    def __init__(self, player_name):
        self.player_name = player_name

    @staticmethod
    def show_help():
        print("游戏的帮助信息")

    @classmethod
    def show_top_score(cls):
        print("历史最高分 %d" % cls.top_score)

    def start_game(self):
        print("%s 开始游戏了。。。" % self.player_name)


Game.show_help()    # 调用静态方法,使用类名调用
Game.show_top_score()    # 调用类方法,使用类名调用
game = Game("小明")
game.start_game()    # 实例方法,使用实例名调用

yr_25_单例设计模式

""" object提供的内置方法__new__
1. 在内存中为对象分配空间
2. 返回 对象的引用
"""


# 单例设计模式
class MusicPlayer(object):

    instance = None    # 记录第一个被创建的引用
    init_flag = False    # 记录是否执行过初始化动作

    def __new__(cls, *args, **kwargs):
        # 为对象分配空间,父类重写
        if cls.instance is None:
            cls.instance = super().__new__(cls)
        return cls.instance

    def __init__(self):
        if MusicPlayer.init_flag:
            return
        print("播放器初始化")
        MusicPlayer.init_flag = True


player1 = MusicPlayer()
print(player1)
player2 = MusicPlayer()
print(player2)

yr_26_异常

""" 捕获异常
try:
    尝试执行的代码;
except:
    出现错误处理的代码;
except Exception as result:    # 捕获未知的异常信息
    print("未知错误 %s" % result)
else:
    pass #没有异常才会执行的代码
finally:
    pass # 无论是否异常,都会执行的代码
"""


# 简单异常情况
# try:
#     # 不能确定是否执行正确
#     num = int(input("请输入整数:"))
# except:
#     # 异常错误的类型
#     print("请输入正确的整数")
# print("*" * 10)


# 捕获多个异常
# try:
#     # 不能确定是否执行正确
#     num = int(input("请输入整数:"))
#     result = 8 / num
#     print(result)
# except ZeroDivisionError:
#     # 异常错误的类型
#     print("除0错误!")
# except ValueError:
#     # 异常错误的类型
#     print("请输入正确的整数!")


# 捕获未知异常
# try:
#     # 不能确定是否执行正确
#     num = int(input("请输入整数:"))
#     result = 8 / num
#     print(result)
# except ValueError:
#     # 异常错误的类型
#     print("请输入正确的整数!")
# except Exception as result:    # 捕获未知的异常信息
#     print("未知错误 %s" % result)
# else:
#     print("尝试成功")
# finally:
#     print("无论是否出现错误都会执行")
# print("*" * 10)


# 异常传递
# def demo1():
#     return int(input("输入整数:"))
#
#
# def demo2():
#     return demo1()
#
#
# # 利用一层的传递性,在主程序中捕获异常
# try:
#     print(demo2())
# # 异常会一层一层的传递,demo1--->demo2-->print(demo2())
# except Exception as result:
#     print("未知错误 %s" % result)


# 应用程序主动抛出异常
"""
1.创建Exception的对象
2.使用raise关键字抛出异常
"""
def input_password():
    pwd = input("请用户输入密码:")
    if len(pwd) >= 8:
        return pwd
    print("主动抛出异常")
    # 1.创建异常对象,将错误的信息输入到形参
    ex = Exception("密码长度不够")
    raise ex

try:
    print(input_password())
except Exception as result:
    print(result)

yr_27_模块

"""
#  1.方法一
import 模块名1
import 模块名2
调用方法:模块名n.对象

#  2.方法二
import 模块名1 as 模块别名1
import 模块名2 as 模块别名2
调用方法:模块别名n.对象

#  3.方法三
from 模块名 import 工具名
调用方法: 工具名      # 不需要带点信息
注意:如果两个模块存在同名函数,那么后导入模块的函数,会覆盖先导入的函数    ,解决方法在同名函数后用as起别名

# 模块搜索顺序;先在当前目录搜索指定的模块名文件,若没找到,才会返回系统目录去查找

"""

"""
# 代码格式规范
# 导入模块
# 定义全局变量
# 定义类
# 定义函数
# 
# 在代码的最下方
def main():
    pass

# 根据__name__判断是否执行下方代码
if __name__ == "__main__"    # 模块被导入时不会被执行的代码,自己运行的时候才会被执行
    main()
"""

yr_28_导入包

import yrmessage

yrmessage.send_message.send("hello")

txt = yrmessage.receive_message.receive()

print(txt)

导入包yrmessage—init

# 从当前目录导入模块
from . import send_message
from . import receive_message

导入包yrmessage—receive_message

def receive():
    return "这是来自100xx的短信"

导入包yrmessage—send_message

def send(text):
    print('正在发送 %s ...' % text)

yr_29_文件

"""
python 操作文件1函数3方法
open() 打开文件,并返回文件操作对象
.read() 读
.write() 写
.close() 关闭
"""

# # 文件读取
file = open("README")
txt = file.read()    # 文件指针会指向文件末尾
print(txt)
file.close()

# readline方法的文件读取
file = open("README")
while True:
    txt = file.readline()    # 每次读写一行
    if not txt:
        break
    print(txt)
file.close()

# 文件写入
file = open("README", "a")    # w重写 a追加
file.write("hello")    # 文件指针会指向文件末尾
file.close()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值