Python基础学习笔记

  本博客采用思维导图式笔记,所有思维导图均为本人亲手所画。因为本人也是初次学习Python语言所以有些知识点可能不太全。

基础班第一天学习笔记:链接

基础班第二天学习笔记:链接

基础班第三天学习笔记:链接

基础班第四天学习笔记:链接

基础班第五天学习笔记:链接

基础班第六天学习笔记:链接

基础班第七天学习笔记:链接

基础班第八天学习笔记:链接

基础班第九天学习笔记:链接

基础班第十天学习笔记:链接

字符串思维导图  列表思维导图  元组思维导图  集合思维导图  字典思维导图  容器类型的公共方法  

函数的思维导图  文件思维导图  if判断语句思维导图  面向对象思维导图  enumerate()方法的使用

模拟用户登陆实现:

# 编写代码模拟用户登陆。
# 要求:用户名为 python,密码 123456,
# 如果输入正确,打印“欢迎光临”,程序结束,
# 如果输入错误,提示用户输入错误并重新输入

user = input("请输入用户名:")
password = input("请输入密码:")

if user == 'python' and password == '123456':
    print("欢迎光临!")
else:
    print("用户名或密码错误!")

♥三目运算符的使用:

age = int(input("请输入您的年龄:"))

print("恭喜小伙,已经成年。") if age >= 18 else print("小伙,你还没成年。")

利用random模块实现猜拳游戏:

 1 import random
 2 player = int(input("请出拳:石头(1)、剪刀(2)、布(3):"))
 3 computer = random.randint(1, 3)
 4 print(computer)
 5 if (player == 1 and computer == 2) or \
 6         (player == 2 and computer == 3) or \
 7         (player == 3 and computer == 1):
 8     print("你赢了")
 9 elif player == computer:
10     print("平局")
11 else:
12     print("你输了")

过7游戏实现:

# 设计“过7游戏”的程序, 打印出1-100之间除了7和7的倍数之外的所有数字
num = 1
while num <= 100:
    if num % 7 != 0:
        print(num, end="|")
    num += 1

♥通过eval()方法实现高级版计算器:

# 升级版计算器:
# eval()方法:取出字符串包裹的内容
num1 = float(input("请输入第一个数:"))
num2 = float(input("请输入第二个数:"))
operator = input("请输入操作符:")

result = eval("%d %s %d" % (num1, operator, num2))
print("%d %s %d = %d" % (num1, operator, num2, result))

九九乘法表的实现:

# 正向打印九九乘法表
for row in range(1, 10):
    for col in range(1, row + 1):
        print("%d * %d = %d" % (col, row, row * col), end="\t")
    print("")

# 逆向打印九九乘法表
for col in range(9, 0, -1):
    for row in range(col, 0, -1):
        print("%d * %d = %d" % (row, col, row * col), end="\t")
    print("")

循环输出三角形:

# 1.如何使用循环嵌套循环输出如下图形:
#
# *****
# ****
# ***
# **
# *

# 利用for循环实现
for row in range(0, 5):
    for col in range(row, 5):
        print("*", end=" ")
    print("")

# 利用while循环实现
row = 1
while row <= 5:
    col = 0
    while col <= 5 - row:
        print("*", end="")
        col += 1
    print("")
    row += 1

王朴矩阵:(王朴为Python48期同学)

# 输出如下矩阵:
# &*&*&
# &*&*&
# &*&*&
# &*&*&
# &*&*&

for row in range(5):
    for col in range(5):
        if col % 2 == 0:
            print("&", end="")
        else:
            print("*", end="")
    print("")

字符串结合切片使用:

 1 # 现有字符串: str1 = '1234567890',根据题目要求,将截取后的新字符串赋值给str2
 2 str1 = '1234567890'
 3 # 截取字符串的第一位到第三位的字符
 4 str2 = str1[0:3]
 5 print(str2)
 6 # 截取字符串最后三位的字符
 7 str2 = str1[-3:]
 8 print(str2)
 9 # 截取字符串的全部字符
10 str2 = str1[::]
11 print(str2)
12 # 截取字符串的第七个字符到结尾
13 str2 = str1[7:]
14 print(str2)
15 # 截取字符串的第一位到倒数第三位之间的字符
16 str2 = str1[1:-3]
17 print(str2)
18 # 截取字符串的第三个字符
19 str2 = str1[2]
20 print(str2)
21 # 截取字符串的倒数第一个字符
22 str2 = str1[-1]
23 print(str2)
24 # 截取与原字符串顺序相反的字符串
25 str2 = str1[::-1]
26 print(str2)
27 # 截取字符串倒数第三位与倒数第一位之间的字符
28 str2 = str1[-3:-1]
29 print(str2)
30 # 截取字符串的第一位字符到最后一位字符之间的字符,每隔一个字符截取一次。
31 str2 = str1[0:-1:2]
32 print(str2)
33 
34 # 通过for循环将列表逆序输出
35 my_list = ['a', 'b', 'c', 'd']
36 for data in my_list[::-1]:
37     print(data)

