Python通訊錄系統實戰教程

具體介紹見?通訊錄管理系統設計與實現(C++)-CSDN博客

class Person:def __init__(self, name="", sex=0, age=0, phone="", addr=""):self.m_name = name    # 姓名self.m_Sex = sex      # 性別(1-男,2-女)self.m_Age = age      # 年齡self.m_Phone = phone  # 電話self.m_Addr = addr    # 地址class AddressBook:def __init__(self, max_size=1000):self.person_list = []  # 聯系人列表self.m_Size = 0        # 當前聯系人數量self.MAX = max_size   # 最大容量def show_menu():"""顯示菜單界面"""print("\n" + "*" * 24)print("***** 1、添加聯系人 *****")print("***** 2、顯示聯系人 *****")print("***** 3、刪除聯系人 *****")print("***** 4、查找聯系人 *****")print("***** 5、修改聯系人 *****")print("***** 6、清空聯系人 *****")print("***** 0、退出通訊錄 *****")print("*" * 24 + "\n")def add_person(book):"""添加聯系人"""if book.m_Size >= book.MAX:print("通訊錄已滿,無法添加!")returnprint("\n=== 添加聯系人 ===")name = input("請輸入姓名:")# 驗證性別輸入while True:sex = input("請輸入性別(1-男, 2-女):")if sex in ('1', '2'):breakprint("輸入錯誤,請重新輸入!")# 驗證年齡輸入while True:age = input("請輸入年齡:")if age.isdigit():breakprint("年齡必須為數字,請重新輸入!")phone = input("請輸入聯系電話:")addr = input("請輸入家庭地址:")# 創建新聯系人并添加到通訊錄new_person = Person(name, int(sex), int(age), phone, addr)book.person_list.append(new_person)book.m_Size += 1print(f"成功添加聯系人:{name}")def show_person(book):"""顯示所有聯系人"""print("\n=== 通訊錄列表 ===")if book.m_Size == 0:print("通訊錄為空")returnfor idx, person in enumerate(book.person_list, 1):print(f"{idx}. 姓名:{person.m_name}\t", end="")print(f"性別:{'男' if person.m_Sex == 1 else '女'}\t", end="")print(f"年齡:{person.m_Age}\t", end="")print(f"電話:{person.m_Phone}\t", end="")print(f"地址:{person.m_Addr}")def find_person(book, name):"""查找聯系人,返回索引位置,找不到返回-1"""for idx, person in enumerate(book.person_list):if person.m_name == name:return idxreturn -1def delete_person(book):"""刪除聯系人"""print("\n=== 刪除聯系人 ===")if book.m_Size == 0:print("通訊錄為空,無法刪除!")returnname = input("請輸入要刪除的聯系人姓名:")index = find_person(book, name)if index != -1:deleted_name = book.person_list[index].m_namedel book.person_list[index]book.m_Size -= 1print(f"已成功刪除聯系人:{deleted_name}")else:print("找不到該聯系人!")def search_person(book):"""查找并顯示聯系人信息"""print("\n=== 查找聯系人 ===")name = input("請輸入要查找的聯系人姓名:")index = find_person(book, name)if index != -1:person = book.person_list[index]print("\n找到聯系人:")print(f"姓名:{person.m_name}")print(f"性別:{'男' if person.m_Sex == 1 else '女'}")print(f"年齡:{person.m_Age}")print(f"電話:{person.m_Phone}")print(f"地址:{person.m_Addr}")else:print("找不到該聯系人!")def modify_person(book):"""修改聯系人信息"""print("\n=== 修改聯系人 ===")name = input("請輸入要修改的聯系人姓名:")index = find_person(book, name)if index == -1:print("找不到該聯系人!")returnperson = book.person_list[index]print("\n當前聯系人信息:")print(f"1. 姓名:{person.m_name}")print(f"2. 性別:{'男' if person.m_Sex == 1 else '女'}")print(f"3. 年齡:{person.m_Age}")print(f"4. 電話:{person.m_Phone}")print(f"5. 地址:{person.m_Addr}")print("\n請選擇要修改的項目(輸入對應數字,0保存退出):")while True:choice = input("請選擇(0-5):")if choice == '0':breakelif choice == '1':person.m_name = input("請輸入新姓名:")elif choice == '2':while True:sex = input("請輸入新性別(1-男, 2-女):")if sex in ('1', '2'):person.m_Sex = int(sex)breakprint("輸入錯誤,請重新輸入!")elif choice == '3':while True:age = input("請輸入新年齡:")if age.isdigit():person.m_Age = int(age)breakprint("年齡必須為數字,請重新輸入!")elif choice == '4':person.m_Phone = input("請輸入新電話:")elif choice == '5':person.m_Addr = input("請輸入新地址:")else:print("無效選擇,請重新輸入!")print("聯系人信息已更新!")def clear_all(book):"""清空通訊錄"""confirm = input("\n確定要清空通訊錄嗎?(y/n):")if confirm.lower() == 'y':book.person_list.clear()book.m_Size = 0print("通訊錄已清空!")else:print("已取消清空操作")def main():"""主程序"""book = AddressBook()while True:show_menu()choice = input("請選擇操作(0-6):")if choice == '1':add_person(book)elif choice == '2':show_person(book)elif choice == '3':delete_person(book)elif choice == '4':search_person(book)elif choice == '5':modify_person(book)elif choice == '6':clear_all(book)elif choice == '0':print("\n感謝使用通訊錄系統,再見!")breakelse:print("無效輸入,請重新選擇!")input("\n按回車鍵繼續...")  # 暫停以便查看結果if __name__ == "__main__":main()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/pingmian/87137.shtml
繁體地址,請注明出處:http://hk.pswp.cn/pingmian/87137.shtml
英文地址,請注明出處:http://en.pswp.cn/pingmian/87137.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

