Python核心编程第七章笔记及习题记录

<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1.字典的比较算法:</span>

(1)首先比较字典的长度

(2)若字典长度相等,比较字典的键,当对应位置的两个键不匹配时,对这两个键直接比较,并返回结果。

(2)若键完全匹配,再比较每个相同的键对应的值,当对应位置的值不匹配时,对这两个值直接比较,并返回结果。

(3)若值也匹配,则为完全匹配,返回0值。

2.dict函数:

 (1)dict函数被用来创建字典,若不提供参数,则为空字典。

(2)若参数为容器类型对象,且可以迭代(例如序列),则每个可迭代的对象必须成对出现。每个值对中,第一个元素是键,第二个元素为值。

      >>>  dict([['x',1],['x',2]])

          {'y':1,'x':2}

  (3)若参数为一个映射对象,例如字典对象,调用dict会从存在的字典里赋值内容生成新的字典。效果与内建方法copy()

相同。

>>>dict8=dict(x=1,y=2)

>>>dict9=dict8.copy()

>>>dict9

{'y':2,'x':1}


3.hash函数

将一个对象传递给hash,返回此对象哈希值。内建函数hash用来判断对象是否可以做字典的键。

将非哈希类型参数传递给hash(),会产生TypeError错误。(不可变类型都是可哈希的)


4.keys()

返回一个列表,包含字典中所有键。

可与for循环一起使用获取字典中的值。

5.values()

返回一个列表,包含字典中所有值。

6.items()

返回一个包含所有(键,值)元组的列表。

7.update()

将一个字典的内容添加到另一字典内,若有重复的键,则该键原有值被新值替换。

8.setdefault()

 检查字典中是否含有某键,若有,返回其值,若无,可以给该键赋默认值。

9.字典的键

(1)不允许一个键对应多个值,当一键多值时,取最后的值。

(2)对于数字,值相等的数字表示同一个键,例如1和1.0

(3)当元组中只包括像数字和字符串的不可变参数,才可以作为字典的键。


习题

7.3

a。穿件一个字典,并把该字典的键按照字母顺序显示出来
b.根据已按照字母顺序排好序的键,显示键和值。

c.按照字母顺序排雷字典的值,并按此顺序显示字典的键和值

<span style="font-size:18px;">#7.3a
dict1={'z':1,'a':2,'f':3,'d':4,'s':5,'y':6,'j':7}
List=dict1.keys()
List.sort
print List

#7.3b
List1=dict1.items()
List1.sort()
print List1
#7.3c
List3=[]
List2=dict1.values()
List2.sort()
for i in List2:
    for j in dict1:
        if dict1[j]==i:
            temp=(j,i)
            List3.append(temp)
print List3</span>

运行结果:

<span style="font-size:18px;">['a', 'd', 'f', 'j', 's', 'y', 'z']
[('a', 2), ('d', 4), ('f', 3), ('j', 7), ('s', 5), ('y', 6), ('z', 1)]
[('z', 1), ('a', 2), ('f', 3), ('d', 4), ('s', 5), ('y', 6), ('j', 7)]</span>

7.4 给定两个长度相同的列表,用这两个列表里的所有数据组成一个字典。

<span style="font-size:18px;">List1=[1,2,3,4,5,6,7,8]
List2=['abc','def','ghi','jkl','mno','pqr','stu','vwy']
dict1={}
Len=len(List1)
for i in range(Len):
    dict1[List1[i]]=List2[i]
print dict1
</span>
运行结果:

<span style="font-size:18px;">{1: 'abc', 2: 'def', 3: 'ghi', 4: 'jkl', 5: 'mno', 6: 'pqr', 7: 'stu', 8: 'vwy'}
</span>
7.5暂时只写了a,b两小问

<span style="font-size:18px;">import time
import datetime
db={}
Time={}
def newuser():
    prompt='login desired: '
    while True:
        name=raw_input(prompt)
        if db.has_key(name):
            prompt='name taken,try another: '
            continue
        else:
            break
    pwd=raw_input('passwd: ')
    db[name]=pwd
    print 'Welcome!'
    LTime=datetime.datetime.now()
    Time[name]=LTime
    print LTime

def olduser():
    name=raw_input('login: ')
    pwd=raw_input('passwd: ')
    checkID=db.setdefault(name,0)
    if checkID==0:
        print 'ID you entered is wrong'
    else:
        passwd=db.get(name)
        if passwd==pwd:
            print 'welcome back',name
            NTime=datetime.datetime.now()
            print NTime
  
            Time[name]=NTime
        else:
            print 'login incorrect'

'''删除用户'''
def delet():
    name=raw_input('enter the name you want delete:')
    checkID=db.setdefault(name,0)
    if checkID==0:
        print 'the name you want delete not exit.'
    else:
        del db[name]
        print 'the name is deleted'