字符串的格式化输出:

 1 # 字符串的格式化输出: 把字符串里面的内容按照指定的数据类型进行输出显示
 2 
 3 # 学习字符串格式化的目的:以后字符串里面的内容有动态内容时,需要使用字符串的格式化
 4 
 5 # 格式化占位符:
 6 # %d 表示格式化显示整型数字
 7 # %f 表示格式化显示小数
 8 # %s 表示格式化显示字符串
 9 
10 # 字符串的内容进行了格式化
11 # 注意点:如果字符串里面有多个格式化占位符,那么多个参数在进行传参的时候,需要加上小括号
12 msg = "姓名: %s 年龄: %d" % ("王五", 22)
13 # 输出格式化后的字符串
14 print(msg)
15 
16 # 如果字符串中只有一个格式化占位符,在进行传参的时候,参数不需要加上小括号
17 info = "性别: %s" % "男"
18 print(info, type(info))
19 print("性别: %s" % "男")
20 
21 pi = 3.16
22 # %f 默认保留6位小数
23 # print("圆周率: %f" % pi)
24 # 注意点格式化占位符会进行四舍五入
25 print("圆周率: %.2f" % pi)
26 
27 
28 # 格式化占位符的注意点: 扩展:
29 
30 student_no = 123
31 
32 # %03d: 正数要求是3位,不够三位前面补0
33 print("学号:%03d" % student_no)
34 
35 # 格式化占位符结合百分号一起使用的时候,两个百分号表示一个
36 print("百分比: %d%%" % 50)
37 
38 
39 # 定义整数变量 student_no ,输出 我的学号是 000001
40 student_no = 1
41 print("我的学号为: %06d" % student_no)
42 
43 # 定义⼩数 price 、 weight 、 money ,输出 苹果单价 9.00 元/⽄,购买了 5.00 ⽄,需要⽀付 45.00 元
44 price = 9.0
45 weight = 5.0
46 money = 45.0
47 print("苹果单价%.2f 元/⽄,购买了 %.2f ⽄,需要⽀付 %.2f 元" % (price, weight, money))

f-string的使用:

 1 # fstring:用来给字符串动态绑定数据
 2 
 3 # fstring的使用语法格式:
 4 
 5 # f"姓名: {'李四'} 年龄: {20}"
 6 
 7 name = "李四"
 8 age = 20
 9 
10 info = f"姓名:{name} 年龄:{age}"
11 print(info, type(info))
12 
13 info = f"姓名:{'王三'} 年龄:{20}"
14 print(info, type(info))
15 
16 # 3 + 4 = 7
17 
18 num1 = float(input("请输入第一个数字:"))
19 num2 = float(input("请输入第二个数字:"))
20 
21 result = F'{num1} + {num2} = {num1 + num2}'
22 print(result)
23 
24 # 总结: fstring只能在python3.6及以上版本才能使用,如果兼容之前的代码可以使用字符串的格式化输出