蝦米壁紙分類頁面代碼

<template> <view class"wallpaper-category"> <custom-nav-bar title"分類列表"></custom-nav-bar> <!-- 分類展示 --> <scroll-view scroll-y class"category-scroll-view"> <view cl…

K8s-pod 調度基礎

目錄 Replication Controller&#xff08;RC&#xff09; 概念 關鍵字段 Replica Set&#xff08;RS&#xff09; 概念 關鍵字段 RC 與 RS 的區別 無狀態應用管理Deployment 無狀態應用&#xff08;Stateless Application&#xff09; 什么是無狀態&#xff1f; 無狀…

Vue + RuoYi 前后端分離入門手冊

Vue RuoYi 前后端分離技術棧是一個非常流行且成熟的企業級后臺管理系統開發方案&#xff0c;尤其在國內 Java 開發社區中廣泛應用。它結合了現代化的前端框架 Vue.js 和基于 Spring Boot 的后端框架 RuoYi&#xff0c;提供了開箱即用的權限管理、代碼生成、監控等功能&#xf…

JSON 安裝使用教程

一、JSON 簡介 JSON&#xff08;JavaScript Object Notation&#xff09;是一種輕量級的數據交換格式&#xff0c;易于人閱讀和編寫&#xff0c;同時也易于機器解析和生成。它廣泛應用于前后端數據通信、配置文件、API 傳輸等場景。 二、JSON 是否需要安裝&#xff1f; 不需要…

十大網絡協議

十大網絡協議 標題1. HTTP&#xff08;HyperText Transfer Protocol&#xff0c;超文本傳輸協議&#xff09;標題2. HTTPS&#xff08;Secure Hypertext Transfer Protocol&#xff0c;安全超文本傳輸協議&#xff09;標題3. HTTP/3標題4. TCP&#xff08;Transmission Control…

【語音告警】博靈智能語音報警燈Modbus TCP觸發告警實例-語音報警燈|聲光報警器|網絡信號燈

功能說明 本文將以Python代碼為例&#xff0c;講解如何通過Python代碼調用博靈語音通知終端A4實現聲光語音告警。 本代碼實現Python觸發Modbus寫多寄存器和寫單寄存器實現調用通知終端模板播報功能&#xff08;通知終端內置TTS語音合成技術&#xff0c;本案例不講解如何文本轉…

攝像頭 rtsp數據量 和正常數據流有什么區別

攝像頭RTSP數據流和正常數據流&#xff08;如HTTP傳輸的普通文件或網頁數據&#xff09;在多個方面存在顯著差異&#xff0c;主要體現在協議特性、數據量、實時性、應用場景等方面。以下是具體對比&#xff1a; 1. 協議與傳輸方式 RTSP流&#xff1a; 實時流協議&#xff08;R…

深入理解裝飾器模式:動態擴展對象功能的靈活設計模式

深入理解裝飾器模式&#xff1a;動態擴展對象功能的靈活設計模式 &#x1f31f; 嗨&#xff0c;我是IRpickstars&#xff01; &#x1f30c; 總有一行代碼&#xff0c;能點亮萬千星辰。 &#x1f50d; 在技術的宇宙中&#xff0c;我愿做永不停歇的探索者。 ? 用代碼丈量世界…

141.在 Vue 3 中使用 OpenLayers Link 交互:把地圖中心點 / 縮放級別 / 旋轉角度實時寫進 URL,并同步解析顯示

本文分享一個前端小技巧&#xff1a;借助 OpenLayers 的 Link 交互 在瀏覽器地址欄實時記錄地圖狀態&#xff0c;同時把這些參數解析出來展示在頁面上。 ? 雙向同步&#xff1a;拖動、縮放、旋轉地圖時&#xff0c;URL 自動更新&#xff1b;手動修改 URL 或后退 / 前進&#x…

