零基础入门学Python系列内容对应的所有编程练习题目 → \rightarrow →Python编程练习题目汇总。
- 编写程序:实现一个通讯录系统(利用字典的特性实现)。
print('|‐‐‐ 欢迎进入通讯录程序 ‐‐‐|')
print('|‐‐‐ 1:查询联系人资料 ‐‐‐|')
print('|‐‐‐ 2:插入新的联系人 ‐‐‐|')
print('|‐‐‐ 3:删除已有联系人 ‐‐‐|')
print('|‐‐‐ 4:退出通讯录程序 ‐‐‐|')
contacts = dict()
while 1:
instr = int(input('\n请输入相关的指令代码:'))
if instr == 1:
name = input('请输入联系人姓名:')
if name in contacts:
print(name + ' : ' + contacts[name])
else:
print('您输入的姓名不再通讯录中!')
if instr == 2:
name = input('请输入联系人姓名:')
if name in contacts:
print('您输入的姓名在通讯录中已存在 ‐‐>> ', end='')
print(name + ' : ' + contacts[name])
if input('是否修改用户资料(YES/NO):') == 'YES':
contacts[name] = input('请输入用户联系电话:')
else:
contacts[name] = input('请输入用户联系电话:')
if instr == 3:
name = input('请输入联系人姓名:')
if name in contacts:
del(contacts[name]) # 也可以使用dict.pop()
else:
print('您输入的联系人不存在。')
if instr == 4:
break
print('|‐‐‐ 感谢使用通讯录程序 ‐‐‐|')
>>>
|‐‐‐ 欢迎进入通讯录程序 ‐‐‐|
|‐‐‐ 1:查询联系人资料 ‐‐‐|
|‐‐‐ 2:插入新的联系人 ‐‐‐|
|‐‐‐ 3:删除已有联系人 ‐‐‐|
|‐‐‐ 4:退出通讯录程序 ‐‐‐|
请输入相关的指令代码:1
请输入联系人姓名:小明
您输入的姓名不再通讯录中!
请输入相关的指令代码:2
请输入联系人姓名:小明
请输入用户联系电话:15390263192
请输入相关的指令代码:1
请输入联系人姓名:小明
小明 : 15390263192
请输入相关的指令代码:3
请输入联系人姓名:小明
请输入相关的指令代码:1
请输入联系人姓名:小明
您输入的姓名不再通讯录中!
请输入相关的指令代码:4
|‐‐‐ 感谢使用通讯录程序 ‐‐‐|
>>>
- 编写程序:实现一个通讯录系统(利用异常的原理实现)。
# 使用条件语句的代码非常直观明了,但是效率不高。
# 因为程序会两次访问字典的键,一次判断是否存在(if name in contacts),一次获得值(例如:print(name + ' : ' + contacts[name])。
# 如果利用异常解决方案,我们可以简单避开每次需要使用in判断是否key存在字典中的操作。
# 因为只要当key不存在字典中时,会触发KeyError异常,利用此特性我们可以修改代码如下:
print('|--- 欢迎进入通讯录程序 ---|')
print('|--- 1:查询联系人资料 ---|')
print('|--- 2:插入新的联系人 ---|')
print('|--- 3:删除已有联系人 ---|')
print('|--- 4:退出通讯录程序 ---|')
contacts = dict()
while 1:
instr = int(input('\n请输入相关的指令代码:'))
if instr == 1:
name = input('请输入联系人姓名:')
try:
print(name + ' : ' + contacts[name])
except KeyError:
print('您输入的姓名不再通讯录中!')
if instr == 2:
name = input('请输入联系人姓名:')
try:
contacts[name]
print('您输入的姓名在通讯录中已存在 -->> ', end='')
print(name + ' : ' + contacts[name])
if input('是否修改用户资料(YES/NO):') == 'YES':
contacts[name] = input('请输入用户联系电话:')
except KeyError:
contacts[name] = input('请输入用户联系电话:')
if instr == 3:
name = input('请输入联系人姓名:')
try:
del(contacts[name]) # 也可以使用dict.pop()
except KeyError:
print('您输入的联系人不存在。')
if instr == 4:
break
print('|--- 感谢使用通讯录程序 ---|')
>>>
|‐‐‐ 欢迎进入通讯录程序 ‐‐‐|
|‐‐‐ 1:查询联系人资料 ‐‐‐|
|‐‐‐ 2:插入新的联系人 ‐‐‐|
|‐‐‐ 3:删除已有联系人 ‐‐‐|
|‐‐‐ 4:退出通讯录程序 ‐‐‐|
请输入相关的指令代码:1
请输入联系人姓名:小明
您输入的姓名不再通讯录中!
请输入相关的指令代码:2
请输入联系人姓名:小明
请输入用户联系电话:15390263192
请输入相关的指令代码:1
请输入联系人姓名:小明
小明 : 15390263192
请输入相关的指令代码:3
请输入联系人姓名:小明
请输入相关的指令代码:1
请输入联系人姓名:小明
您输入的姓名不再通讯录中!
请输入相关的指令代码:4
|‐‐‐ 感谢使用通讯录程序 ‐‐‐|
>>>
- 编写程序:比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置。
# 比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置。
def file_compare(file1,file2):
f1 = open(file1)
f2 = open(file2)
count = 0 #统计行数
differ = [] #统计不一样的数量
for line1 in f1:
line2 = f2.readline()
count += 1
if line1 != line2:
differ.append(count)
f1.close()
f2.close()
return differ
file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')
differ = file_compare(file1,file2)
if len(differ) == 0:
print('两个文件完全一样!')
else:
print('两个文件共有【%d】处不同:'% len(differ))
for each in differ:
print('第 %d 行不一样' % each)
>>>
请输入需要比较的头一个文件名:file1.txt
请输入需要比较的另一个文件名:file2.txt
两个文件共有【2】处不同
第 3 行不一样
第 7 行不一样
>>>
- 编写程序:比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置(用with语句)。
def file_compare(file1,file2):
with open(file1) as f1, open(file2) as f2:
count = 0#统计行数
differ = []#统计不一样的数量
for line1 in f1:
line2 = f2.readline()
count += 1
if line1 != line2:
differ.append(count)
return differ
file1 = input('请输入需要比较的头一个文件名:')
file2 = input('请输入需要比较的另一个文件名:')
differ = file_compare(file1,file2)
if len(differ) == 0:
print('两个文件完全一样!')
else:
print('两个文件共有【%d】处不同:'% len(differ))
for each in differ:
print('第 %d 行不一样' % each)
>>>
请输入需要比较的头一个文件名:file1.txt
请输入需要比较的另一个文件名:file2.txt
两个文件共有【2】处不同
第 3 行不一样
第 7 行不一样
>>>
- 编写程序:当用户输入文件名和行数n之后,将该文件的前n行内容打印到屏幕上。
def file_view(file_name,line_num):
print('\n文件%s的前%s行的内容如下:\n' %(file_name,line_num))
f = open(file_name)
for i in range(int(line_num)):
print(f.readline(),end = '')
f.close()
file_name = input(r'请输入要打开的文件:')
line_num = input('请输入需要显示该文件前几行:')
file_view(file_name,line_num)
>>>
请输入要打开的文件:story.txt
请输入需要显示该文件前几行:4
文件story.txt的前4行的内容如下:
从前有座山,
山上有座庙,
庙里有个老和尚在给小和尚讲故事,
讲的故事是:
>>>
- 编写程序:当用户输入文件名和想打印到屏幕上的起始行数之后,将该文件的这几行内容打印到屏幕上。
def file_view(file_name,line_num):
if line_num.strip() == ':':
begin = '1'
end = '-1'
(begin,end) = line_num.split(':')
if begin == '':
begin = '1'
if end == '':
end = '-1'
if begin == '1' and end == '-1':
prompt = '的全文'
elif begin == '1':
prompt = '从开始到%s' %end
elif end == '-1':
prompt = '从%s到结束' %begin
else:
prompt = '从第%s行到第%s行' %(begin,end)
print('\n文件%s%s的内容如::\n' %(file_name,prompt))
begin = int(begin) - 1
end = int(end)
lines = end - begin
f = open(file_name)
for i in range(begin): #用于消耗掉begin之前的内容
f.readline()
if lines < 0:
print(f.read())
else:
for j in range(lines):
print(f.readline(),end='')
f.close()
file_name = input(r'请输入要打开的文件:')
line_num = input('请输入需要显示的行数【格式如 13:21 或 :21 或 : 】:')
file_view(file_name,line_num)
>>>
请输入要打开的文件:story.txt
请输入需要显示的行数【格式如 13:21 或 :21 或 : 】:2:5
文件story.txt从第2行到第5行的内容如::
山上有座庙,
庙里有个老和尚在给小和尚讲故事,
讲的故事是:
从前有座山,
>>>
- 编写程序:统计当前目录下每个文件类型的文件个数。
import os
all_files = os.listdir(os.curdir)#listdir()-列举指定目录中的文件名,使用os.curdir指代当前目录
type_dict = dict() #创建一个字典
for each_file in all_files:
if os.path.isdir(each_file): #isdir判断指定路径是否存在且是一个目录
#判断each_file路径是否是一个文件夹
type_dict.setdefault('文件夹',0)
type_dict['文件夹'] += 1
else:
ext = os.path.splitext(each_file)[1]#这里的分割是带点的,如:.txt
#分离文件名与后缀名 [0]文件名,[1]后缀名
type_dict.setdefault(ext,0)
type_dict[ext] += 1
for each_type in type_dict.keys():
print('该文件夹下共有类型为【%s】的文件%d个'%(each_type,type_dict[each_type]))
>>>
该文件夹下共有类型为【.jpg】的文件1个
该文件夹下共有类型为【.txt】的文件3个
该文件夹下共有类型为【文件夹】的文件2个
该文件夹下共有类型为【.py】的文件6个
>>>
- 编写程序:计算当前文件夹下所有文件的大小。
import os
all_files = os.listdir(os.curdir)#listdir()-列举指定目录中的文件名,使用os.curdir指代当前目录
file_dict = dict()
for each_file in all_files:
if os.path.isfile(each_file):#os.path.isfile()函数判断某一路径是否为文件
file_size = os.path.getsize(each_file)
file_dict[each_file] = file_size
for each in file_dict.items():#item()方法把字典中每对key和value组成一个元组,并把这些元组放在列表中返回
print('%s【%dBytes】' %(each[0],each[1]))#each[0]字典中对应key,each[1]为字典中对应value
>>>
cat_200_300.jpg【6327Bytes】
record.txt【418Bytes】
sample.txt【10Bytes】
story.txt【162Bytes】
猜数游戏.py【361Bytes】
猜数游戏1.py【398Bytes】
猜数游戏2.py【602Bytes】
猜数游戏3.py【715Bytes】
猜数游戏4.py【1078Bytes】
猜数游戏5.py【876Bytes】
>>>
- 编写程序:用户输入文件名以及开始搜索的路径,搜索该文件是否存在。
#编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索。
import os
def search_file(start_dir,target):
os.chdir(start_dir)# 切换当前工作目录
for each_file in os.listdir(os.curdir):
if each_file == target:
print(os.getcwd() + os.sep + each_file)#getcwd返回当前工作目录 sep输出操作系统路径分隔符
if os.path.isdir(each_file):#判断指定路径是否存在且是一个目录
search_file(each_file,target)#递归调用
os.chdir(os.pardir)#递归调用后切记返回上一层目录
start_dir = input('请输入待查找的初始目录:')
target = input('请输入需要查找的目标文件:')
search_file(start_dir,target)
>>>
请输入待查找的初始目录:C: \Users\Administrator\Desktop
请输入需要查找的目标文件:捕获.png
C: \Users\Administrator\Desktop\捕获.png
>>>
- 编写程序:实现“全部替换”的功能。
def file_replace(file_name,rep_word,new_word):
f_read = open(file_name)
content = []# 创建空的列表,用来存储数据
count = 0# 设置需要改的字符串的的个数(初始值为0)
for eachline in f_read:
if rep_word in eachline:# 判断需要改的字符串或单词是否在这一行中
count1 = eachline.count(rep_word) # 每行中需要改的字符串的个数
eachline = eachline.replace(rep_word,new_word) # 改字符串
count += count1 # 自加每行的个数
content.append(eachline) # 加到列表中去
decide = input('\n文件 %s *有%s个【%s】\n您确定要把所有的【%s】替换为【%s】吗?\n【YES/NO】:' %(file_name,count,rep_word,rep_word,new_word))
if decide in ['YES','Yes','yes']:# 如果用户输入包含有这些字符,则重写文件的内容
f_write = open(file_name,'w')
f_write.writelines(content)
f_write.close()
f_read.close()
file_name = input('请输入文件名(E:\python\my codes\一个例子\newfile.txt):')
rep_word = input('请输入需要替换的单词或字符:')
new_word = input('请输入新的单词或字符:')
file_replace(file_name,rep_word,new_word)
>>>
请输入文件名:story.txt
请输入需要替换的单词或字符:个
请输入新的单词或字符:位
文件 story.txt *有2个【个】
您确定要把所有的【个】替换为【位】吗?
【YES/NO】:YES
>>>