学生信息管理系统(文件版):

  1 student_list = []  # 定义一个空列表,用来保存用户输入的学生信息
  2 
  3 
  4 def menu():  # 定义函数用于菜单输出
  5     print("------------------------------")
  6     print("----欢迎使用学生信息管理系统------")
  7     print("----1.显示学生信息--------------")
  8     print("----2.添加学生信息--------------")
  9     print("----3.删除学生信息--------------")
 10     print("----4.修改学生信息--------------")
 11     print("----5.保存学生信息--------------")
 12     print("----6.退出学生信息系统-----------")
 13     print("------------------------------")
 14 
 15 
 16 def menu_msg():  # 定义函数用于获取用户选择的功能
 17     menu()
 18     user = int(input("请输入需要的功能代码:"))
 19     if user == 1:
 20         show_msg()  # 学生信息显示函数
 21     elif user == 2:
 22         add_msg()  # 添加学生信息函数
 23     elif user == 3:
 24         del_msg()  # 删除学生信息函数
 25     elif user == 4:
 26         modify_msg()  # 修改学生信息函数
 27     elif user == 5:
 28         save_msg()  # 保存学生信息函数
 29     elif user == 6:
 30         print("欢迎下次使用本系统!")
 31         exit()  # 结束程序
 32 
 33 
 34 def show_msg():  # 显示学生信息函数
 35     if len(student_list) > 0:
 36         for data in student_list:
 37             # 通过循环将列表中数据输出
 38             print(data)
 39     else:
 40         print("系统中无学生信息!")
 41     menu_msg()
 42 
 43 
 44 def add_msg():  # 添加学生信息函数
 45     name = input("请输入学生姓名:")
 46     age = input("请输入学生年龄:")
 47     sex = input("请输入学生性别:")
 48     # 使用字典保存用户输入的学生信息
 49     student_dict = {"name": name, "age": age, "sex": sex}
 50     student_list.append(student_dict)
 51     print("添加成功!")
 52     user = input("是否继续添加学生信息(是:y或Y,否:N或n):")
 53     if user == 'y' or user == 'Y':
 54         add_msg()
 55     elif user == 'n' or user == 'N':
 56         menu_msg()
 57     else:
 58         print("非法数据")
 59         exit()
 60 
 61 
 62 def del_msg():  # 删除学生信息函数
 63     # 通过enumerate方法给字典中存储的学生信息分配一个学号
 64     for index, dict in enumerate(student_list):
 65         print(f"学号是:{index + 1 },其余信息为:{dict}")
 66     student_no = int(input("请输入学生学号:"))
 67     # 判断用户输入的索引是否在0-len(student_list)内
 68     # student_no - 1 是因为显示学号是将索引+1了
 69     if student_no >= 0 and student_no - 1 < len(student_list):
 70         del student_list[student_no - 1]
 71         print("恭喜您删除学生信息成功!")
 72     else:
 73         print("您输入的学号不存在!")
 74     menu_msg()
 75 
 76 
 77 def modify_msg():  # 修改学生信息函数
 78     # 通过enumerate方法给字典中存储的学生信息分配一个学号
 79     for index, dict in enumerate(student_list):
 80         print(f"学号是:{index + 1 },其余信息为:{dict}")
 81     student_no = int(input("请输入学生学号:"))
 82     if 0 <= (student_no - 1) < len(student_list):
 83         # 通过列表[索引号]["键名"] 对存储在列表中字典里的数据进行修改
 84         student_list[student_no - 1]["name"] = input("请输入学生姓名:")
 85         student_list[student_no - 1]["age"] = input("请输入学生年龄:")
 86         student_list[student_no - 1]["sex"] = input("请输入学生性别:")
 87         print("修改学生信息成功")
 88     else:
 89         print("您输入的学号不存在!")
 90     menu_msg()
 91 
 92 
 93 def save_msg():  # 保存数据函数
 94     # 将列表所存储的信息通过类型转换写入txt文件中
 95     f = open("student.txt", "w")
 96     student_str = str(student_list)
 97     f.write(student_str)
 98     f.close()
 99     menu_msg()
100 
101 
102 menu_msg()

列表的嵌套使用:

 1 # 已知列表 my_list = [["李三", 20], ["王五", 22], ["刘三", 30]] ,
 2 # 1. 对该列表进行过滤获取年龄大于20的列表
 3 # 比如:  [["王五", 22], ["刘三", 30]]
 4 my_list = [["李三", 20], ["王五", 22], ["刘三", 30]]
 5 new_list = []
 6 for value in my_list:
 7     if value[1] > 20:
 8         new_list.append(value)
 9 print(new_list)
10 
11 # 2. 对该列表进行过滤获取名字结尾叫'三'的列表
12 # 比如:  [["李三", 20], ["刘三", 30]]
13 
14 my_list = [["李三", 20], ["王五", 22], ["刘三", 30]]
15 new_list = []
16 
17 for data in my_list:
18     if data[0][-1] == '三':
19         new_list.append(data)
20 print(new_list)
1 # 使用列表嵌套,完成8名老师随机分配3个办公室
2 import random
3 office = [[], [], []]
4 teacher = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h']
5 
6 for value in teacher:
7     office[random.randint(0,2)].append(value)
8 
9 print(office)
 1 # 将8个老师随进分配到3个办公室,
 2 # 每个办公室至少有一个人
 3 
 4 
 5 import random
 6 
 7 office_list = [[], [], []]
 8 
 9 teacher_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