數字人的形象與內容,虛擬形象背后的權益暗戰

&#xff08;首席數據官高鵬律師數字經濟團隊創作&#xff0c;AI輔助&#xff09; 當某科技公司的虛擬偶像在直播間收獲百萬打賞時&#xff0c;當某品牌的數字代言人形象被篡改成表情包全網傳播時&#xff0c;當網紅博主的AI分身開始替代真人直播帶貨時&#xff0c;一場關于數…

【python】pdf拆成圖片,加中文,再合成pdf

前期搞了個pdf加頁腳&#xff0c;但是搞了半天中文加不了&#xff0c;就換了個思路。 直接說結論&#xff0c;pdf拆成圖片&#xff0c;加中文&#xff0c;再合成pdf&#xff0c;會導致pdf模糊。 import os import fitz # PyMuPDF from PIL import Image, ImageDraw, ImageFon…

分布式爬蟲數據存儲開發實戰

分布式爬蟲存儲的核心矛盾在于&#xff1a;既要高吞吐又要強一致性&#xff0c;還要避免重復。比如Kafka雖然吞吐高但無法去重&#xff0c;Redis去重快但容量有限。所以我們可能低估了狀態同步的復雜度——比如暫停爬蟲時如何保證內存中的URL狀態不丟失。 分布式爬蟲的數據存儲…

探秘阿里云Alibaba Cloud Linux:云時代的操作系統新寵

引言&#xff1a;云時代的操作系統變革 在云計算技術蓬勃發展的當下&#xff0c;企業的數字化轉型進程被極大地加速&#xff0c;而作為云計算底層支撐的操作系統&#xff0c;也迎來了前所未有的變革與挑戰。傳統操作系統在應對云計算環境中的大規模資源調度、高彈性擴展以及安…

使用pyflink進行kafka實時數據消費

目錄 背景 代碼demo 踩坑記錄 1、kafka連接器&#xff0c;kafka客戶端jar包找不到 2、java模塊系統訪問限制 3、執行demo任務&#xff0c;一直報錯連接kafka topic超時 總結 背景 實際項目中經常遇到source是kafka&#xff0c;需要實時消費kafka某個topic中的數據&#x…

軟件測試理論框架與發展:分類、原則與質量保障策略

第一章 一、計算機軟件的發展分類 早期軟件開發的特點&#xff1a; 軟件規模小、復雜程度低、開發過程不規范 測試的情況&#xff1a; 測試等同于調試 目的糾正軟件的已經知道的故障 投入少&#xff0c;介入晚 成為一種發現軟件的活動&#xff08;1957&#xff09; 測試不等于…

未知威脅攻擊原理和架構

大家讀完覺得有幫助記得關注和點贊&#xff01;&#xff01;&#xff01; 未知威脅&#xff08;Unknown Threats&#xff09;指利用零日漏洞、合法工具濫用、高級逃逸技術等**繞過傳統特征檢測**的攻擊&#xff0c;其核心在于**動態對抗防御體系的認知盲區**。以下從攻擊原理、…

基于Netty-WebSocket構建高性能實時通信服務

引言&#xff1a;WebSocket在現代應用中的重要性 在當今實時交互應用盛行的時代&#xff0c;WebSocket協議已成為實現雙向通信的核心技術。相比傳統的HTTP輪詢&#xff0c;WebSocket提供了&#xff1a; 真正的全雙工通信極低的延遲&#xff08;毫秒級&#xff09;高效的連接管…

咸蝦米項目總結1--const用法

在 UniApp&#xff08;或 Vue 3&#xff09;中&#xff0c;聲明一個空對象可使用下面這2種寫法&#xff1a; // 寫法1 const a ref(null);// 寫法2 const a ref({}); 在UniApp中&#xff0c;const a ref()用法概述&#xff1a; 用途&#xff1a; 創建一個響應式引用&#x…

在mac下手動編譯遷移的android版webrtc組件

我原先使用的android版webrtc是在linux下編譯的&#xff0c;現在因為某些原因需要把整個庫遷移到mac下編譯。 把代碼遷移完后&#xff0c;正常是需要通過gclient sync 重新構建編譯環境&#xff0c;但是由于網絡限制等方面原因&#xff0c;會導致完成的比較慢。 在摸索一陣后…

Linux 命令:mkdir

Linux mkdir 命令詳細教程 一、mkdir 命令的基本功能 mkdir&#xff08;Make Directory&#xff09;是 Linux 系統中用于創建新目錄&#xff08;文件夾&#xff09;的基礎命令。它支持一次性創建單個或多個目錄&#xff0c;以及遞歸創建多層目錄結構&#xff0c;是文件系統操…