目录

第七章 用户输入和while循环

7.1 函数input()的工作原理

函数input()会让程序暂停一会,等待用户输入一些文本。获取用户输入的文本后,python将其存储在一个变量中,以方便我们使用。

函数input()接收一个参数:即要向用户显示的提示或说明,让用户知道如何做。输入变量存储在message。

7.1.1 编写清晰的程序

可以在冒号后面空格,让用户清除从哪开始的。

上面的图演示了一种创建多行字符串的方式。第一行将消息的前半部分存储在变量nn中;在第二行,运算符+=在存储在nn中的字符串末尾附加字符串(自己理解感觉像C语言的+=。就是nn=前半部分+后半部分我们输入的)

7.1.2 使用int()来获取数值输入
分析:

使用函数input()时,python将用户的输入解读为字符串。

我们输入21,python提供值时,返回的时‘21’,但如果按照之前的判断,应该出现false,但是却报错,因为python无法将字符串和整数进行比较,所以字符‘21’不能和19比较

结果:

所以我们可以使用int()函数,他会让python输入的为数值。

函数int()将数字的字符串转化为数值表示。

把它运用到现实生活中。。。

7.1.3 求模运算符

处理数值信息,求模运算符(%)是好用的工具。就是相除返回余数

制作一个求模的方案:

输入的时候忘记了“+str(shu)+”。。。。。

msg = input("请输入您要租赁的汽车名称:")

print("Let me see if I can find you a " + msg)

感觉这样的不用加也行在末尾。。感觉好简便,打脸了。。。。

7.1.4 在python2.7中获取输入

不是用input(),使用函数raw_input()来提示用户输入。并且与python3的一样,将输入解读为字符串。

7.2 while循环简介

for循环用于针对集合的每个元素的一个代码块,而while循环不断地运行,知道不满足。

7.2.1 使用while循环

不解释。。。

7.2.2 让用户选择何时退出

只有输入quit才可以退出,不然就一直循环

我们创建了一个变量--message,让python首次执行while代码行时有可检查的东西。python首次执行while语句时,需要将message的值与‘quit’比较。

进一步修改美化,让quit消息不打印出来。

而是直接退出。

7.2.3 使用标志

在要求很多条件都满足才能继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志

它可以控制程序是否可以进行。

用active作为标志,(ture,false首字母必须大写,别能小写,不然会报错。)如果用户输入‘quit’,我们就将变量active设置为False,这就会导致while循环不再执行。

7.2.4 使用break退出循环

要立即退出while循环,不再运行循环中余下的代码,不管条件测试结果如何,可使用break。

以while Ture开头的循环,只有遇到break才会停。

在这个程序中,只有输入quit才可以终止当前的循环。以至于python退出循环。


brwak语句也可以用来退出遍历列表或字典的for循环。

7.2.5 在循环中使用continue

要返回到循环开头,并根据条件测试结果决定是否继续执行循环。

不像break直接跳出循环,它是跳过,类似C语言的continue

1到10的奇数:

不解释。。。

7.2.6 避免无线循环

x=1

while x <5 :

print(x)

如果在正在循环中,可以用ctrl+c,也可以关闭显示程序输出的终端窗口

这是一道习题,之前一直都是用msg变量,不变,就会出现上一回的输入值在下一循环中,所以要用两个变量。。

7.3 使用while循环来处理列表和字典

通过将while循环同列表、字典结合在一起,可收集、存储并组织大量输入,以供以后查看和显示。

7.3.1 在列表之间移动元素

不解释。。。

7.3.2 删除包含特定值的所有列表元素

在第三章,用方法remove()删除特定值,要删除列表中的所有包含特定值的元素需要---

用while循环再附加方法remove()

直到列表中不再次出现remove的值,就停止循环。

7.3.3 使用用户输入来填充字典

结果

看着这一题,有点迷惑,在问过大佬之后,明白了。