10 
11 while True:
12     for teacher in teacher_list:
13         index = random.randint(0, 2)
14         office_list[index].append(teacher)
15 
16     print(office_list)
17 
18     num = 1
19     for office in office_list:
20         print("第%d个办公室有%d人" % (num, len(office)))
21         for teacher in office:
22             print(teacher)
23         num += 1
24 
25     if len(office_list[0]) == 0 or len(office_list[1]) == 0 or len(office_list[2]) == 0:
26         continue
27     else:
28         break
29 #
30 #
31 
32 
33 # 进阶版
34 
35 import random
36 
37 office_list = [[], [], []]
38 
39 teacher_list = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H']
40 
41 while True:
42     for teacher in teacher_list:
43         index = random.randint(0, 2)
44         office_list[index].append(teacher)
45 
46     print(office_list)
47 
48     for index, office in enumerate(office_list):
49         print("第%d个办公室有%d人" % (index + 1, len(office)))
50         for teacher in office:
51             print(teacher)
52 
53     if len(office_list[0]) == 0 or len(office_list[1]) == 0 or len(office_list[2]) == 0:
54         continue
55     else:
56         break

列表结合random使用:

 1 从键盘中输入5个学生的名字,存储到列表中,然后打印出每个学生名字中的第2个字母
 2 name_list = []
 3 for _ in range(5):
 4     name = input("请输入学生姓名:")
 5     name_list.append(name)
 6 
 7 for index in range(len(name_list)):
 8     print(name_list[index][1])
 9 
10 从键盘获取5个学生的名字,然后随机抽出一名学生去打扫卫生
11 import random
12 
13 name_list = []
14 for _ in range(5):
15     name = input("请输入学生姓名:")
16     name_list.append(name)
17 
18 print("%s打扫卫生!" % name_list[random.randint(0, len(name_list))])

练习enumerate函数的使用:

1 # enumerate:使用for循环遍历容器类型数据时,
2 # 既要下标又要数据可以结合enumerate函数来使用
3 
4 # 将自定义的列表输出并输出每个数据的下标
5 
6 my_list = ['a', 'b', 'c', 'd', 'e', 'f']
7 
8 for index, value in enumerate(my_list):
9     print(index, value)

字典的应用:

 1 # 编程:
 2 # 使用字典来存储一个人的信息
 3 # (姓名、年龄、学号、QQ、微信、住址等),
 4 # 这些信息来自 键盘的输入
 5 
 6 msg_dict = {}
 7 
 8 name = input("请输入您的姓名:")
 9 age = int(input("请输入您的年龄:"))
10 student_no = input("请输入您的学号:")
11 QQ = input("请输入您的QQ:")
12 VX = input("请输入您的微信:")
13 address = input("请输入您的住址:")
14 
15 msg_dict["name"] = name
16 msg_dict["age"] = age
17 msg_dict["student_no"] = student_no
18 msg_dict["QQ"] = QQ
19 msg_dict["VX"] = VX
20 msg_dict["address"] = address
21 
22 
23 print(msg_dict)
 1 1. 使用程序描述一个学生信息,
 2 # 接收信息包含姓名、年龄、喜欢的书籍
 3 # (西游记、红楼梦、三国演义、水浒传)
 4 
 5 my_dict = {}
 6 book_list = []
 7 name = input("请输入您的姓名:")
 8 age = int(input("请输入您的年龄:"))
 9 
10 my_dict["name"] = name
11 my_dict["age"] = age
12 book = int(input("请输入你喜欢书的个数(1-4):"))
13 
14 if 1 <= book <= 4:
15     for value in range(book):
16         book_list.append(input("请输入你喜欢的第%d本书的名字:" % (value + 1)))
17 
18 my_dict["books"] = book_list
19 print(my_dict)
20 
21 # 2. 已知 my_list = [{'name': '李四', 'age': 20},
22 #                   {'name': '王五', 'age': 22}]
23 # 过滤出来年龄大于20的数据, 比如: [{'name': '王五', 'age': 22}]
24 
25 my_list = [{'name': '李四', 'age': 20},
26            {'name': '王五', 'age': 22}]
27 new_list = []
28 for dict in my_list:
29     if dict['age'] > 20:
30         new_list.append(dict)
31 print(new_list)
32 
33 
34 # 3. 使用函数完成对第1道题的开发
35 
36 def books():
37     my_dict = {}
38     book_list = []
39     name = input("请输入您的姓名:")
40     age = int(input("请输入您的年龄:"))
41 
42     my_dict["name"] = name
43     my_dict["age"] = age
44     book = int(input("请输入你喜欢书的个数(1-4):"))
45 
46     if 1 <= book <= 4:
47         for value in range(book):
48             book_list.append(input("请输入你喜欢的第%d本书的名字:" % (value + 1)))
49 
50     my_dict["books"] = book_list
51     print(my_dict)
52 
53 books()

