Python编程:从入门到实践 —学习笔记2(重点难点归纳)(第六章到第八章)

目录
6 字典
7 用户输入input和while循环
8 函数

**

6. 字典

**
6.2. 字典的使用
在Python中,字典是一系列键—值对。每个键都与一个值相关联,你可以使用键来访问与之相关联的值。与键相关联的值可以是数字、字符串、列表乃至字典。事实上,可将任何Python对象用作字典中的值。键和值之间用冒号分隔,而键—值对之间用逗号分隔。在字典中,你想存储多少个键—值对都可以。

注意,键—值对的排列顺序与添加顺序不同。Python不关心键—值对的添加顺序,
而只关心键和值之间的关联关系。

中文注释问题:中文注释报错,代码首行添加 # coding=utf-8 这个代码即可,错误运行提示NON什么就将utf-8替换成什么即可。
对于字典中不再需要的信息,可使用del语句将相应的键—值对彻底删除。使用del语句时,
必须指定字典名和要删除的键。

Str()函数打印显示字符串时候使用,对于列表或者字典中的数字,必须使用,使用str后将数字作为值显示,而不是当做代码。

确定需要使用多行来定义字典时,在输入左花括号后按回车键,再在下一行缩进四个空格,指定第一个键—值对,并在它后面加上一个逗号。此后你再次按回车键时,文本编辑器将自动缩进后续键—值对,且缩进量与第一个键—值对相同。定义好字典后,在最后一个键—值对的下一行添加一个右花括号,并缩进四个空格,使其与字典中的键对齐。另外一种不错的做法是在最后一个键—值对后面也加上逗号,为以后在下一行添加键—值对做好准备。
例如:
favorite_languages = {
‘jen’:‘python’,
‘sarah’:‘c’,
‘edward’:‘ruby’,
‘phil’:‘python’,
}
6.3. 遍历字典
遍历字典中的键-值:
在Python中,要编写用于遍历字典的for循环,使用.items(),可声明两个变量,用于存储键—值对中的键和值。对于这两个变量,可使用任何名称。
user_0 = {
‘username’:‘efermi’,
‘first’:‘enrico’,
‘last’:‘fermi’,
}

for key, value in user_0.items():
print("\nKey: " + key)
print("Value: " + value)

遍历字典中的键:
在Python中,要编写用于遍历字典的for循环,使用.keys(),for循环创建一个变量即可。
sorted(cars) 按字母顺序排列cars列表中的元素,临时性修改
要以特定的顺序返回元素,一种办法是在for循环中对返回的键进行排序。为此,可使用函
数sorted()来获得按特定顺序排列的键列表的副本:
favorite_languages = {
‘jen’:‘python’,
‘sarah’:‘c’,
‘edward’:‘ruby’,
‘phil’:‘python’,
}

for name in sorted(favorite_languages.keys()):
print(name.title() + “, thank you for taking the poll.”)

遍历字典中的值:
在Python中,要编写用于遍历字典的for循环,使用.values(),for循环创建一个变量即可。
提取字典中所有的值,而没有考虑是否重复。涉及的值很少时,这也许不是问题,但如果被调查者很多,最终的列表可能包含大量的重复项。为剔除重复项,可使用集合(set)。
集合类似于列表,但每个元素都必须是独一无二的:
for language in set(favorite_languages.values()):
print(language.title())

6.4. 嵌套
在Python中,需要将一系列字典存储在列表中,或将列表作为值存储在字典中,这称为嵌套。你可以在列表中嵌套字典、在字典中嵌套列表甚至在字典中嵌套字典。

在列表中存储字典:先创建一个空列表,将字典作为列表中的值。

创建一个用于存储外星人的空列表

aliens = []

创建30个绿色外星人

for alien_number in range(0,30):
new_alien = {‘color’: ‘green’, ‘points’: 5, ‘speed’: ‘slow’}
aliens.append(new_alien)

在字典中存储列表:创建一个字典,将列表存储在字典的键所对应的值中
favorite_languages = {
‘jen’: [‘python’, ‘ruby’],
‘sarah’: [‘c’],
‘edward’: [‘ruby’, ‘go’],
‘phil’: [‘python’, ‘haskell’],
}
print(favorite_languages)