在responses[name]中,我们只添加了变量name的输入值给字典,为啥会在倒数第二行有name和response的用法,这里我迷了,因为字典的不熟悉掌握,在重新看一遍后,知道了,键-值对。。。。。。。。。。。。。。。。。。。。

第八章 函数

函数就是带名字的代码块,用于完成具体的工作。

最喜欢这一章了,感觉很有意思,哈哈哈哈,呜呜呜呜

8.1 定义函数

这是一个简单的函数结构,第一行的代码使用关键字def告诉python你需要定义一个函数。然后向python指出了函数名。在这儿,函数名为greet(),它不需要任何信息就能完成其工作,因为kuohaoshikongde(即便是这样,也不能少括号),最后,定义以冒号结尾

感觉类似C语言的定义宏那样

紧跟在def gret():后面的缩进成了函数体,greet()只工作一项:打印cao。。。。。。

要使用这个函数,首先我们需要调用它。

要调用函数,必须依次指定函数名和括号括起来的信息。

8.1.1 向函数传递信息

在括号里面添加name,就可以让函数接受你给的name指定的任何值。现在,这个函数要求我们调用它是给name指定一个值。

调用greet()时,可以将一个名字传递给他。就像上面的一样。

代码greet('youxiu')调用函数greet(),并向他提供执行print语句所需要的信息。

调用时无论传输什么名字,都会生成相对应的输出。

8.1.2 实参和形参

在上面的距举例中,变量name是一个形参--函数完成其工作所需一项信息。

在代码greet('youxiu')中,'youxiu'是一个实参。

实参是调用函数是传递给函数的信息。

原理:我们调用函数,将要让函数使用的信息存放在括号内。在greet('youxiu')中,将实参'youxiu'传递给函数greet(),这个值被存储在形参name中。

也可以在def那里,定义两个形参

8.2 传递实参

8.2.1 位置实参

位置实参

调用函数时,python必须将函数调用中的每个实参都关联到函数定义中的一个形参,因此,最简单的关联方式是基于实参的顺序。

容易出错的地方:忘记def末尾后的:冒号

实参的引号

1.调用函数多次

在下一行接着按照最后一行的这样的格式输入就行

在函数中,可根据需要使用任意数量的位置实参,python将按照顺序将函数调用中的实参关联到函数定义中的相应的形参。

2.位置实参的顺序很重要

确认函数调用中实参的顺序与函数定义中的形参的顺序一样。

8.2.2 关键字实参

关键字实参:

是传递给函数的名称-值对。可以直接在实参中将名称与值关联起来,因此向函数传递实参时不会混淆。

关键字实参的顺序无关紧要,因为python知道各个值该存储到那个形参中。所以是等效的在上面的图中。

务必要准确的指出函数定义的形参名

8.2.3 默认值

编写函数时,可以给每个形参指定默认值。在调用函数中给形参提供了实参时,python将使用指定的实参值;否则,将使用形参的默认值。

调用这个函数,如果没有给它指定值,python就把这个形参设置为beibei

想上面的我们只用了一个实参的dog,在没有特殊声明的情况下,都是按照顺序来实参对应形参,所以name的形参就是默认值。

8.2.4 等效的函数调用

使用哪种都一样,符合自己的习惯就行,我感觉当形参少时,用简约的’‘,多的话就用形参名子的那个。

8.2.5 避免实参错误

当提供的实参多或者少于函数完成其工作所需的信息时,将出现实参不匹配。

python发现该函数调用缺少必要的信息,而traceback指出了这一点

第二行指出问题所在地

第三行指出函数调用出现了问题

第四行说我们少了两个实参,并指出了相应的形参的名称。

8.3 返回值

函数并不是直接显示输出,有时,它可以处理一些数据,返回一个、组的值。函数返回的值称为返回值。。。

8.3.1 返回简单值

这个输出Chen Youxiu

在需要分别存储大量名和姓的程序中,像这样的函数灰常好用,

8.3.2 让实参变成可选的