字符串、列表、字典的综合应用:

 1 # 字符串、列表、字典综合应用
 2 # 设计一个程序
 3 # 要求用户可以实现登录、注册、注销登录等功能
 4 # 用户的用户名(长度6-20)、密码(长度8-20)、昵称、年龄信息保存到字典中
 5 # 将每个已注册用户的保存到列表中,即将上一步的字典保存到列表中
 6 # 维护用户的登录状态,每次只能有一个用户处于登录状态,直到选择注销登录
 7 # 如果不选择退出系统,该程序应当一直运行
 8 
 9 user = []
10 
11 user_dict = {}
12 while True:
13     print("1.登录")
14     print("2.注册")
15 
16     user_chose = int(input("请输入您想要的功能:"))
17     if user_chose == 1:
18         user_name = input("请输入您的用户名:")
19         password = input("请输入您的密码:")
20         if user_name == user_dict["user_name"] and password == user_dict["password"]:
21             print("登陆成功")
22             user_chose = input("是否注销登陆:是y或Y")
23             user_chose = user_chose.upper()
24             if user_chose == 'Y':
25                 print("注销成功!")
26                 break
27         else:
28             print("用户名或密码错误!")
29     elif user_chose == 2:
30         user_name = input("请输入您的用户名(长度6-20):")
31         password = input("请输入您的密码(长度8-20):")
32         name = input("请输入您的昵称:")
33         age = input("请输入您的年龄:")
34         if  6<= len(user_name) <= 20 and 8 <= len(password)<= 20:
35             user_dict["user_name"] = user_name
36             user_dict["password"] = password
37             user_dict["name"] = name
38             user_dict["age"] = age
39             user = user_dict
40         else:
41             print("请输入正确长的用户名或密码!")
42         continue
43     else:
44         print("非法数据")
45         continue

不定长位置参数和不定长关键字参数使用:

 1 # 使用不定长位置参数、不定长关键字参数完成多个数的平均值计算
 2 
 3 
 4 def sum_num(*aegs, **kwargs):
 5     num_sum = 0
 6     for value in kwargs.values():
 7         num_sum += value
 8 
 9     for value in aegs:
10         num_sum += value
11 
12     return num_sum
13 
14 
15 def avg_sum(*args, **kwargs):
16     num_sum = sum_num(*args, **kwargs)
17     avg_num = num_sum / (len(args) + len(kwargs))
18     return avg_num
19 
20 
21 result = avg_sum(1, 2, 3, 4, a=1, b=2, c=3, d=4)
22 
23 print(result)
 1 # 使用不定长参数定义一个函数max_min,
 2 # 接受的参数类型是数值,
 3 # 最终返回这些数中的最大值和最小值
 4 
 5 def max_min(*args):
 6     return max(args), min(args)
 7 
 8 
 9 max_value, min_value = max_min(1, 2, 3, 4, 5, 67, 7, 235, 53, 3)
10 print(max_value, min_value)
 1 # 分别定义加减乘除四个函数实现两个数之间的加减乘除操作
 2 
 3 def add(a, b):
 4     return a + b
 5 
 6 
 7 def jian(a, b):
 8     return a - b
 9 
10 
11 def cheng(a, b):
12     return a * b
13 
14 
15 def chu(a, b):
16     return a / b
17 
18 
19 value1 = add(1, 2)
20 value2 = jian(2, 1)
21 value3 = cheng(4, 2)
22 value4 = chu(5, 6)
23 
24 print(value1, value2, value3, value4)
1 # 定义一个函数min,接受的参数类型是数值,最终返回两个数中的最小值
2 def min_values(num1, num2):
3     result = num1,num2
4     value = min(result)
5     return value
6 
7 min_value = min_values(666,787)
8 print(min_value)
# 定义一个函数max,接受的参数类型是数值,最终返回两个数中的最大值
def max_values(num1, num2):
    result = num1,num2
    value = max(result)
    return value

max_value = max_values(4,777)
print(max_value)
 1 # 定义一个使用不定长参数的函数,并在函数中打印出参数及其类型,统计传入参数的个数
 2 def show(*args):
 3     print(args, type(args), len(args))
 4 
 5 
 6 show(1, 2, 34, 5, 6, 7, 8, 9)
 7 
 8 
 9 def show(**kwargs):
10     print(kwargs, type(kwargs), len(kwargs))
11 
12 
13 show(a=1, b=2, c=3, d=4)
 1 # 定义一个函数cut_str,
 2 # 接受三个参数,
 3 # 分别为字符串s、数值a1、数值a2,
 4 # 将字符串s从下标a1开始的a2个字符删除,
 5 # 并把结果返回
 6 
 7 #
 8 def cut_str(s="", a1=0, a2=-1):
 9     result = s[a1:a2]
