Python二级综合应用题:通讯录管理

news2024/9/21 19:51:46

Python二级考试中的最后一题一般是压轴题,有一定的难度,而且分值也高。此题一般分为1~3个问题,步步为赢,才能更好地解决。遇到这种问题,首先是不要怕,能解决几步是几步。今天我们一个通讯录管理题来说明一下:

一、题干

使用字典和列表完成学生通讯录管理,名单由文件 address.txt 给出,每行是一个学生的信息。示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

学号,姓名,电话号码,地址
101,aa,12345678,Beijing
102,bb,23456781,shanghai
...(略)

问题1:修改P301-1.py,在屏幕上显示功能菜单,功能菜单示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

1. 显示所有信息
2. 追加信息
3. 删除信息
请输入数字 1-3 选择功能:

请输入数字 1-3 选择功能(要求:不允许浮点数输入):接收用户输入数字选择功能,如果输入错误,要求用户重新输入。如果输入正确,在屏幕上显示提示语句:您选择了功能1/2/3。(5分)‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

问题2:修改P301-2.py,在问题1的代码基础上,当用户选择1的时候,从通讯录文件读取信息,并显示所有信息。(5分) 示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

1. 显示所有信息
2. 追加信息
3. 删除信息
请输入数字1-3选择功能:1
101,aa,12345678,Beijing
102,bb,23456781,shanghai
...(略)

问题3:修改P301-3.py ,在问题2的代码基础上,当用户选择2的时候,让用户从键盘输入一个学生的信息,用逗号隔开。将信息写入文件 new_address.txt 中,文件格式与 address.txt 相同。(10分) new_address.txt 内容示例如下:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

101,aa,12345678,Beijing
102,bb,23456781,shanghai
103,cc,34567,tianj

示例1:‪‬‪‬‪‬‪‬‪‬‮‬‫‬‫‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‮‬‫‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‪‬‪‬‪‬‪‬‪‬‪‬‪‬‮‬‭‬‫‬

输入: "1"
     "1"
     "2"
     "103,cc,34567,tianj"
输出: 内容输出到 new_address.txt 文件中

二、解决步骤

1. 问题一的解决

样例:

menu=["1. 显示所有信息","2. 追加信息","3. 删除信息"]
...
        ch = int(input("请输入数字1-3选择功能:") )
...
print("您选择了功能", ch)

解决:用flag定义一个开关,其数值为1时表示开,0表示关。

menu = ["1.显示所有信息","2.追加信息","3.删除信息"]
flag = 1
while flag:
    for m in menu:
        print(m)
    try:
        num = int(input("请输入数字1-3选择功能:")) #将获取的字符型数字转化为数字
        if num ==1:
            flag = 0
    except:
        flag = 1
        
    if num<1 or num >3:
        flag = 1

以上通过while来进行循环,指定flag为1时程序不断循环,flag为0时,程序停止运行。用try...except捕获异常,通过if来判断num的大小。

2. 问题二的解决

在问题一的基础上,增加了一个打印所有通讯录的功能。我们可以定义一个名为display的函数,当输入1时就调用这个函数。注意要把函数写在while循环的前面,否则无法调用。

def display():
    with open("address.txt",'r',encoding='utf-8') as f:
        for fi in f:
            print(fi,end="")

原代码:

def display():
    fi = open("address.txt", 'r')
    for line in fi:
        print(line,end="")
    fi.close()
    
menu = ["1. 显示所有信息", "2. 追加信息", "3. 删除信息"]
flag = 1
while flag:
    
    for m in menu:
        print(m)
        flag = 0
    try:
        print("请输入数字1-3选择功能:")
        ch = int(input())
        flag = 0
    except:
        flag = 1
    if flag <1 or flag >3:
        flag = 1
    elif ch == 1:
        display ()

官方给出的代码中,最后的if判断写在了while循环的外面,但经过测试应该写在里面,如下面图所示:

3. 问题三的解决

我们还需要另外定义一个插入函数,接受屏幕输入的字符后用append追加到列表中,再用for循环写入到new_address.txt中。

def display():
    fi = open("address.txt", 'r')
    for line in fi:
        print(line,end="")
    fi.close()

def insertrec(text):
    with open("address.txt",'r',encoding='utf-8') as file:
        newline = file.readlines()
        newline.append(text+"\n")
        with open("new_address.txt","w+",encoding='utf-8') as newfile:
            for line in newline:
                newfile.write(line)    

menu = ["1. 显示所有信息", "2. 追加信息", "3. 删除信息"]
flag = 1
while flag:
    for m in menu:
        print(m)
        flag = 0
    try:
        print("请输入数字1-3选择功能:")
        ch = int(input())
        flag = 0
    except:
        flag = 1
    if flag <1 or flag >3:
        flag = 1
    elif ch == 1:
        display ()
    elif ch == 2:
        insertrec()