有时只提供了now,last,没有提供lasted,他将会不能正常的运行。通过等于lasted=’ ‘来让其变成可选,可给其值提供一个默认值,空字符串,并在用户不输入的时候使用这个实参。

可选值让函数能够处理各种不同情况的同时,确保函数尽可能地调用

8.3.3 返回字典

person()接受now和last,并将这些值封装到字典中。存储在now时,使用键’now‘。。最后原来的两项文本信息存储在一个字典中

8.3.4 结合使用函数和while循环

对这个代码的解释:可以把前三行当成一个代码块,就是把下面输入的实参变成首字母大写,并加起来。

下面用了一个无限循环,当输入q才会停止。前三行的结果给了全名,然后打印

编写一个名为make_album() 的函数, 它创建一个描述音乐专辑的字典。
# 这个函数应接受歌手的名字和专辑名, 并返回一个包含这两项信息的字典。 使用这个函数创建三个表示不同专辑的字典,
# 并打印每个返回的值, 以核实字典正确地存储了专辑的信息。给函数make_album() 添加一个可选形参,
# 以便能够存储专辑包含的歌曲数。 如果调用这个函数时指定了歌曲数, 就将这个值添加到表示专辑的字典中。 调用这个
# 函数, 并至少在一次调用中指定专辑包含的歌曲数。
def make_album(singer_name,album_name,song_number = ''):
if song_number:
s_a = {'singer_name':singer_name,'album_name':album_name,'song_number' : song_number}
else:
s_a = {'singer_name':singer_name,'album_name':album_name}
return s_a
a = make_album('HanHong','QingZangGaoYuan','5')
b = make_album('AndiLiu','WangQingShui')
c = make_album('LiuHuan','YouAndMe','7')
print(a)
print(b)
print(c)
# 8-8 用户的专辑 : 在为完成练习8-7编写的程序中, 编写一个while 循环, 让用户输入一个专辑的歌手和名称。
# 获取这些信息后, 使用它们来调用函数make_album() , 并将创建的字典打印出来。 在这个while 循环中, 务必要提供退出途径。
def make_album(singer_name,album_name,song_number = ''):
if song_number:
s_a = {'singer_name':singer_name,'album_name':album_name,'song_number' : song_number}
else:
s_a = {'singer_name':singer_name,'album_name':album_name}
return s_a s_n_inp = '请输入歌手名:(输入’quit‘后退出)'
a_n_inp = '请输入专辑名:(输入’quit‘后退出)'
ac = True
while ac:
a = input(s_n_inp)
b = input(a_n_inp)
if a == 'quit' or b == 'quit' :#前面感觉也可以用,忘了用了。。。。。。
break#或者ac=False也可以。。
else:
c = make_album(a,b)
print(c)

8.4 传递列表

将列表传递给函数后,函数就能直接访问其内容。

我们将greet()定义成接收的列表,并将其存储在names中。这个函数遍历收到的列表,并对其中的每一位用户都打印一条问候语。

出错点:关键字def最后面忘记加:

for缩进

8.4.1 在函数中修改列表

讲的就是分步函数,即每个函数都对应负责一项具体的工作。有两个,这样优于使用一个函数来完成工作。并且类似C语言指针的调用,这有助于键更复杂的任务划分成一系列的步骤。

8.4.2 进制禁止函数修改列表

有时候,需要禁止函数修改列表。可向函数传递列表的副本而不是原件;这样函数所做的任何修改都只影响副本,丝毫不影响原件。

要将列表的副本传给函数

function_name(list_name[:])

切片表示法[:]创建列表的副本。

这一节有点迷。。。

迷归来了,虽然向函数传递列表的副本可保留原始列表的内容,但除非有充分的理由传递副本,否则还是应该将原始列表传递给函数,因为让函数实现现成列表可以避免花费时间和创建副本。