在字典中存储字典:创建一个字典,将字典存储在字典的键所对应的值中

**

7. 用户输入input和while循环

**
7.1. 用户输入
CMD终端运行python代码

函数int()将数字的字符串表示转换为数值表示。
处理数值信息时,求模运算符(%)是一个很有用的工具,它将两个数相除并返回余数:

4 % 3
1

5 % 3
2

6 % 3
0
如果一个数可被另一个数整除,余数就为0,因此求模运算符将返回0。你可利用这一点来判断一个数是奇数还是偶数。
如果你使用的是Python 2.7,应使用函数raw_input()来提示用户输入。这个函数与Python 3
中的input()一样,也将输入解读为字符串。

7.2. While循环
for循环用于针对集合中的每个元素都一个代码块,而while循环不断地运行,直到指定的条件不满足为止。
True 和 False 都需要大写,用于循环判断时,才能正确识别。
Brea函数:在任何Python循环中都可使用break语句。例如,可使用break语句来退出遍历列表或字典
的for循环。
Continue函数:要返回到循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它不像break语句那样不再执行余下的代码并退出整个循环。

每个程序员都会偶尔因不小心而编写出无限循环,在循环的退出条件比较微妙时尤其如此。
如果程序陷入无限循环,可按Ctrl + C,也可关闭显示程序输出的终端窗口。
确认程序至少有一个这样的地方能让循环条件为False或让break语句得以执行。

7.3. While循环处理列表和字典
for循环是一种遍历列表的有效方式,但在for循环中不应修改列表,否则将导致Python难以跟踪其中的元素。
要在遍历列表的同时对其进行修改,可使用while循环。通过将while循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。

采用while循环,remove函数,删除列表中所有的cat
pets = [‘dog’, ‘cat’, ‘snake’, ‘pig’, ‘cat’, ‘goldfish’, ‘rabbit’, ‘cat’]
print(pets)

while ‘cat’ in pets:
pets.remove(‘cat’)

print(pets)

将用户输入存入字典中,并不断扩充字典

coding=utf-8
采用while循环来输入一个调查列表,并且存储到字典中
详细说明见书P112

responses = {}

设置一个标志,指出调查是否继续
polling_active = True

while polling_active:
# 提示输入被调查者的名字和回答
name = input("\nWhat is your name? ")
response = input("Which mountain would you like to climb someday? ")

# 将答卷存储到字典中
responses[name] = response

# 看看是否还有人要参与调查
repeat = input("Would you like to let anothor person respond? (Yes/No) ")
if repeat == 'No':
    polling_active = False

调查结束,显示调查结果
print("\n— Poll Results —")
for name, response in responses.items():
print(name.title() + " would like to climb " + response.title() + “.”)

**

8. 函数

**
8.1. 定义函数
向函数传递信息:
#coding=utf-8
#定义一个函数
#详细说明见书P114

def greet_user():
#""“显示简单的问候语”""
print(“Hello!”)

greet_user()

def greet_user(username):
#""“显示简单的问候语”""
print("Hello! " + username.title() + “!”)

greet_user(‘jessle’)
greet_user(‘felix’)

在函数greet_user()的定义中,变量username是一个形参——函数完成其工作所需的一项信
息。在代码greet_user(‘jesse’)中,值’jesse’是一个实参。实参是调用函数时传递给函数的信
息。我们调用函数时,将要让函数使用的信息放在括号内。在greet_user(‘jesse’)中,将实参
'jesse’传递给了函数greet_user(),这个值被存储在形参username中。

8.2. 传递实参
位置实参:最简单的关联方式是基于实参的顺序。这种关联方式被称为位置实参。
关键字实参:关键字实参让你无需考虑函数调用中的实参顺序,还清楚地指出了函数调用中各个值的用途。
默认值:使用默认值时,在形参列表中必须先列出没有默认值的形参,再列出有默认值的实参。这让Python依然能够正确地解读位置实参。如果提供了实参,因此Python将忽略这个形参的默认值。
位置实参、关键字实参和默认值可以混合使用:
#位置实参、关键字实参和默认值可以混合使用
def describe_pet(pet_name, animal_type = ‘dog’):
“”“display the information of my pet”""
print("\nI have a " + animal_type + “.”)
print("My " + animal_type + "'s name is " + pet_name.title() + “.”)