以上代码中采用的是我自己编写的代码,下面是官方的代码:

def insertrec():
   fi = open("address.txt",'r')
   fo = open("new_address.txt",'w')
   la=[]
   for l in fi:
       la.append(l.replace('\n',''))
   print("请输入要插入的信息,以逗号隔开,示例:103, cc, 34567812, tianjing:")
   rec = input()
   la.append(rec)
   for l in la:
       fo.write(l)
       fo.write('\n')
   fi.close()
   fo.close()

官方代码中fo写入的方式应该是用w+,如果是w,则如果文件不存在就会报错。 la.append(l.replace('\n',''))这一步看似没有什么用。我只用在append时加入一个【\n】,再用write直接写入就可以了,本身就自带了换行,就不用再折腾了。

三、学后反思

  1. 官方给出的解法要深刻理解其原理,在理解的基础上可以进一步优化和改进算法。
  2. 对于\n的处理可以有多种方法,如str.strip()可以去掉换行,用print(string,end="\n")添加换行等等。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/659648.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Unbuntu下载Clion并配置Cmake工具

Clion 下载CLion安装Cmake工具 下载CLion 如果使用的是Unbuntu系统&#xff0c;一行命令就搞定了 sudo snap install clion --classic其他系统的下载方法就不在这里记载了 安装Cmake工具 刚下好Clion的时候&#xff0c;打开之后&#xff0c;如果没有Cmake工具.Clion是不会帮…

父亲节礼物:用Python编写一个小型游戏

名字&#xff1a;阿玥的小东东 学习&#xff1a;Python、C/C 主页链接&#xff1a;阿玥的小东东的博客_CSDN博客-python&&c高级知识,过年必备,C/C知识讲解领域博主 目录 安装必要的库 绘制游戏界面 添加游戏元素 为游戏添加交互性 结论 一、父亲节的来历简介 二…

taskAffinity、launchMode 与 flag

1、官方文档 public static final int FLAG_ACTIVITY_CLEAR_TASK 如果在传递给 的意向中设置&#xff0c;则 此标志将导致与 在活动开始之前要清除的活动。即活动 成为原本为空的任务和任何旧活动的新根 都完成了。这只能与 结合使用。Context.startActivity()FLAG_ACTIVITY_NE…

Kubernetes Blog 更新:DaoCloud 为数字世界寻找全局最优解

“ 近日&#xff0c;一篇名为《「DaoCloud 道客」与 Kubernetes--为数字世界寻找全局最优解》的博文&#xff0c;在 Kubernetes 的全球官网上线&#xff08;链接&#xff1a;https://kubernetes.io/case-studies/daocloud/&#xff09;&#xff0c;下面一起来了解一下具体内容…

ArcEngine二次开发0——入门(下载 部署 组件学习)

折腾一下ArcGIS Engine二次开发。 目录 1、开发环境配置2、部署一个ArcGIS Engine应用程序3、ArcObject组件学习4、报错及解决4、其他 1、开发环境配置 参考&#xff1a;https://blog.csdn.net/H48662654/article/details/113384150 &#xff08;使用ArcEngine前&#xff0c;…

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测

时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测 目录 时序预测 | MATLAB实现SO-ELM蛇群算法优化极限学习机时间序列预测效果一览基本介绍程序设计学习总结参考资料 效果一览 基本介绍 Matlab实现SO-ELM蛇群算法优化极限学习机时间序列预测 1.data为单变量时间…

拿捏指针(三)--- 对指针的高级认识(高级)

函数指针 函数指针的定义 通过对 对指针的基本认识 和 对指针的进阶认识 我们知道&#xff0c;整型指针是指向整型的指针&#xff0c;数组指针是指向数组的指针&#xff0c;其实&#xff0c;函数指针就是指向函数的指针。 和学习数组指针一样&#xff0c;学习函数指针我们也需…

【WebPack】前端工程化

文章目录 前端工程化一、前端工程化概念二、前端工程化优点三、前端工程化解决方案四、webpack 的基本使用4.1 什么是 webpack4.2 创建列表隔行变色项目4.3 安装 webpack4.4 配置 webpack4.5 自定义 打包入口与出口 五、webpack 的插件使用5.1 webpack 常见插件5.2 webpack-dev…

【Linux】进程优先级

目录 进程优先级什么叫做优先级&#xff1f;Linux优先级更改优先级 进程优先级 什么叫做优先级&#xff1f; cpu资源分配的先后顺序&#xff0c;就是指进程的优先权&#xff08;priority&#xff09;。 优先权高的进程有优先执行权利。配置进程优先权对多任务环境的linux很有用…