10     new_str = s.replace(result, "")
11     return new_str
12 
13 result = cut_str("abcdweasfsajfgjas",2,4)
14 print(result)

♥对find()方法进行扩充:

 1 # 1.定义函数findall,
 2 # 实现对字符串find方法的进一步封装,
 3 # 要求返回符合要求的所有位置的起始下标,
 4 # 如字符串"helloworldhellopythonhelloc++hellojava",
 5 # 需要找出里面所有的"hello"的位置,
 6 # 最后将返回一个元组(0,10,21,29),
 7 # 即将h的下标全部返回出来,
 8 # 而find方法只能返回第一个
 9 
10 def findall(str="", chr=""):
11     # 定义一个列表用于存储找到的索引值
12     find_list = []
13     # 执行循环,循环次数为指定字符在字符串中出现的次数
14     for value in range(str.count(chr)):
15         # 定义变量用于存储指定字符对应的索引
16         find_count = str.find(chr)
17         # find_count + len(chr) * value :
18         # 除第一次找到指定字符串的索引外,
19         # 其余次数均要加上替换掉的字符串的长度,
20         # 才能够获取到指定字符在最初字符串中最初的索引
21         find_list.append(find_count + len(chr) * value)  # 将索引追加到列表中
22         # 去除已经找到的指定字符串
23         str = str.replace(chr, "", 1)
24     return find_list
25 
26 
27 result = findall("helloworldhellopythonhelloc++hellojava", "hello")
28 
29 print(result)

函数的递归调用:

 1 # 使用递归函数求n的阶乘
 2 
 3 
 4 def calc_num(num):
 5     # 函数递归调用是必须要有结束条件
 6     if num == 1:
 7         return 1
 8     else:
 9         return num * calc_num(num - 1)
10 
11 result = calc_num(5)
12 print(result)
13 
14 
15 # 使用递归的方法打印出前n个斐波那契数列
16 # 斐波那契数列起始数字为0和1,之后每个数都是前两个数之和,比如:0,1,1,2,3,5,8,...
17 # 0 1 1 2 3 5 8 13 21 ....
18 
19 num_list = [0,1]
20 
21 def fbnq_num(n):
22     if n == 2:
23         return num_list
24     else:
25         # 将列表中最后两个数的和相加后追加到列表后
26         num_list.append(num_list[-1]+ num_list[-2])
27         return fbnq_num(n-1)
28 
29 result = fbnq_num(9)
30 print(result)

Python中对文件的操作练习:

 1 # 文件的相关操作、练习及应用
 2 # 创建一个新项目中新创建一个名字py文件夹
 3 import os
 4 my_dir = os.mkdir("文件操作")
 5 # 进入py文件夹中创建5个文件,文件名分别为
 6 # python-06基础班-1.txt,
 7 # python-06基础班-2.txt,
 8 # python-06基础班-3.txt,
 9 # python-06基础班-4.txt,
10 # python-06基础班-5.txt
11 for value in range(5):
12     f = open(f"文件操作/python-06基础班-{value+1}.txt","w")
13     f.close()
14 # 然后将py文件夹中的所有文件都改名为
15 # [黑马]python-06基础班-1.txt,
16 # [黑马]python-06基础班-2.txt,
17 # [黑马]python-06基础班-3.txt,
18 # [黑马]python-06基础班-4.txt,
19 # [黑马]python-06基础班-5.txt
20 for value in range(5):
21     f = os.rename(f"文件操作/python-06基础班-{value+1}.txt",f"文件操作/[黑马]python-06基础班-{value+1}.txt")
 1 # 编写一段代码以完成两份文件之间的相互备份
 2 import os
 3 # 在python用户目录下创建python基础班文件夹
 4 os.mkdir("python基础班")
 5 # 在文件夹中创建gailun.txt文件
 6 # 打开文件在gailun.txt中写入"德玛西亚!人在塔在!"
 7 f = open("python基础班/gailun.txt", "w")
 8 f.write("德玛西亚!人在塔在!")
 9 f.close()
10 # 在文件夹中创建gailun副本.txt文件
11 f = open("python基础班/gailun副本.txt", "w")
12 # 将gailun.txt文件中的数据写入gailun副本.txt文件中
13 f1 = open("python基础班/gailun.txt", "r")
14 # .read()将文件内容读取并返回字符串
15 # .readlins()将文件内容读取并返回列表
16 result = f1.readline()
17 f1.close()
18 f.write(result)
19 f.close()
20 print(result, type(result))
21 # 打开文件,查看文件中是否有内容

