字典方法。哪些字典方法能够把两个字典合并到一块儿?java
答:dict.update(dict2) 字典dict2的键-值对添加到dictnode
略python
字典和列表的方法。web
(a) 建一个字典,并把字典中的键按照字母顺序显示出来。算法
(b) 在根据排好的键,显示出这个字典的键和值。app
(c)此次按照值排序输出。dom
(a)函数
#-*- coding:utf-8 -*- #2015-03-31 mydict = {'a':1,'c':3,'b':2} print sorted(mydict)
(b)网站
#-*- coding:utf-8 -*- #2015-03-31 mydict = {'a':1,'c':3,'b':2} sort_key = sorted(mydict) for i in sort_key: print "%s:%d" % (i,mydict[i])
(c)加密
#-*- coding:utf-8 -*- #2015-03-31 mydict = {'a':1,'c':3,'b':2} sort_key = sorted(mydict) for i,j in sorted(mydict.items(),key=lambda value:value[1]): print "%s:%d" % (i,j)
创建字典。给定两个长度相同的列表,例如 [1,2,3......], ['abc','def','ghi'.....] ,利用这两个列表的数据创建一个字典,像这样:{1:'abc',2:'def',3:'ghi'......]。
#-*- coding:utf-8 -*- #2015-03-31 list1 = [1,2,3,4] list2 = ['a','b','c','d'] mydict = {} for i in range(len(list1)): mydict.setdefault(list1[i],list2[i]) print mydict
userpw2.py。下面的问题和例题7.1中的管理名字-密码的键值对数据程序有关。
(a) 修改那个脚本,使他能记录用户上次的登录日期和时间(用time模块),并与用户密码一块儿保存起来。程序的界面要求用户输入用户名和密码的提示。不管用户名是否登录成功,都应有提示,在用户登录成功后,应更新相应用户的上次登录时间戳。若是本次登录与上次登录在时间上相差不超过四个小时,则通知该用户:“You already in at :<last_login_timestamp>”。
(b) 添加一个管理菜单,其中有如下两项:(1)删除一个用户 (2)显示系统中全部用户的名字和他们密码的清单。
(c) 口令目前没有加密。请添加一段对口令加密的代码
(d) 为程序添加图形界面,例如,用Tkinter。
(e) 要求用户名布区分大小写。
(f ) 增强对用户名的限制,不容许符号和空白符。
(g) 合并“新用户”和“老用户”两个选项。若是一个新用户试图用一个不存在的用户名登录,询问该用户是不是新用户,若是是确定的,就建立该用户。不然按老用户的方式登录。
此题单独列出:http://blog.csdn.net/guojuxia/article/details/44886957
列表和字典。建立一个简单的股票证券投资数据系统。其中应至少包括4项数据:股市行情显示器符号、所持有的股票、购买价格及当前价位----你能够添加其余数据项,好比收益率,52周最高指数、最低指数,等等。
用户每次输入各列的数据构成一个输出行。每行数据构成一个列表。还有一个总列表,包括了全部行的数据。数据输入完毕后,提示用户选择一列数据项进行排序。把该数据项抽取数来做为字典的键,字典的值就是该键对应行的值得列表。提醒读者:被选择用来排序的数据项必须是非重复的键,不然就会丢失数据,由于字典不容许一个键有多个值。
你还能够选择其余计算输出,好比盈亏比率、目前证券资产价值等。
因为本人对股票一窍不通,因此将问题抽象化,只作对字典键排序的那部分,程序以下:
#-*- coding:utf-8 -*- #2015-04-05 def sort_db(db): temp = {} dict_db = {} key = raw_input('How to sort list:id、phone? ') if key == 'id': for line in db: temp.setdefault(line[0],line) else: for line in db: temp.setdefault(line[2],line) db2 = sorted(temp.iteritems(),key=lambda d:d[0]) for i in db2: print i[0],i[1] dict_db.setdefault(i[0],i[1]) print '\n' if __name__ == '__main__': db = [] print 'Please input id,name,phone' while True: line = raw_input() if len(line)==1 and int(line)==0: break date = line.split() db.append(date) sort_db(db)运行结果
Please input id,name,phone 1 admin 123 3 zxcvb 456 2 qwert 789 0 How to sort list:id、phone? id 1 ['1', 'admin', '123'] 2 ['2', 'qwert', '789'] 3 ['3', 'zxcvb', '456']
颠倒字典中的键和值。用一个字典作输入,输出另外一个字典,用前者的键作值,前者的值作键。
#-*- coding:utf-8 -*- #2015-04-05 dict_test1 = {1:'a',2:'b',3:'c'} dict_test2 = {} for key in dict_test1: dict_test2.setdefault(dict_test1[key],key) print dict_test2
人力资源。建立一个简单的雇员姓名和编号的程序,让用户输入一组雇员姓名和编号。你的程序能够提供按照姓名排序输出的功能,雇员姓名显示在前,后面是对应的雇员编号。附加题:添加一项功能,按照雇员编号的顺序输出数据。
注:本题与第六题代码基本一致,稍加修改便可。
翻译。
(a) 编写一个字符串翻译程序(功能相似于Unix中的tr命令)。咱们将这个函数叫作tr(),他有三个字符串参数:源字符串、目的字符串、基本字符串,语法定义以下:
def tr(srcstr,dststr,string)srcstr 的内容是你打算“翻译”的字符集合,dsrtr是翻译后获得的字符集合,而string是你打算翻译操做的字符串。举例来讲,若是srcstr=='abc',dststr=='mno',string=='abcdef',那么tr()的输出将是‘mnodef’。注意这里len(srcstr)==len(dststr)。在这个练习里你可使用内建函数chr()和ord(),但他们并不必定时解决这个问题所必不可少的函数。
(b) 在这个函数里增长一个标志参数,来处理不区分大小写的翻译问题。
(c) 修改你的程序,使他们可以处理删除字符的操做。字符串srcstr中不可以映射到字符串dststr中字符的多余字符都将被过滤掉。换句话说,这些字符没有映射到dststr字符串中的任何字符,所以就从函数返回的字符串里被过滤掉了。举例来讲:若是srcstr=='abcdef',dststr=='mno',string=='abcdefghi',那么tr()将输出'mnoghi'。注意这里len(srcstr)>=len(dststr)。
#-*- coding:utf-8 -*- #2015-04-05 def tr(srcstr,dststr,mystring,flag=True): src_dst = {} newstring = '' if len(srcstr)==len(dststr): '''(a)和(b)的前两问''' if flag: for key,value in zip(srcstr,dststr): src_dst.setdefault(key,value) for i in mystring: if i in src_dst: newstring += src_dst[i] else: newstring += i else: for key,value in zip(srcstr.lower(),dststr): src_dst.setdefault(key,value) for i in mystring: if i.lower() in src_dst: newstring += src_dst[i.lower()] else: newstring += i else: '''(c)删除字符的功能''' if flag: for key,value in zip(srcstr[:len(dststr)],dststr): src_dst.setdefault(key,value) for i in mystring: if i in src_dst: newstring += src_dst[i] elif i not in srcstr: newstring += i else: for key,value in zip(srcstr.lower()[:len(dststr)],dststr): src_dst.setdefault(key,value) for i in mystring: if i.lower() in src_dst: newstring += src_dst[i.lower()] elif i not in srcstr: newstring += i return newstring if __name__ == '__main__': srcstr = raw_input('Please input srcstr:') dststr = raw_input('Please input dststr:') mystring = raw_input('Please input the string:') flag = input('Lower or uppper,input True or False:') #是否区分大小写的参数 newstring = tr(srcstr, dststr, mystring, flag) print newstring
运行结果
Please input srcstr:abcdef Please input dststr:mno Please input the string:abcdefghi Lower or uppper,input True or False:True mnoghi
加密。
(a) 用上一个练习的思路编写一个”rot13“翻译器。”rot13“是一个古老而又简单的加密算法,它把字母表中的每一个字母用其后的第13个字母代替。字母表中前半部分将被映像到后半部分,然后半部分将被映像到前半部分,大小写不变。举例来讲,’a‘将被替换为'n',’X‘将被替换为'K';数字和符号不进行翻译。
(b) 在你的解决方案的基础上加上一个应用程序,让他提示用户输入准备加密的字符串(这个算法同时也能够对加密后的字符串进行解密)。
#-*- coding:utf-8 -*- #2015-04-06 db = {'a':'n','b':'o','c':'p','d':'q','e':'r','f':'s','g':'t','h':'u','i':'v','j':'w','k':'x','l':'y','m':'z', 'n':'a','o':'b','p':'c','q':'d','r':'e','s':'f','t':'g','u':'h','v':'i','w':'j','x':'k','y':'l','z':'m', 'N':'A','O':'B','P':'C','Q':'D','R':'E','S':'F','T':'G','U':'H','V':'I','W':'J','X':'K','Y':'L','Z':'M', 'A':'N','B':'O','C':'P','D':'Q','E':'R','F':'S','G':'T','H':'U','I':'V','J':'W','K':'X','L':'Y','M':'Z'} def code_rot13(mystring): newstring = '' for c in mystring: if c in db: newstring += db[c] else: newstring += c return newstring if __name__ == '__main__': mystring = raw_input('Enter string to rot13:') newstring = code_rot13(mystring) print newstring
这里再发一个rot13加解密的网站:http://www.mxcz.net/tools/rot13.aspx
定义。什么组成字典中合法的键?举例说明字典中合法的键与非法的键。
答:
键必须是可哈希的!全部不可变类型都是可哈希的,因此他们均可做为字典的键!
举例:数字1是不可变对象,可做为字典的键;列表{1,2}不可做为字典的键,由于列表是可变的。
定义。
(a) 在数学上,什么是集合?
(b) 在Python中,关于集合类型的定义什么?
答:
(a) 集合是指具备某种特定性质的具体的或抽象的对象汇总成的集体,这些对象称为该集合的元素。
(b) 在Python中,集合对象是一组无序列的可哈希的值。
随机数。修改练习5-7的代码,用random中的randint()或者randrange()生成一个随机数集合,从0-9(包括9)中随机选择1到10个随机数,而后组成一个集合A,同理生成B,而后显示A|B 和 A&B。
#-*- coding:utf-8 -*- #2015-04-06 import random Aset = set() Bset = set() temp = random.randint(1,10) for i in range(temp): Aset.add(random.randint(0,9)) temp = random.randint(1,10) for i in range(temp): Bset.add(random.randint(0,9)) print Aset | Bset print Aset & Bset
#-*- coding:utf-8 -*- #2015-04-06 import random def set_random(): Aset = set() Bset = set() temp = random.randint(1,10) for i in range(temp): Aset.add(random.randint(0,9)) temp = random.randint(1,10) for i in range(temp): Bset.add(random.randint(0,9)) print 'Aset is:',Aset print 'Bset is:',Bset return (Aset,Bset) def set_check(Aset,Bset): for i in range(3): Cset = set(map(int,raw_input('Please input A|B:').split())) Dset = set(map(int,raw_input('Please input A&B:').split())) if Aset|Bset==Cset and Aset&Bset==Dset: print 'Accepted!' break else: print 'Wrong answer!' else: print 'Aset|Bset is:',Aset|Bset print 'Bset&Bset is:',Aset&Bset if __name__ == '__main__': myset = set_random() set_check(myset[0], myset[1])
#-*- coding:utf-8 -*- #2015-04-06 def C_set(): Aset = set(raw_input('Please input A set:').split()) Bset = set(raw_input('Please input B set:').split()) op = raw_input('Please input Operator:') if op=='in': print Aset in Bset elif op=='not in': print Aset not in Bset elif op=='&': print Aset & Bset elif op==r'|': print Aset | Bset elif op=='<': print Aset<Bset elif op=='>': print Aset>Bset elif op=='=': print Aset==Bset elif op=='!=': print Aset!=Bset if __name__=='__main__': C_set()