目录

第七章 用户输入和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时,通常会想让一些地方可以配 ...

随机推荐

  1. css进阶 00-准备

    前言 css 进阶的主要内容如下. #1.css 非布局样式 html 元素的分类和特性 css 选择器 css 常见属性(非布局样式) #2.css 布局相关 css 布局属性和组合解析 常见布局方 ...

  2. [游记]FCS&FJOI2018滚粗记

    省冬连着省选,嗯这篇博客是省冬前就开的 省选是在情人节前一天- day0 中午早早的来了这边(找了个酒店到房间发现非常粉w 下午一个人去附中报到,然而-没有人带队签安全责任书好像不行-签到失败QAQ ...

  3. 如何正确运用break、continue和return

    break.continue和return 一.break 作用:跳出(离break语句最近的)循环 栗子: for(int i = 1;i <= 100;i++){ System.out.pr ...

  4. 工作3年,看啥资料能月薪30K?

    作者:小傅哥 博客:https://bugstack.cn Github:https://github.com/fuzhengwei/CodeGuide/wiki 沉淀.分享.成长,让自己和他人都能有 ...

  5. 如何优雅地使用云原生 Prometheus 监控集群

    作者陈凯烨,腾讯云前端开发工程师.负责 TKE 集群,弹性集群和云原生监控等模块控制台开发. 概述 Prometheus 是一套开源的系统监控报警框架.2016 年,Prometheus 正式加入 C ...

  6. Markdown高级使用之流程图

    流程图在Markdown中的的表现形式就是代码块,代码块语言标记为mermaid.主要内容大体分为:方向.节点.节点间的连接关系,下面就围绕这三个点来整理. mermaid支持流程图.甘特图和时序图, ...

  7. Above the Median

    http://www.forioi.com/p/3212 农夫约翰把他的N(1<=N<=1e5)奶牛排在一排来衡量他们的高度,牛i有:高度H_I(1<=H_I<=1e9)纳米– ...

  8. 腾讯IOT安卓开发初探

    目录 腾讯IOT 安卓开发初探 Tecent IOT 开发平台的使用 新建项目 创建产品 添加自定义功能 设备开发 微信小程序配置 面板配置 新建设备 使用设备 安卓开发 前置配置 data.json ...

  9. mysql performance storage engine

    mysql performance storage engine 概要 mysql的运行时状态记录的存储引擎,实现了PSI(Performance Storage Interface) 通过WITH_ ...

  10. Apache伪静态(Rewrite).htaccess文件详解

    Htaccess(超文本访问)是一个简单的配置文件,它允许设计师,开发者和程序员通过它来改变Apache Web服务器的配置.这些功能包括用户重定向.URL重写(url rewrite,国内很多称为伪 ...