# 8-10 了不起的魔术师 : 在你为完成练习8-9而编写的程序中, 编写一个名为make_great() 的函数,
# 对魔术师列表进行修改, 在每个魔术师的名字中都加入字样“theGreat”。 调用函数show_magicians() , 确认魔术师列表确实变了。
name_list = ['mag1','mag2','mag3']
name_change = []
def make_great(name_list,name_change):
while name_list:
cur = name_list.pop()
cur = 'thegreat' + cur
name_change.append(cur)#上面是对name——list和name——change的转移 def show_magicians(name_change):
for name in name_change:
print(name) #这个开始打印 make_great(name_list,name_change)
show_magicians(name_change)
# 8-11 不变的魔术师 : 修改你为完成练习8-10而编写的程序, 在调用函数make_great() 时, 向它传递魔术师列表的副本。
# 由于不想修改原始列表, 请返回修改后的列表, 并将其存储到另一个列表中。 分别使用这两个列表来调用show_magicians() ,
# 确认一个列表包含的是原来的魔术师名字, 而另一个列表包含的是添加了字样“the Great”的魔术师名字。
name_list = ['mag1','mag2','mag3']
name_change = []
def make_great(name_list,name_change):
while name_list:
cur = name_list.pop()
cur = 'great' + cur
name_change.append(cur)#上面是对name——list和name——change的转移 def show_magicians(name_change):
for name in name_change:
print(name) #这个开始打印 make_great(name_list[:],name_change)
show_magicians(name_change)
show_magicians(name_list)

8.5 传递任意数量的实参

形参名*cai中的星号让python创建一个名为cai的空元组,并将收到的所有值都封装到这个元组中。输出证明:python能够处理使用一个值调用函数的情形,也能处理三个值来调用的情形。

8.5.1 结合使用位置实参和任意数量实参

如果要让函数接受不同类型的实参,必须在函数定义中将接纳任意数量实参的形参放在最后。python先匹配位置实参和关键字实参,再将余下的实参都收集到最后的一个形参中。

8.5.2 使用任意数量的关键字实参

有时候,需要接受任意数量的实参,但不知道传递给函数的是什么样的信息。我们可以用函数编写成能够接受任意数量的键-值对---调用语句提供了多少就接受多少。

形参**user是把除了对first,last之外的形参都放里面封装,并且该代码是遍历字典的中的键-值对,并将每个键-值对都加入字典profile中。最后字典返回给函数行调用。

# 8-12 三明治 : 编写一个函数, 它接受顾客要在三明治中添加的一系列食材。 这个函数只有一个形参(它收集函数调用中提供的所有食材) ,
# 并打印一条消息, 对顾客点的三明治进行概述。 调用这个函数三次, 每次都提供不同数量的实参。
def sand_make(*ingredients):
print( '添加的食材有:')
for i in ingredients:
print('--' + i) sand_make('1','2','3','4')
sand_make('0')
sand_make('1','2')

任意数量的实参。。

# 8-13 用户简介 : 复制前面的程序user_profile.py, 在其中调用build_profile() 来创建有关你的简介;
# 调用这个函数时, 指定你的名和姓, 以及三个描述你的键-值对。
def profile(name,location,**user):
profile={}
profile['name']=name
profile['location']=location
for key,value in user.items():
profile[key]=value
return profile
my=profile('mayun','aliba',company='zhejiang',xueli='bigger')
print(my)
mht=profile('mahuateng','tencent',company='shenzhen',xueli='bigger')
print(mht)

使用的是任意数量的关键字实参。

8.6 将函数存储在模块中

函数的优点之一:他们可将代码块与主程序分离。通过给函数指定描述性名称,可让主程序更容易理解的多。

还可以,将函数存储在被称为模块的独立文件中,再将模块导入到主程序中。

import语句允许在当前运行的程序文件中使用模块中的代码。

8.6.1 导入整个模块

首先需要创建模块。模块的拓展名为.py,包含要导入到程序的代码。

我的notepad++我不会导,这一节就过了,后期用pycharm再补过来

