零基础入门学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: breakprint('|‐‐‐ 感谢使用通讯录程序 ‐‐‐|')
>>>
|‐‐‐ 欢迎进入通讯录程序 ‐‐‐|
|‐‐‐ 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: breakprint('|--- 感谢使用通讯录程序 ---|')
>>>
|‐‐‐ 欢迎进入通讯录程序 ‐‐‐|
|‐‐‐ 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] += 1for 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_sizefor 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 osdef 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
>>>