继承的应用:

 1 # 1. 定义一个Student类,统计Student类创建的实例(对象)个数, 使用属性返回创建实例的个数
 2 class Studnet(object):
 3     obj_num = 0
 4 
 5     def __init__(self):
 6         Studnet.obj_num += 1
 7         print("实例个数:", Studnet.obj_num)
 8 
 9 
10 s1 = Studnet()
11 s2 = Studnet()
12 # 2. 定义一个Person类,添加两个实例属性(name, age),
13 # 创建两个实例对象添加到列表里面, 例如: [p1, p2]
14 obj_list = []
15 
16 
17 class Person(object):
18     def __init__(self, name, age):
19         self.name = name
20         self.age = age
21 
22 
23 p1 = Person("李四", 20)
24 obj_list.append(p1)
25 p2 = Person("王超", 22)
26 obj_list.append(p2)
27 print(obj_list)
28 # 3. 把列表中的person对象改成列表中的字典,
29 # 例如: [{"name": "李四", "age": 20}, {"name": "李四", "age": 20}]
30 new_list = [obj.__dict__ for obj in obj_list]
31 print(new_list)
32 # 4. 把该数据[{"name": "李四", "age": 20}, {"name": "李四", "age": 20}]保存到文件
33 f = open("obj_msg.data", "w", encoding="utf-8")
34 f.write(str(new_list))
35 f.close()
36 # 5. 读取上一题中文件中的数据,
37 # 把 [{"name": "李四", "age": 20}, {"name": "李四", "age": 20}]
38 # 转成 [p1, p2]
39 f = open("obj_msg.data", "r", encoding="utf-8")
40 new_obj_list = eval(f.read())
41 f.close()
42 print(new_obj_list)
43 last_obj_list = [Person(**obj_dict) for obj_dict in new_obj_list]
44 print(last_obj_list)

学生管理系统-面向对象版:

1.创建student_system包

2.在student_system包中创建studnet_model.py:

class Student(object):
    def __init__(self, name, age, sex):
        self.name = name
        self.age = age
        self.sex = sex

3.在student_system包中创建student_system_model.py:

import os
from student_system import student_model
class StudentSystem(object):
    def __init__(self):
        # 定义类属性的学生列表
        self.student_list = []  # list()

    # 显示功能菜单
    @staticmethod
    def show_menu():
        print("----学生管理系统V1.0----")
        print("1. 添加学生")
        print("2. 修改学生")
        print("3. 删除学生")
        print("4. 查询学生")
        print("5. 显示所有学生")
        print("6. 退出")

    # 添加学生的功能方法
    def add_student(self):
        name = input("请输入您的姓名:")
        age = input("请输入您的年龄:")
        sex = input("请输入您的性别:")

        stu = student_model.Student(name, age, sex)
        self.student_list.append(stu)

        print("添加成功")

    # 显示所有学生的功能方法
    def show_all_student(self):
        for index, stu in enumerate(self.student_list):
            # 学号 = 下标 + 1
            num = index + 1
            print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
                                                   stu.name,
                                                   stu.age,
                                                   stu.sex))

    # 修改学生信息的功能方法
    def modify_student(self):
        for index, stu in enumerate(self.student_list):
            # 学号 = 下标 + 1
            num = index + 1
            print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
                                                   stu.name,
                                                   stu.age,
                                                   stu.sex))
        student_no = int(input("请输入您要修改学生信息的学号:"))
        # 根据学号计算对应的下标
        index = student_no - 1
        # 判断index是否是一个合法的下标
        if 0 <= index < len(self.student_list):
            # 根据下标获取要修改的学生字典
            stu = self.student_list[index]
            # 接收用户输入的最新数据
            new_name = input("请输入您修改后的姓名:")
            new_age = input("请输入您修改后的年龄:")
            new_sex = input("请输入您修改后的性别:")
            # 修改指定字典里面的信息
            stu.name = new_name
            stu.age = new_age
            stu.sex = new_sex

            print("修改成功!")
        else:
            print("请输入合法学号!")

    # 删除学生信息的功能方法
    def remove_student(self):
        for index, stu in enumerate(self.student_list):
            # 学号 = 下标 + 1
            num = index + 1
            print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
                                                   stu.name,
                                                   stu.age,
                                                   stu.sex))
        student_no = int(input("请输入要删除学生的学号:"))
        # 根据学号计算对应下标
        index = student_no - 1
        # 判断index是否是一个合法的下标
        if 0 <= index < len(self.student_list):
            # 根据下标删除学生列表中的数据
            del self.student_list[index]
            print("删除成功!")
        else:
            print("请输入合法的学号!")

    # 查询学生的功能方法
    def query_student(self):
        name = input("请输入您要查询学生的姓名:")
        # 遍历学生列表,获取每一个学生字典信息
        for index, stu in enumerate(self.student_list):
            # 根据学生字典取出姓名,判断是否和用户输入的姓名一致
            if stu.name == name:
                # 生成学号
                num = index + 1
                print("学号: %d 姓名: %s 年龄: %s 性别: %s" % (num,
                                                       stu.name,
                                                       stu.age,
                                                       stu.sex))
                break
        else:
            print("对不起,您查询的学生信息不存在!")

    # 保存学生对象列表数据到文件
    def save_data(self):
        with open("student_list.data", "w", encoding="utf-8") as file:
            student_dic_list = [stu.__dict__ for stu in self.student_list]
            # print(student_dic_list)
            file.write(str(student_dic_list))

    # 加载缓存文件中的历史数据
    def load_data(self):
        # 判断文件是否存在
        if os.path.exists("student_list.data"):
            with open("student_list.data", "r", encoding="utf-8") as file:
                stu_dict_list = file.read()
                new_stu_list = [Student(**stu_dict) for stu_dict in eval(stu_dict_list)]
                self.student_list.extend(new_stu_list)

    # 程序启动的入口方法
    def start(self):
        # 加载历史数据,只加载一次即可
        self.load_data()

        while True:
            # 显示功能菜单
            self.show_menu()

            # 2. 接收用户输入的功能选项
            menu_option = input("请输入您需要的功能选项:")

            # 3. 判断用户输入的功能选项
            if menu_option == "1":
                # print("执行添加学生的功能")
                self.add_student()
            elif menu_option == "2":
                # print("执行修改学生的功能")
                self.modify_student()
            elif menu_option == "3":
                # print("执行删除学生的功能")
                self.remove_student()
            elif menu_option == "4":
                # print("执行查询学生的功能")
                self.query_student()
            elif menu_option == "5":
                # print("执行显示所有学生的功能")
                self.show_all_student()
            elif menu_option == "6":
                print("退出系统")
                # 退出程序之前,保存数据到文件
                self.save_data()
                break