imx6ull固化和更新uboot、zImage和dtb方法---超详细总结

目录 一、固化系统 1. 使用mfgtool上位机固化系统 1.1 mfgtool固化系统到 SD 卡 1.2 mfgtool固化系统到 eMMC 1.3 mfgtool固化系统到 NAND FLASH 2.使用脚本固化系统 2.1脚本固化系统到 SD 卡 2.2 脚本固化系统到 eMMC 2.3 脚本固化系统到 NAND FLASH 二、更新系统 …

用Midjourney画“球迷冲进球场拥抱梅西“事件

作者 | 兔子酱 最近&#xff0c;被“球迷冲进球场拥抱梅西”刷屏了!在阿根廷对战澳大利亚北京工体友谊赛上&#xff0c;一名中国“狂热少年”冲进球场&#xff0c;成功拥抱了梅西&#xff0c;甚至摆出了拍照姿势。拥抱后在球场狂奔&#xff0c;还有大马丁击了掌&#xff0c;最后…

C++学习之STL vector

Vector是什么&#xff1f; 问chatgpt看看是什么回答&#xff1f; ChatGPT&#xff1a; C中的vector是标准库&#xff08;STL&#xff09;提供的一种动态数组容器。它能够在运行时根据需要自动调整大小&#xff0c;并且可以存储不同类型的元素。 使用vector&#xff0c;您可…

Java虚拟机——HotSpot的算法实现细节

根节点枚举 在可达性分析算法中从GC Roots集合中找引用链非常的麻烦 。固定可作为GC Roots的节点主要在全局性的引用&#xff08;例如常量或类静态属性&#xff09;与执行上下文&#xff08;栈帧的本地变量表&#xff09;中。当Java应用很大的时候&#xff0c;类和常量数量很多…

了解redis以及其基本命令

目录 1 编译安装2 启动3 redis 是_3.1 远程字典服务3.2 内存数据库3.3 kv数据库3.4 数据结构数据库3.4.1 string 是一个安全的二进制字符串&#xff1b;3.4.2 双端队列 &#xff08;链表&#xff09; list &#xff1a;有序&#xff08;插入有序&#xff09;&#xff1b;3.4.3 …

Dubbo的10种集群容错模式

学习Dubbo源码的过程中&#xff0c;首先看到的是dubbo的集群容错模式&#xff0c;以下简单介绍10种集群容错模式 1.AvailableCluster 顾名思义&#xff0c;就是可用性优先&#xff0c;遍历所有的invokers&#xff0c;选择可用的 2.MergeableCluster:当接口需要多个服务组合返回…

陌生人,可以看一看你最近复制了什么吗?

DDoS 攻击采用分布式的方式进行&#xff0c;攻击者通常会控制网络中许多终端或服务器&#xff0c;这些终端或服务器同时向被攻击目标发送大量的请求&#xff0c;被攻击目标无法判断这些请求来源的合法性&#xff0c;因此会无法正常处理这些请求&#xff0c;而导致服务中断&…

Web前端开发技术储久良第三版课后答案

P16-第1章 练习与实验答案 练习1 1.选择题 (1)B (2)B (3)B (4)D (5)A 2.填空题 (1)标记、文本 (2)Tim Berners-Lee&#xff08;蒂姆伯纳斯李&#xff09; (3)查看 (4)NotePad、EditPlus、TextPad、TopStyle、UltraEdit等 (5)超文本标记语言、统一资源定位符&#xff08;器&am…

Fiddler如何比较两个接口请求?

进行APP测试时&#xff0c;往往会出现Android和iOS端同一请求&#xff0c;但执行结果不同&#xff0c;这通常是接口请求内容差异所致。 如果你想学习Fiddler抓包工具&#xff0c;我这边给你推荐一套视频&#xff0c;这个视频可以说是B站播放全网第一的Fiddler抓包工具教程&…

多模态对比互学习和伪标签再学习半监督医学图像分割

文章目录 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segmentation摘要本文方法实验结果总结 Multi-modal contrastive mutual learning and pseudo-label re-learning for semi-supervised medical image segm…

Linux系统之部署Yearning SQL审核平台

这里写目录标题 一、Yearning介绍1.1 Yearning简介1.2 Yearning特点1.3 Yearning功能 二、本地环境介绍2.1 本地环境规划2.2 本次实践介绍 三、检查本地环境3.1 检查操作系统版本3.2 检查系统内核版本3.3 检查Docker版本 四、部署mysql数据库4.1 创建数据目录4.2 创建mysql数据…