#显示所有用户
def show():
    List=db.items()
    print List
#管理菜单    
def Manag():
    prompt='''
   删除用户请输入d
   显示系统用户请输入s
   :
    '''
    choice=raw_input(prompt).lower()
    if choice =='d':delet()
    elif choice=='s':show()
    else:print 'you enter is wrong'
def showmenu():
    prompt='''
    (N)ew User Login
    (E)xisting User Login
    (Q)uit
    (M)anage
enter choice:'''

    done=False
    while not done:
        chosen=False
        while not chosen:
            try:
                choice=raw_input(prompt).strip()[0].lower()
            except (EOFError,KeyboardInterrupt):
                choice='q'
            print '\nYou picked:[%s]',choice
            if choice not in 'neqm':
                print 'incalid option,try again'
            else:
                chosen=True
        if choice =='q':done=True
        if choice =='n':newuser()
        if choice =='e':olduser()
        if choice =='m':Manag()

showmenu()</span>

7.7 颠倒字典中的键和值,用前者的键作值,前者的值作键。

dict1={1:'a',2:'b',3:'c',4:'d',5:'e',6:'f',7:'g'}
dict2={}

List1=dict1.values()
List2=dict1.keys()

Len=len(List1)
for item in range(Len):
    dict2[List1[item]]=List2[item]

print dict2

7.8 穿件一个简单的雇员姓名和编号的程序........(附加题就不写了,和前面那题类似)

dict1={}
print 'enter a name equal to -1 to end.'
while True:
    name=raw_input('please enter a name:')
    if name=='-1':
        break
    number=raw_input('and enter his number:')
    
    dict1[name]=number

List1=dict1.items()
List1.sort()
print List1
    

7.9翻译。
(7.9c的代码在注释里)
#7.9a
dict1={}
def tr(srcstr,dsstr,string):
       string.lower()'''不区分大小写'''
    for i in range(len(srcstr)):
        dict1[srcstr[i]]=dsstr[i]
        '''7.9c
        new_srcstr=srcstr[:len(dsstr)]
        '''
    for j in range(len(string)):
        if string[j] in srcstr:
            '''7.9c
            if string[j] in new_srcstr:
                string=string[:j]+dict1[string[j]]+string[j+1:]
            else:
                string=string[:j]+string[j+1:]
            '''
            string=string[:j]+dict1[string[j]]+string[j+1:]
    return string

srcstr='abcdefghijkl'
dsstr= 'mnopqrstuvwx'
string=raw_input('please enter a string:')

print 'transalte string is',tr(srcstr,dsstr,string)


7.10 编写‘rot13’翻译器。

def rot13(string):
    for i in range(len(string)):
        num=ord(string[i])
        if num>64 and num<78 or num>96 and num<110:
            string=string[:i]+chr(num+13)+string[i+1:]
        elif num>77 and num<91 or num>109 and num<123:
            string=string[:i]+chr(num-13)+string[i+1:]

    return string

string=raw_input('Enter string to rot13:')
print'Your string to en/decrypt was:[%s]'%string
print 'The rot13 string is:',rot13(string)
运行结果:

Enter string to rot13:This is a short sentence
Your string to en/decrypt was:[This is a short sentence]
The rot13 string is: Guvf vf n fubeg fragrapr
>>> ================================ RESTART ================================
>>> 
Enter string to rot13:Guvf vf n fubeg fragrapr
Your string to en/decrypt was:[Guvf vf n fubeg fragrapr]
The rot13 string is: This is a short sentence

7.13

import random

A=set()
B=set()
for i in range(10):
    item=random.randint(0,9)
    A.add(item)
print A
for j in range(10):
    item=random.randint(0,9)
    B.add(item)
print B
print A|B
print A&B
运行结果:

set([2, 4, 5, 6, 7, 8, 9])
set([0, 3, 6, 7, 8, 9])
set([0, 2, 3, 4, 5, 6, 7, 8, 9])
set([8, 9, 6, 7])
7.14用户验证

import random

A=set()
B=set()
for i in range(10):
    item=random.randint(0,9)
    A.add(item)
print A
for j in range(10):
    item=random.randint(0,9)
    B.add(item)
print B

for k in range(3):
    Input1=raw_input('Now,input your think of A|B:')
    Input2=raw_input('and A&B:')
    C=set()
    D=set()
    for i in Input1:
        C.add(int(i))
    for j in Input2:
        D.add(int(j))


    if (A|B)==(C|D) and (A&B)==(C&D):
        print 'Congratulations,you are right!'
        break
    else:
        print'You are wrong!'
        k+=1
if k>2:
    print'The right answer of A|B is:',A|B
    print'The right answer oF A&B is:',A&B










  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值