Python编程练习(四):31 - 40

零基础入门学Python系列内容对应的所有编程练习题目 → \rightarrow →Python编程练习题目汇总

  1. 编写程序:实现一个通讯录系统(利用字典的特性实现)。
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
  |‐‐‐ 感谢使用通讯录程序 ‐‐‐|
  >>>

  1. 编写程序:实现一个通讯录系统(利用异常的原理实现)。
# 使用条件语句的代码非常直观明了,但是效率不高。
# 因为程序会两次访问字典的键,一次判断是否存在(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
  |‐‐‐ 感谢使用通讯录程序 ‐‐‐|
  >>>

  1. 编写程序:比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置。
# 比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置。
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 行不一样
  >>>

  1. 编写程序:比较用户输入的两个文件,如果不同,显示出所有不同处的行号与第一个不同字符的位置(用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 行不一样
  >>>

  1. 编写程序:当用户输入文件名和行数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行的内容如下:

  从前有座山,
  山上有座庙,
  庙里有个老和尚在给小和尚讲故事,
  讲的故事是:
  >>>

  1. 编写程序:当用户输入文件名和想打印到屏幕上的起始行数之后,将该文件的这几行内容打印到屏幕上。
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行的内容如::

  山上有座庙,
  庙里有个老和尚在给小和尚讲故事,
  讲的故事是:
  从前有座山,
  >>>

  1. 编写程序:统计当前目录下每个文件类型的文件个数。
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个
  >>>

  1. 编写程序:计算当前文件夹下所有文件的大小。
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】
  >>>

  1. 编写程序:用户输入文件名以及开始搜索的路径,搜索该文件是否存在。
#编写一个程序,用户输入文件名以及开始搜索的路径,搜索该文件是否存在。如遇到文件夹,则进入文件夹继续搜索。
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
  >>>

  1. 编写程序:实现“全部替换”的功能。
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
  >>>

Python编程练习(四):31 - 40

上一篇:Python编程练习(五):41 - 50


下一篇:C++提高编程(五)—— STL常用算法(1) :常用遍历算法