一条名为Willie的小狗(下面两种方式输出结果一致)
位置实参和调用默认值
describe_pet(‘willie’)

#关键字实参和调用默认值
describe_pet(pet_name = ‘willie’)

一只名为Harry的仓鼠(实参混用)(下面三种方式输出结果一致)
位置实参替换默认值
describe_pet(‘harry’, ‘hamster’)

#关键字实参
describe_pet(pet_name = ‘harry’, animal_type = ‘hamster’)

#关键字实参位置调换
describe_pet(animal_type = ‘hamster’, pet_name = ‘harry’)

8.3. 返回值
可使用return语句将值返回到调用函数的代码行。返回值让你能够将程序的大部分繁重工作移到函数中去完成,从而简化主程序。
Python将非空字符串解读为True,因此如果函数调用中提供了中间名,if middle_name将为True.
#将实参变成可选的,指定一个空字符串,非空字符串解读为True
def get_formatted_name(first_name, last_name, middle_name = ‘’):
“”“return the full name”""
if middle_name:
full_name = first_name + ’ ’ + middle_name + ’ ’ + last_name
else:
full_name = first_name + ’ ’ + last_name
return full_name.title()

musician = get_formatted_name(‘john’, ‘lee’, ‘hooker’)
print(musician)

musician = get_formatted_name(‘jimi’, ‘hendrix’)
print(musician)

8.4. 传递列表
将列表传递给函数后,函数就可对其进行修改。在函数中对这个列表所做的任何修改都是永久性的,这让你能够高效地处理大量的数据。
每个函数都应只负责一项具体的工作。第一个函数打印每个设计,而第二个显示打印好的模型;这优于使用一个函数来完成两项工作。编写函数时,如果你发现它执行的任务太多,请尝试将这些代码划分到两个函数中。别忘了,总是可以在一个函数中调用另一个函数,这有助于将复杂的任务划分成一系列的步骤。

8.5. 传递任意数量的实参
形参名*toppings中的星号让Python创建一个名为toppings的空元组,并将收到的所有值都封装到这个元组中。
如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最
后。Python先匹配位置实参和关键字实参,再将余下的实参都收集到最后一个形参中。

函数的优点之一是,使用它们可将代码块与主程序分离。通过给函数指定描述性名称,可让
主程序容易理解得多。你还可以更进一步,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。

8.6. 将函数存储在模块中
import语句允许在当前运行的程序文件中使用模块中的代码。
要调用被导入的模块中的函数,可指定导入的模块的名称pizza_2和函数名make_pizza(),并用句点分隔它们.
#导入模块

import pizza_2

pizza_2.make_pizza(16, ‘pepperoni’)
pizza_2.make_pizza(12, ‘mushrooms’, ‘green peppers’, ‘extra cheese’)

导入特定的函数:
你还可以导入模块中的特定函数:from module_name import function_name
通过用逗号分隔函数名,可根据需要从模块中导入任意数量的函数:
from module_name import function_0, function_1, function_2

利用as给函数指定别名,给模块指定别名:
from pizza import make_pizza as mp 将make_pizza简化为mp
import pizza as p 将模块pizza简化成p

使用星号(*)运算符可让Python导入模块中的所有函数:
from pizza import *
使用并非自己编写的大型模块时,最好不要采用这种导入方法:如果模块中有函数的名称与你的项目中使用的名称相同,可能导致意想不到的结果:Python可能遇到多个名称相同的函数或变量,进而覆盖函数,而不是分别导入所有的函数。
最佳的做法是,要么只导入你需要使用的函数,要么导入整个模块并使用句点表示法。这能
让代码更清晰.

格式指南:
给形参指定默认值时,等号两边不要有空格:
def function_name(parameter_0, parameter_1=‘default value’)
对于函数调用中的关键字实参,也应遵循这种约定:
function_name(value_0, parameter_1=‘value’)

如果程序或模块包含多个函数,可使用两个空行将相邻的函数分开,这样将更容易知道前一
个函数在什么地方结束,下一个函数从什么地方开始。

所有的import语句都应放在文件开头,唯一例外的情形是,在文件开头使用了注释来描述整个程序。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值