程序1:学员管理系统V2.0 (列表嵌套)
程序2:学员管理系统的修改(修改为可以保存输入的学员信息,保存在一个文档中)
程序3:手机销售系统
(作业
)
1、函数参数传递的问题:(定义函数时可以创建一个参数,在调用函数时带上参数即可)
def
get_index(type):(定义函数时最好加上注释)
'''
函数的功能描述:获取用户选择学员序号
:param
type: 选择序号的类型 (参数的内容)
:return
: 选择的序号(返回的内容)
'''
index = input(
'请选择要%s的学员序号:'
%type)
调用函数:
index = get_index(
'修改'
)
index = get_index(
'删除'
)
2、嵌套列表中也可以使用集体定义列表的功能
例1:一维列表:
name=
input(
'请输入学员姓名:')
age=
input(
'请输入学员年龄:')
age=
int(age)
sex=
input(
'请输入学员性别(男/女):')
stu_list=[name,age,sex]
例2:二维列表:
new_name=
input(
'请输入新学员姓名:')
new_age=
input(
'请输入新学员年龄:')
new_sex=
input(
'请输入新学员性别:')
class_list[stu_id-
1][
0]=new_name
class_list[stu_id-
1][
1]=new_age
class_list[stu_id-
1][
2]=new_sex
new_name=
input(
'请输入新学员姓名:')
new_age=
input(
'请输入新学员年龄:')
new_age=
int(new_age)
new_sex=
input(
'请输入新学员性别:')
class_list[stu_id-
1]=[new_name,new_age,new_sex]
3、return强制结束函数的执行,return下的代码都不会再执行了。
例如:#判断是否有学员信息,如果没有,直接结束函数的执行
if len(student_list) ==
0:
print(
'没有学员信息,无法进行修改操作!')
# 强制结束函数的执行 return 下面的代码 都不会再执行了
return
# 1.查询学员信息
query_student()
# 2.选择要修改的学员序号
num = input(
'请选择要修改的学员序号:')
4、将数据写入文件进行保存以及从文件中读取数据:
代码中常用的文件格式:doxc xls txt .h5
不管是写入数据还是读取数据,都需要先打开文件,最后关闭文件,一共三步。
4.1 打开文件:文件可以在列表中新建文件,也可以使用python内置的open函数打开。
open(‘文件名’,mode='文件的打开模式')
例如:打开文件,写入模式:file_handle=open('1.txt',mode='w')
打开文件,读取模式:file_handle=open('1.txt',mode='r')
使用r参数,r是其默认参数,可传可不传。file_handle=open('1.txt' )即可。
文件的几种打开模式:
No1:w:只能操作写入。w模式中打开文件,如果文件中有数据,再次写入内容,会把原来的文件内容覆盖掉。
No2:r:只能读文件。
No3: a:在文件中追加内容。
No4: w+:可读可写。
No5: r+:可读可写。
No6: a+:可读可追加。
No7: wb+:写入进制数据。
注:在w,a模式下,如果文件不存在会自动创建文件,r模式必须保证文件存在。在进行读取文件时,最好进行文件是否存在的判断。
判断文件是否存在代码:
#引入OS包
import os
def read_data():
# 1.判断文件是否存在
rs = os.path.exists(
'students_v2.txt')
if rs ==
True:
# 2.打开文件
file_handle =
open(
'students_v2.txt',
mode=
'r')
4.2 写入文件:(中文文本在本地文件中可以查看,在pycharm中可能出现乱码)
如果在文件中先编辑数据再读取文件,读取的文件在敲回车的地方仍然会有换行符。
法1:write写入:不会自己换行,需要换行的话需要自己输入换行符\n。
例如:
file_handle.write(
'hello world
\n
'
)
file_handle.write(
'你好,世界'
)
法2:writelines()函数,参数必须是一个只存放字符串的列表。会将列表中的字符串紧挨着写在文件中,但是不会自动换行,如果需要换行,手动添加换行符。
file_handle.writelines([
'hello
\n
'
,
'world
\n
'
,
'你好
\n
'
,
'智游
\n
'
,
'zhengzhou
\n
'
])
4.3 读取数据:
使用r模式打开文件,做读取文件操作。打开文件的模式,默认就是r模式,如果只是读取文件不用填写mode模式。
法1:read(int)函数,读取文件内容,括号内参数指定长度,不指定读取所有数据。
例如:content=file_handle.read()
print(content)
法2:readline(int)函数,读取文件中的一行数据,参数指定读取的长度。默认读取一行数据(由上向下)。
例如:content=file_handle.readline()
print(content)
法3:readlines()读取所有行数据,会把每一行的数据作为一个元素,放在列表中返回
例如: contents=file_handle.readlines()
print(contents)
4.4 关闭文件:文件名.close()
例如:file_handle.close()
附:文件存取中两个不太重要的函数:tell()函数,seek()函数
tell()函数,返回当前文件中光标的位置,读取文件中的位置在哪,一个字符是一个位置,空格也算一个字符
offset偏移量
#seek()函数,调整光标的位置(光标的位置,光标的方式(0直接移动到开头,1不动,2到末尾 默认为0))
例如:file_handle.seek(0,0)
file_handle.seek(0)
例如:
file_handle=open('1.txt')
content=file_handle.readline()
print(content)
number=file_handle.tell()
print(number)
5、把单列表中数据的写入文件:(单列表)
list_1 = [
'张三'
,
'李四'
,
'王五'
]
file_handle =
open
(
'student.txt'
,
mode
=
'w'
)
for
name
in
list_1:
file_handle.write(name)
file_handle.write(
'
\n
'
)
file_handle.close()
6、读取文件中的数据,用列表形式输出:(单列表)
要求:读取文件,并且输出必须是列表形式,格式:
['张三','李四','王五']
file_handle =
open
(
'student.txt'
,
mode
=
'r'
)
contents = file_handle.readlines()
student_list = []
for
name
in
contents:
name = name.strip(
'
\n
'
)
student_list.append(name)
print
(student_list)
file_handle.close()
7、
strip()函数去除字符串中的某些字符。
例如:去除换行符\n:
name = name.strip(
'
\n
'
)
8、将嵌套的多个列表写入文本:(多列表)
student_list = [[
'张三'
,
'22'
,
'110'
],[
'李四'
,
'22'
,
'110'
],[
'王五'
,
'22'
,
'110'
]]
file_handle =
open
(
'student_v2.txt'
,
mode
=
'w'
)
for
student
in
student_list:
for
msg
in
student:
file_handle.write(msg)
file_handle.write(
' '
)
file_handle.write(
'
\n
'
)
file_handle.close()
9、从文件中取出数据,输出格式为:(多列表)
[['张三','22','110'],['李四','22','110'],['王五','22','110']]
file_handle =
open
(
'student_v2.txt'
,
mode
=
'r'
)
contents = file_handle.readlines()
student_list = []
for
msg
in
contents:
msg = msg.strip(
'
\n
'
)
list_1 = msg.split(
' '
)
list_1.pop()
student_list.append(list_1)
file_handle.close()
print
(student_list)
10、
join()函数实现把列表中的数据用某字符分开并拼接为一个字符串:
例如:把列表中的数据用 空格分开并拼接为一个字符串:(使得将嵌套列表中的数据写入文件的过程可以在单次循环中就实现)
for student in student_list:
# 把列表中的数据用 空格分开并拼接为一个字符串
s = ' '.join(student)
# 写入
file_handle.write(s)
file_handle.write('\n')
将
第8条笔记 中的代码使用join()函数实现:
student_list = [['张三','22','110'],['李四','22','110'],['王五','22','110']]
file_handle = open('student_v2.txt',mode='w')
for student in student_list:
s = ' '.join(student)
file_handle.write(s)
file_handle.write('\n')
file_handle.close()
11、
split()函数通过某个字符分割字符串,返回的是分割完成后的列表;
例如:通过 空格分割字符串,返回的是分割完成后的列表。(即将分割后得到的字符串,放在列表中返回。)
list_1 = msg.split(
' '
)