python7、8章的更多相关文章

  1. 《Django By Example》第五章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者@ucag注:大家好,我是新来的翻译, ...

  2. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第二章:利用模型类创建视图、控制器和数据库

    在这一章中,我们将直接进入项目,并且为产品和分类添加一些基本的模型类.我们将在Entity Framework的代码优先模式下,利用这些模型类创建一个数据库.我们还将学习如何在代码中创建数据库上下文类 ...

  3. 《Django By Example》第四章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:祝大家新年快乐,这次带来<D ...

  4. 《Django By Example》第三章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:第三章滚烫出炉,大家请不要吐槽文中 ...

  5. 《Django By Example》第二章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:翻译完第一章后,发现翻译第二章的速 ...

  6. 《Django By Example》第一章 中文 翻译 (个人学习,渣翻)

    书籍出处:https://www.packtpub.com/web-development/django-example 原作者:Antonio Melé (译者注:本人目前在杭州某家互联网公司工作, ...

  7. ASP.NET MVC with Entity Framework and CSS一书翻译系列文章之第一章:创建基本的MVC Web站点

    在这一章中,我们将学习如何使用基架快速搭建和运行一个简单的Microsoft ASP.NET MVC Web站点.在我们马上投入学习和编码之前,我们首先了解一些有关ASP.NET MVC和Entity ...

  8. ASP.NET Core 中文文档 第四章 MVC(4.2)控制器操作的路由

    原文:Routing to Controller Actions 作者:Ryan Nowak.Rick Anderson 翻译:娄宇(Lyrics) 校对:何镇汐.姚阿勇(Dr.Yao) ASP.NE ...

  9. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

  10. MyBatis3.2从入门到精通第一章

    第一章一.引言mybatis是一个持久层框架,是apache下的顶级项目.mybatis托管到goolecode下,再后来托管到github下.(百度百科有解释)二.概述mybatis让程序将主要精力 ...

随机推荐

  1. 【转】Description Resource Path Location Type Java compiler level&amp;n

    转载地址:http://blog.sina.com.cn/s/blog_ae96abfd0101qbq0.html 在项目上右键Properties->Project Facets,在打开的Pr ...

  2. append,appendTo和prepend #1daae2

    1.append(content)                                                                                   ...

  3. SQL 操作语句

    SQL Server T-SQL高级查询 高级查询在数据库中用得是最频繁的,也是应用最广泛的. Ø 基本常用查询 --select select * from student; --all 查询所有 ...

  4. SOCKet 编程 简介

    “一切皆Socket!” 话虽些许夸张,但是事实也是,现在的网络编程几乎都是用的socket. ——有感于实际编程和开源项目研究. 我们深谙信息交流的价值,那网络中进程之间如何通信,如我们每天打开浏览 ...

  5. json date convert

    function getDateTime(jsondate) { var date = new Date(parseInt(jsondate.replace("/Date(", & ...

  6. XML 学习之保存节点

    XmlDocumnet WriteTo 方法 说明: 保存xmldocument对象节点到xmlwriter(即xml文件写入流) 实例: public static void WriteXml( X ...

  7. SSH里面使用jQuery的ajax

    今天我真的很兴奋!在我的SSH项目中用jQuery的异步传输成功了,经过一天多的奋战,大工告成! 我的项目需求是在javascript中向我的controller(即:action)中传输form表单 ...

  8. Python入门之函数的装饰器

    本章目录: 装饰器: 一.为什么要用装饰器 二.什么是装饰器 三.无参装饰器 四.装饰器语法糖 五.认证装饰器实现 六.叠加多个装饰器 七.带参装饰器 ======================== ...

  9. LeetCode(34)-Palindrome Number

    题目: Determine whether an integer is a palindrome. Do this without extra space. 思路: 求一个整数是不是回文树.负数不是, ...

  10. 使用asp.net mvc + entityframework + sqlServer 搭建一个简单的code first项目

    步骤: 1. 创建一个asp.net mvc 项目 1.1 项目创建好结构如下 2 通过vs安装EntityFramework框架 install-package entityframework 3. ...