4.创建main模块:

from student_system import studnet_system_model
sys = studnet_system_model.StudentSystem()
sys.start()

基础班考试题:

# 1.定义一个Person类

# ​        1)属性:姓名name,体重weight
#
# ​        2)方法:init方法
import random


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


# 2.在Person类外面完成以下要求:
#
#  1)创建四个对象("牛一",60 ; "陈二",55 ; "张三",70 ; "王五",65 ),
# 将这四个对象添加到列表。
n1 = Person("牛一", 60)
c2 = Person("陈二", 55)
z3 = Person("张三", 70)
w5 = Person("王五", 65)
person_list = []
person_list.append(n1)
person_list.append(c2)
person_list.append(z3)
person_list.append(w5)

#  2).获取60-70之间的随机数作为体重标准线(包含60和70),
# 遍历列表将体重大于等于体重标准线的元素写入健康体重名单health.txt。格式如下:
# 姓名:牛一 体重:60 状态:健康
#
# 姓名:张三 体重:70 状态:健康
#
# 姓名:王五 体重:65 状态:健康
# def write_dict(name, weight):
#     return "姓名:" + name + " 体重:" + str(weight) + " 状态:健康\n"

with open("health.txt", "w", encoding="utf-8") as file:
    # prn_dict_list = [prn.__dict__ for prn in person_list if prn.weight > random.randint(60, 70)]
    # new_list = [write_dict(**prn_dict) for prn_dict in prn_dict_list]
    # for data in new_list:
    #     file.write(str(data))
    new_list = [prn for prn in person_list if prn.weight > random.randint(60, 70)]
    for prn in new_list:
        new_str = "姓名:" + prn.name + " 体重:" + str(prn.weight) + " 状态:健康\n"
        file.write(new_str)
 1 # 提示用户循环录入字符串,直到输入的字符串以's'结尾时结束录入,
 2 # 将录入的字符串存入列表,遍历列表,将列表中以'a'开头的字符串打印到控制台。
 3 
 4 my_list = []
 5 while True:
 6     my_str = input("请输入字符串:")
 7 
 8     if my_str.endswith('s'):
 9         my_list.append(my_str)
10 
11         new_lsit = [str_msg for str_msg in my_list if str_msg.startswith('a')]
12         for data in new_lsit:
13             print(data)
14         break
15     elif my_str.startswith('a'):
16         my_list.append(my_str)