Python初学习系列(二)

前言

继续记录这一周学习情况,大家一起加油!

第五章:字典和结构化数据

提示:介绍字典数据类型,展示强大的数据组织方法。

字典数据类型提供了一种灵活的访问和组织数据的方式。结合上一章的列表,可以创建数据结构。

字典也是很多值的集合,但字典的索引不仅是整数,也可以是其他数据类型,它被称为“键”,键极其关联的值称为“键-值”对。字典输入时是{}。示例如下:

mycat = {'size':'fat','color':'gray','disposition':'loud'}
print(mycat['size'])
结果
fat

字典也可以用整数作为键,但不必是0。

spam = {12345:'dwdqwfq',42:'cwvv'}

列表的表项的顺序很重要,但在字典中,键-值对输入的顺序不重要,例子如下:

spam =['cats','dogs','moose']
bacon =['dogs','moose','cats']
print(spam ==bacon)
eggs = {'name':'Zo','species':'cat','age':'g'}
ham = {'species':'cat','name':'Zo','age':'g'}
print(eggs == ham)
结果
False
True

由于字典不排序,所以无法像列表那样切片。尝试访问不存在的键,会导致KeyError错误,类似列表的“越界”IndexError错误。

birthdays = {'A':'Apr 1','Bob':'Dec 12'}
while True:
    print('Enter a name:(blank to quit)')
    name =input()
    if name == '':
        break
    if name in birthdays:
        print(birthdays[name]+' is the birthday of '+name)
    else:
        print('I do not have birthday information for '+name)
        print('What is their birthday?')
        bday = input()
        birthdays[name]=bday
        print('Birthday database updated')
结果
Enter a name:(blank to quit)
A
Apr 1 is the birthday of A
Enter a name:(blank to quit)
Erc
I do not have birthday information for Erc
What is their birthday?
Dec 2
Birthday database updated
Enter a name:(blank to quit)
Erc
Dec 2 is the birthday of Erc
Enter a name:(blank to quit)

程序终止时,输入的所有数据都失效,后续会讲解如果将数据保存在硬盘文件中。

三个字典方法,分别为keys(),values(),和items()会返回键、值和键-值对。这些方法返回的值无法被修改,没有append()方法。例子如下:

spam ={'color':'red','age':42}
for v in spam.values():
    print(v)

for k in spam.keys():
    print(k)

for i in spam.items():
print(i)

结果
red
42
color
age
('color', 'red')
('age', 42)

如果希望得到真正的列表,将类似列表的返回值传递给list函数,例子如下:

 in 和not in 操作符可以检查值是否在列表中,也可以用它检查某个键和值是否存在于字典中。其中,'color' in spam是'color' in spam.keys()的简写。例子如下:

spam ={'color':'red','age':42}
print('color' in spam,end=' ')
print('color' in spam.keys(),end=' ')
print('color' in spam.values())
print('red' in spam,end=' ')
print('red' in spam.values())
print(42 in spam,end=' ')
print(42 in spam.values())
结果
True True False
False True
False True

get()方法有两个参数,要取得其值的键,以及如果该键不存在时的返回备用值。

setdefault()方法,第一个参数时要检查的键,如果该键不存在时要设置的默认值,如果该键存在,就返回原来键的值,不进行修改。例子如下:

 设计一个小程序计算一个字符串中每个字符出现的次数,代码如下:

message ='All is well.'
count ={}
for character in message:
    count.setdefault(character,0)
    count[character]=count[character]+1
print(count)
结果
{'A': 1, 'l': 4, ' ': 2, 'i': 1, 's': 1, 'w': 1, 'e': 1, '.': 1}

如果程序中导入pprint模块,就可以使用pprint()和pformat()函数,“漂亮打印”一个字典的字,例子如下:按道理只需要使用pprint.pprint(count)即可,但实际并未每个键值打印在单行上,所以添加了width=1来强制操作

import pprint
message ='All is well.'
count ={}
for character in message:
    count.setdefault(character,0)
    count[character]=count[character]+1
pprint.pprint(count,width=1)
结果
{' ': 2,
 '.': 1,
 'A': 1,
 'e': 1,
 'i': 1,
 'l': 4,
 's': 1,
 'w': 1}

如果希望得到漂亮打印的文本作为字符串,而不是显示在屏幕上,调用pprint.pformat(),下面两行代码时等价的:

pprint.pprint(count,width=1)
print(pprint.pformat(count,width=1))

使用字典包含其他字典,记录谁为野餐带来什么失误,totalBrought()函数读取这个数据结构,计算所有客人带来食物的总数。

allGuests ={'Alice':{'apples':5,'pretzels':2},
            'Bob':{'ham sandwiches':3,'apples':2},
            'Carol':{'cups':3,'apple pies':1}}
def totalBrought(guests,item):
    numBrought =0
    for k,v in guests.items():
        numBrought = numBrought +v.get(item,0)
    return numBrought
print ('-apples '+str(totalBrought(allGuests,'apples')))
结果
-apples 7

第六章:字符串操作

提示:介绍处理文本数据(python中称作字符串)。

当字符串中有单引号字符时,可以使用双引号开始和结束。如果字符串中既有单引号又有双引号,需要使用转义字符,包含一个倒斜杠(\),单引号的转义字符\‘,\’‘ 双引号,\t制表符\n换行符,\\倒斜杠。在字符串引号开始前加r,使它成为原始字符串,可以忽略所有的转义字符,打印出字符串中所有的倒斜杠。例子如下:

print(r'That is Croal\'s cat.')
结果
That is Croal\'s cat.

