myPhoneBook2.py
#!/usr/bin/python
# -*- coding: utf-8 -*-
import re
class PhoneBook(object):
'''这是一个电话簿脚本。
该脚本能够实现
AddContact:添加联系人信息
ShowContact:查找姓名显示联系人
SaveContacts:存储联系人到 TXT 文档(存储格式――姓名:号码/号码)
LoadContacts:从 txt 文档中载入联系人
'''
def __init__(self):
self.contactsDict = {}
def AddContact(self):
while True:
name = raw_input('请输入姓名>>>')
name = name.strip()
# 姓名必须包含有效字符
if name != '':
break
print '***姓名不能为空'
while True:
number = raw_input('请输入号码>>>')
number = re.sub(r'\D', '', number)
# 删除号码中的非数字字符
if number != '':
break
print '***号码只能是数字'
cover = True #若联系人已存在,是否覆盖
if self.contactsDict.has_key(name):
print '***联系人已存在'
self.ShowContact(name)
while True:
control = raw_input('''
输入 "c":覆盖原来号码
输入 "n":保留原来号码并存储新号码
输入 "q" 退出\n>>>''')
if control.lower() == 'n':
cover = False
break
if control.lower() == 'c':
break
if control.lower() == 'q':
return None
print '***输入错误'
if cover:
self.contactsDict[name] = number
else:
if number in self.contactsDict[name]:
print '***号码已经存在'
else:
self.contactsDict[name] = self.contactsDict[name] + '/' + number
def ShowContact(self, name):
print '++++++++++++++++++++++++'
if self.contactsDict.has_key(name):
print '【联系人信息】'
print '【姓名: %s】' % name
numberList = self.contactsDict[name].split('/')
for num in range(len(numberList)):
print '【号码%d: %s】' % (num+1, numberList[num])
else:
print '【找不到联系人%s】' % name
print '++++++++++++++++++++++++'
def DeleteNumber(self, name):
if self.contactsDict.has_key(name):
self.ShowContact(name)
number = self.contactsDict[name].split('/')
while True:
print '''
请输入要删除号码的序号
或者输入 "a" 删除该联系人
或者输入 "q" 退出(不删除)
(若联系人号码被全部删除,该联系人也将被删除)'''
control = raw_input('>>>')
if control.lower() == 'q':
break
elif control.lower() == 'a':
del self.contactsDict[name]
break
elif control.isdigit() and int(control) <= len(number):
del number[int(control)-1]
self.contactsDict[name] = '/'.join(number)
break
else:
print '***输入有误'
def LoadContacts(self):
'''
try:
PhoneBook = open('PhoneBook.txt', 'a+')
contacts = PhoneBook.read()
if contacts == '':
print '***电话簿为空'
else:
ContactsList = contacts.split('\n')
for contact in ContactsList:
if not contact == '':
contact = contact.split(':')
name = contact[0]
number = contact[1]
self.contactsDict[name] = number
finally:
PhoneBook.close()
'''
self.contactsDict = {line.split(':')[0]: line.split(':')[1] for line in open('PhoneBook.txt','a+').readlines()}
def SaveContacts(self):
try:
if self.contactsDict:
PhoneBook = open('PhoneBook.txt', 'w')
for name, number in self.contactsDict.items():
line = name + ':' + number
PhoneBook.write(line)
PhoneBook.write('\n')
else:
print '***没有联系人信息'
finally:
PhoneBook.close()
if __name__ == '__main__':
myPhoneBook = PhoneBook()
myPhoneBook.LoadContacts()
try:
while True:
raw_input('按回车键继续')
print '''
--------------------------------
输入 a:添加联系人
输入 s:显示联系人信息
输入 d:删除联系人
输入 q:退出
--------------------------------'''
control = raw_input('>>>')
if control.lower() == 'a':
myPhoneBook.AddContact()
elif control.lower() == 's':
name = raw_input('请输入要查找的联系人姓名\n>>>')
myPhoneBook.ShowContact(name)
elif control.lower() == 'd':
name = raw_input('请输入要删除的联系人姓名\n>>>')
myPhoneBook.DeleteNumber(name)
elif control.lower() == 'q':
break
else:
print '***输入有误'
finally:
myPhoneBook.SaveContacts()
花了一个下午和半个晚上写了这个简单通讯录:
哈哈,第一次写这么长的Python代码,自认为结构还是挺合理的。
代码如下:
#-*- coding:utf-8 -*-
# file :addrList.py
# date :2011-10-24 15:40:13
# 设计一个基本的通讯录管理程序,使其具有添加,删除,编辑,查找等功能。
# 要求使用C/C++,java,javascript,python中任意一种语言实现。字符界面即可。
# 不需要有GUI(图形界面)
import sys
import os
import string
import re
from datetime import datetime
QUIT_FLAG = False
ADDRS_LIST = "addr_list.txt"
_addrs_dict = {}
_addrs_count = 0
DEBUG=2
def info(message):
global DEBUG
if DEBUG > 0:
print message
def debug(message):
global DEBUG
if DEBUG > 1:
print message
def warn(message):
global DEBUG
if DEBUG > 0:
print message
def error(message):
print message
def help():
print "用法:输入菜单中的命令即可执行相应操作!"
print "可用菜单命令如下:"
showMenu()
def showMenu():
print "+******************操作菜单***********************+"
print "|查看所有联系人(all) | 查找联系人(find) |"
print "|添加联系人(add) | 删除联系人(remove) |"
print "|编辑联系人(edit) | 保存并退出(save) |"
print "|使用帮助(help) | 退出但不保存(quit) |"
print "+_________________________________________________+"
def showError(info):
print info
def doSwitch(op):
if op == "all":
doAll()
elif op == "find":
doFind()
elif op == "add":
doAdd()
elif op == "remove":
doRemove()
elif op == "edit":
doEdit()
elif op == "save":
doSave()
elif op == "help":
help()
elif op == "quit":
doQuit()
else:
showError("错误:您输入的命令有误,请重新输入。需要帮助请输入help!")
def verifyInput(items):
_flag = True
_rPhone = re.compile(r'1[0-9]{10}')
_rQQ = re.compile(r'[1-9][0-9]{4,9}')
if len(items[0]) > 10:
_flag = False
print "姓名太长了!"
if not _rPhone.match(items[1]):
_flag = False
print "手机号码格式不正确"
if not _rQQ.match(items[2]):
_flag = False
print "QQ号码输入有误"
return _flag
def buildAddr(addr):
_addr={}
items=addr.split()
if len(items) < 3:
print "您输入的信息太少了"
return None
if not verifyInput(items):
return None
_addr['name']=items[0]
_addr['phone'] = items[1]
_addr['QQ'] = items[2]
return _addr
def addAddr(addr):
global _addrs_count,_addrs_dict
_addrs_count+=1
_addr=buildAddr(addr)
if not _addr:
return None
_addrs_dict[_addrs_count]=_addr
def init():
if not os.path.isfile(ADDRS_LIST):
return None
faddr=open(ADDRS_LIST,"r")
for line in faddr:
if len(line) == 0:
continue
addAddr(line)
faddr.close()
def save():
global _addrs_dict
faddr=open(ADDRS_LIST,"w+")
for addr in _addrs_dict.values():
faddr.write("{0}\t{1}\t{2}\n".format(addr['name'],addr['phone'],addr['QQ']))
faddr.flush()
faddr.close()
def doAll():
global _addrs_dict
if len(_addrs_dict) < 1:
print "联系人当中暂无记录!"
return None
printHead()
for key,addr in _addrs_dict.items():
printAddr(key,addr)
def doFind():
_flag=False
flag1=flag2=flag3=False
cond=raw_input("请输入查询信息:>")
debug("DEBUG:{0}".format(cond))
if len(cond) == 0:
return None
if cond.isdigit():
flag1=findById(int(cond,10))
flag2=findByPhone(cond)
flag3=findByQQ(cond)
else:
flag1=findByName(cond)
_flag = flag1 or flag2 or flag3
if not _flag:
print "没有查找到任何联系人!"
def doAdd():
line = raw_input("请依次输入联系人的姓名,手机号码,QQ号码>")
if len(line) == 0:
return None
addAddr(line)
def existsId(_id):
global _addrs_dict
return _addrs_dict.has_key(_id)
# if _id > _addrs_count or _id < 1:
# return False
# else:
# return True
def doRemove():
FLAG = True
while FLAG:
key=raw_input("请输入要删除的联系人的编号(取消请输入#)")
if key == '#':
FLAG = False
continue
if not existsId(int(key,10)):
print "不存在您所输入编号的联系人。请确认"
continue
print "编号为 {0} 的联系人信息如下:".format(key)
printById(int(key,10))
yesOrNo=raw_input("您确定要删除上述联系人吗?(y/n)")
if yesOrNo in "yY":
removeById(int(key,10))
print "删除成功!"
yesOrNo=raw_input("您还需要继续删除联系人吗?(y/n)")
if not yesOrNo in "yY":
FLAG = False
def doEdit():
FLAG = True
while FLAG:
key=raw_input("请输入要编辑的联系人的编号(取消请输入#)")
print "DEBUG:key:{0}".format(key)
if key == '#':
FLAG = False
continue
if not existsId(int(key,10)):
print "不存在您所输入编号的联系人。请确认"
continue
print "编号为 {0} 的联系人信息如下:".format(key)
printById(int(key,10))
updateById(int(key,10))
FLAG = False
def doSave():
save()
doQuit()
def doQuit():
global QUIT_FLAG
QUIT_FLAG = True
print "正在退出……"
# exit(0)
def printHead():
print "+-----+----------+---------------+---------------+"
print "|编号 | 姓名 | 手机号码 | QQ号码 |"
print "+-----+----------+---------------+---------------+"
def printAddr(key,addr):
# print "+-----+----------+---------------+---------------+"
print "|{0:^5}|{1:^10}|{2:^15}|{3:^15}|".format(key,addr['name'],addr['phone'],addr['QQ'])
print "+-----+----------+---------------+---------------+"
def printById(_id):
global _addrs_dict
printHead()
printAddr(_id,_addrs_dict[_id])
def removeById(_id):
global _addrs_dict
_addrs_dict.pop(_id)
def updateById(_id):
global _addrs_dict
_addr= _addrs_dict.get(_id)
print "请输入该联系人的新信息,相应留空则保留原有信息"
name=raw_input("请输入新姓名:>")
if len(name) > 0:
_addr['name']=name
phone=raw_input("请输入新手机号码:>")
if len(phone) > 0:
_addr['phone']=phone
qq=raw_input("请输入新的QQ号码:>")
if len(qq) > 0 :
_addr['QQ']=qq
_addrs_dict[_id]=_addr
print "更新成功!"
print "联系人新的信息如下:"
printById(_id)
def findById(_id):
if existsId(_id):
printById(_id)
return True
else:
return False
def findByField(cond,field='name'):
global _addrs_dict
_flag = False
for key,addr in _addrs_dict.items():
if addr[field].find(cond) != -1:
printAddr(key,addr)
_flag=True
return _flag
def findByName(name):
return findByField(name,'name')
def findByPhone(phone):
return findByField(phone,'phone')
def findByQQ(qq):
return findByField(qq,'QQ')
def main():
init()
showMenu()
while(not QUIT_FLAG):
operation=raw_input("请在此处输入菜单命令>")
doSwitch(operation)
if __name__=='__main__':
main()
## do something
##----------------------------------------------------
京东创始人刘强东和其妻子章泽天最近成为了互联网舆论关注的焦点。有关他们“移民美国”和在美国购买豪宅的传言在互联网上广泛传播。然而,京东官方通过微博发言人发布的消息澄清了这些传言,称这些言论纯属虚假信息和蓄意捏造。
日前,据博主“@超能数码君老周”爆料,国内三大运营商中国移动、中国电信和中国联通预计将集体采购百万台规模的华为Mate60系列手机。
据报道,荷兰半导体设备公司ASML正看到美国对华遏制政策的负面影响。阿斯麦(ASML)CEO彼得·温宁克在一档电视节目中分享了他对中国大陆问题以及该公司面临的出口管制和保护主义的看法。彼得曾在多个场合表达了他对出口管制以及中荷经济关系的担忧。
今年早些时候,抖音悄然上线了一款名为“青桃”的 App,Slogan 为“看见你的热爱”,根据应用介绍可知,“青桃”是一个属于年轻人的兴趣知识视频平台,由抖音官方出品的中长视频关联版本,整体风格有些类似B站。
日前,威马汽车首席数据官梅松林转发了一份“世界各国地区拥车率排行榜”,同时,他发文表示:中国汽车普及率低于非洲国家尼日利亚,每百户家庭仅17户有车。意大利世界排名第一,每十户中九户有车。
近日,一项新的研究发现,维生素 C 和 E 等抗氧化剂会激活一种机制,刺激癌症肿瘤中新血管的生长,帮助它们生长和扩散。
据媒体援引消息人士报道,苹果公司正在测试使用3D打印技术来生产其智能手表的钢质底盘。消息传出后,3D系统一度大涨超10%,不过截至周三收盘,该股涨幅回落至2%以内。
9月2日,坐拥千万粉丝的网红主播“秀才”账号被封禁,在社交媒体平台上引发热议。平台相关负责人表示,“秀才”账号违反平台相关规定,已封禁。据知情人士透露,秀才近期被举报存在违法行为,这可能是他被封禁的部分原因。据悉,“秀才”年龄39岁,是安徽省亳州市蒙城县人,抖音网红,粉丝数量超1200万。他曾被称为“中老年...
9月3日消息,亚马逊的一些股东,包括持有该公司股票的一家养老基金,日前对亚马逊、其创始人贝索斯和其董事会提起诉讼,指控他们在为 Project Kuiper 卫星星座项目购买发射服务时“违反了信义义务”。
据消息,为推广自家应用,苹果现推出了一个名为“Apps by Apple”的网站,展示了苹果为旗下产品(如 iPhone、iPad、Apple Watch、Mac 和 Apple TV)开发的各种应用程序。
特斯拉本周在美国大幅下调Model S和X售价,引发了该公司一些最坚定支持者的不满。知名特斯拉多头、未来基金(Future Fund)管理合伙人加里·布莱克发帖称,降价是一种“短期麻醉剂”,会让潜在客户等待进一步降价。
据外媒9月2日报道,荷兰半导体设备制造商阿斯麦称,尽管荷兰政府颁布的半导体设备出口管制新规9月正式生效,但该公司已获得在2023年底以前向中国运送受限制芯片制造机器的许可。
近日,根据美国证券交易委员会的文件显示,苹果卫星服务提供商 Globalstar 近期向马斯克旗下的 SpaceX 支付 6400 万美元(约 4.65 亿元人民币)。用于在 2023-2025 年期间,发射卫星,进一步扩展苹果 iPhone 系列的 SOS 卫星服务。
据报道,马斯克旗下社交平台𝕏(推特)日前调整了隐私政策,允许 𝕏 使用用户发布的信息来训练其人工智能(AI)模型。新的隐私政策将于 9 月 29 日生效。新政策规定,𝕏可能会使用所收集到的平台信息和公开可用的信息,来帮助训练 𝕏 的机器学习或人工智能模型。
9月2日,荣耀CEO赵明在采访中谈及华为手机回归时表示,替老同事们高兴,觉得手机行业,由于华为的回归,让竞争充满了更多的可能性和更多的魅力,对行业来说也是件好事。
《自然》30日发表的一篇论文报道了一个名为Swift的人工智能(AI)系统,该系统驾驶无人机的能力可在真实世界中一对一冠军赛里战胜人类对手。
近日,非营利组织纽约真菌学会(NYMS)发出警告,表示亚马逊为代表的电商平台上,充斥着各种AI生成的蘑菇觅食科普书籍,其中存在诸多错误。
社交媒体平台𝕏(原推特)新隐私政策提到:“在您同意的情况下,我们可能出于安全、安保和身份识别目的收集和使用您的生物识别信息。”
2023年德国柏林消费电子展上,各大企业都带来了最新的理念和产品,而高端化、本土化的中国产品正在不断吸引欧洲等国际市场的目光。
罗永浩日前在直播中吐槽苹果即将推出的 iPhone 新品,具体内容为:“以我对我‘子公司’的了解,我认为 iPhone 15 跟 iPhone 14 不会有什么区别的,除了序(列)号变了,这个‘不要脸’的东西,这个‘臭厨子’。