这个代码有多少错误?(Python)

welon123 2011-08-27 03:16:11
《A Byte of Python》
中最后一个问题:
我会建议你先解决这样一个问题:创建你自己的命令行 地址簿 程序。在这个程序中,你可以
添加、修改、删除和搜索你的联系人(朋友、家人和同事等等)以及它们的信息(诸如电子邮
件地址和/或电话号码)。这些详细信息应该被保存下来以便以后提取。

思考一下我们到目前为止所学的各种东西的话,你会觉得这个问题其实相当简单。如果你仍然
希望知道该从何处入手的话,那么这里也有一个提示。

提示(其实你不应该阅读这个提示) 创建一个类来表示一个人的信息。使用字典储存每个人
的对象,把他们的名字作为键。使用cPickle模块永久地把这些对象储存在你的硬盘上。使用字
典内建的方法添加、删除和修改人员信息。

刚学,有些用法不知道怎么用,所以下边代码有很多错误,很多都是猜测着写,牛人帮忙看看,指点一下,不甚感激

import pickle as p
import os, sys

class AddressBook:
# 'ab' is short for 'a'ddress'b'ook
# sample: ab = {welon : [15012345678, chinawelon@gmail.com]}
ab = {}
def __init__ (self, name, telephone, email):
'''Initializes the contact's data'''
self.name = name
self.telephone = telephone
self.mail = email

@staticmethod
def save(ab):
'''save one's information to file'''
with open(contact_list, mode = 'a', encoding = 'utf-8') as f:
p.dump(ab, f)

def add_contact(self):
'''add a new contact'''
print("Input new contact information:")
print("Input name:")
self.name = input()
print("Input telephone:")
self.telephone = input()
print("Input E-mail:")
self.mail = input()
ab[self.name][0] = self.telephone
ab[self.name][1] = self.mail
print("Add {0} successfully".format(self.name))
AddressBook.save(ab)

def show_contact(self):
'''output one's information'''
print ("{0}'s telephone is: {1} and E-mail is: {2}\n\n".format(
self.name, self.telephone, self.mail))


@staticmethod
def seach_contact(name):
'''Iteration search'''
with open(contact_list, mode = 'rb', encoding = 'utf-8') as f:
stored_list = p.load(f)
if stored_list[name]:
print ("{0}'s telephone is: {1} and E-mail is: {2}\n\n".format(
name, stored_list[name][0], stored_list[name][1]))
else:
print('sorry, {0} was not in the Contact book!'.format(name))

@staticmethod
def delete_contact(name):
with open(contact_list, mode = 'wb', encoding = 'utf-8') as f:
stored_list = p.load(f)
if stored_list[name]:
del stored_list[name]
p.dump(stored_list, f)
else:
print('sorry, {0} was not in the Contact book!'.format(name))


'''____________main____________'''
while True:
contact_list = 'contact.data'
if sys.argv[1].startswith('-'):
option = sys.argv[1][1:]
if option == 'version':
print('Version 1.2')
elif option == 'help':
print('''\
You can input options as follow:
-version : Prints the Version number
-help : Display this help
-add : Add a contact to AddressBook
-del : Delete a contact from AddressBook
-search : Find a person from AddressBook ''')
elif option == 'add':
a = AddressBook(sys.argv[2], sys.argv[3], sys.argv[4])
a.add_contact()
a.show_contact()
a.save(a.ad)
elif option == 'del':
print("Input the name of contacts you want to delete:")
name = input()
delete_contact(name)
elif option == 'search':
print("Input the name of contacts you want to search: ")
name = input()
seach_contact(name)
else:
print("Unknown option")
sys.exit()

...全文
100 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
welon123 2011-08-27
  • 打赏
  • 举报
回复
谢谢哈,那我先再去看几本书再说
josephwuxiaameng 2011-08-27
  • 打赏
  • 举报
回复
如果你运行时没有给够参数是会抛出异常的,
这就是你的问题3的原因,
因为访问了不存在的值。
你问这个问题,暴露出你可能还对python不是太熟悉哦!
先别着急写程序啊!你先看完书再写东西!
python语法简洁,但是里面还有很多细节问题,
看完书,你自己再回头看你的问题,你自己都会笑的。
还有别上CSDN,这里学不到什么东西的。
静心看书去吧。
welon123 2011-08-27
  • 打赏
  • 举报
回复
不是有意,还请见谅。

我不知道的东西,没人指点,还是不知道,因为我不知道我不知道。
所以问问题,可能根本问不到点子上
譬如1楼说的sqlite模块,cmd模块。

如果愿意帮我指出些错误,非常感谢。
因为我不知道正确怎么写,问别人没有上下文也不好问。所以一并贴出来。
精通的人,一眼应该就能看出若干错误,若能指点一二,胜过我死磕半天……

有人回复过的帖子已经不能修改了,所以:(以后会注意)

如果以问题的形式,上边的题目:
1、我想知道文件用pickle删除一项后的写法?
2、stored_list = p.load(f),这里利用stored_list如何访问里边的数据,
stored_list[name][0], ??
3、a = AddressBook(sys.argv[2], sys.argv[3], sys.argv[4])这句
好像报错的,为什么错的?
iambic 2011-08-27
  • 打赏
  • 举报
回复
你若有疑惑,就把你的疑惑一个个说出来。
乱写一通然后让别人擦屁股,耍人玩呢?
welon123 2011-08-27
  • 打赏
  • 举报
回复
非常感谢,你说的我都会去尝试一下……
josephwuxiaameng 2011-08-27
  • 打赏
  • 举报
回复
如果是我,我会用cmd模块代替自己写参数分析。
其次,我不会用pickle而是用sqlite模块。
看了你代码,觉得你对Python的类还不是太清楚,
类的设计分析也有不妥。
《A byte of python》书上不会给你讲的很清楚的,
再看看《learning python》吧,
注意是英文版的,中文翻译版错太多了。
希望对你有帮助。

37,719

社区成员

发帖
与我相关
我的任务
社区描述
JavaScript,VBScript,AngleScript,ActionScript,Shell,Perl,Ruby,Lua,Tcl,Scala,MaxScript 等脚本语言交流。
社区管理员
  • 脚本语言(Perl/Python)社区
  • IT.BOB
加入社区
  • 近7日
  • 近30日
  • 至今

试试用AI创作助手写篇文章吧