ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2021-05-20 07:56:34  阅读:147  来源: 互联网

标签:name Python 31 40 file each print input 输入


零基础入门学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
  >>>

在这里插入图片描述

标签:name,Python,31,40,file,each,print,input,输入
来源: https://blog.51cto.com/u_15178976/2790854

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有