多行字符串的岂止是三个单引号或者双引号,“三重引号”之间的所有引号,制表符或者换行,都认为是字符串的一部分。Python的代码块缩进规则不适用于多行字符串。

print('''Dear Alice,

Eve's cat has been arrested,and extortion.

sincerely,
Bob''')
print('Dear Alice,\n\nEve\'s cat has been arrested,and extortion.\n\nsincerely,\nBob')
结果
Dear Alice,

Eve's cat has been arrested,and extortion.

sincerely,
Bob
Dear Alice,

Eve's cat has been arrested,and extortion.

sincerely,
Bob

#用作这一行的注释,多重字符串用作多行注释。字符串中的每个字符可以看成一个表项,字符计数包括空格和感叹号,例子如下

spam = 'Hello world!'
print(spam[0])
print(spam[-1])
print(spam[5])
print(spam[0:5])
print(spam[:5])
print(spam[6:])
结果
H
!
 
Hello
Hello
world!

in 和not in 操作符在字符串中的使用。例子如下:

print('Hello' in 'Hello world')
print("HELLO" not in 'hhhhhh')
结果
True
True

一些有用的字符串方法。upper()和lower()字符串方法返回一个新字符串,原字符串的所有字母分贝被转换为大写字母和小写字母,字符串中非字母字符保持不变。非常适用于大小写无关的比较。

spam = 'Hello world!'
spam = spam.upper()
print(spam)
spam = spam.lower()
print(spam)
结果
HELLO WORLD!
hello world!

如果字符串中至少有一个字母,并且所有的字母都是大写或者小写,isupper()和islower()方法就会相应的返回布尔值True,否则就会返回False。

spam = 'Hello world!'
print(spam.islower())
print(spam.isupper())
print('HELLO'.isupper())
print('helo'.islower())
print('1234'.isupper())
print('1234'.islower())
结果
False
False
True
True
False
False

字符串方法中继续调用字符串方法,类似方法调用链。

print('Hello'.upper().lower().upper().isupper())
结果
True

常用的其他字符串方法: isalpha()返回True,字符串只包含字母并且非空。

isalnum()返回True,字符串只包含字母和数字,并且非空。

Isdecimal()返回True,字符串只包含数字字符,并且非空。

Isspace()返回True,字符串只包含空格,制表符和换行,并且非空。

Istitle()返回True,字符串只包含以大写字母开头,后面都是小写字母的单词。

print('hello'.isalpha())
print('hello123'.isalpha())
print('hello123'.isalnum())
print('hello'.isalnum())
print('123'.isdecimal())
print(' '.isspace())
print('This Is Title'.istitle())
print('This Is Title 123'.istitle())
print('This is title'.istitle())
print('This IS Tilte'.istitle())
结果
True
False
True
True
True
True
True
True
False
False

上述字符串方法可以用于验证用户输入,例子如下:

while True:
    print('Enter your age:')
    age = input()
    if age.isdecimal():
        break
print('Please enter a number for your age.')
结果
Enter your age:
qw
Please enter a number for your age.
Enter your age:
12

sartswith()和endswith()方法返回True,如果它们所调用的字符串以该方法传入的字符串开始或结束。否则会返回False。如果只是检查字符串开始或者结束部分是否等于另一个字符串,这两种方法很适用。

join()方法参数是一个字符串列表,返回一个由传入的列表中每个字符串连接的新的字符串。例子如下:

print(','.join(['cats','rats','bats']))
print(' '.join(['My','name','is','Simon']))
print('ABC'.join(['My','name','is','Simon']))
结果
cats,rats,bats
My name is Simon
MyABCnameABCisABCSimon

split()方法针对一个字符串调用,返回字符串的列表。默认情况是按空格字符分隔,也可以按指定的分隔字符串分隔。例子如下:

print('My name is Simon'.split())
print('MyABCnameABCisABCSimon'.split('ABC'))
print('My name is Simon'.split('m'))
结果
['My', 'name', 'is', 'Simon']
['My', 'name', 'is', 'Simon']
['My na', 'e is Si', 'on']

rjust()和ljust()字符串方法返回调用它们的字符串的填充版本,通过插入空格来对齐文本,分别对应右对齐和左对齐。第一个参数是整数长度,用于对齐字符串。第二个参数是指定一个填充字符代替空格字符,例子如下:

print('Hello'.rjust(10,'*'))
print('Hello'.rjust(20,'*'))
print('Hello World'.rjust(20,'*'))
print('Hello'.ljust(10,'*'))
结果
*****Hello
***************Hello
*********Hello World
Hello*****

center()字符串让字符居中,例子如下:

print('Hell'.center(20,'='))结果
========Hell========

strip()字符串方法返回新的字符串,它的开头和末尾都没有空白字符,lstrip()和rstrip()方法将分别删除左边和右边的空白字符。有一个可选的字符串参数,字符串中字符的顺序不重要,指定两边的哪些字符应该删除。

Pyperclip模块有copy()和paste()函数,可以向计算机的剪切板发送文本,或从它接收文本。将程序的输出发送到剪切板,使它容易粘贴到邮件,文字处理程序或其他软件中。该模块不是Python自带的,需要安装。经过曲折的道路终于能够import该模块。(如有问题,评论),例子如下:

import pyperclip
pyperclip.copy('Hello World')
print(pyperclip.paste())
结果
Hello World

对于一个项目:口令保管箱。

第一步:程序设计和数据结构;第二步:处理命令行参数;第三步:复制正确的口令。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值