扎实基础深入篇(六):while循环带动生产力

在本篇博客中,你将学习如何让程序不断地运行,让用户能够根据需要输入信息,并在程序中使用这些信息。

为此,你需要使用wile循环让程序不断地运行,直到指定的条件不满足为止。

注意:在学习循环的路上,一定要学会刹车!

在进入本篇博客学习之前,我们需要解决一下上篇博客留下来的作业:

创建一个名为cities的字典,其中将三个城市名用作键,对于每个城市的所属省份、人口数、是否为省会等等创建一个字典作为值。

然后以更为直观的形式打印出这些信息在输出窗口。

cities = {
    "咸宁": {
        '省份': '湖北',
        '人口': 6158080,
        '省会': '武汉',
        },
    "宁波": {
        '省份': '浙江',
        '人口': 11760024,
        '省会': '杭州',
        },
    '宝鸡': {
        '省份': '陕西',
        '人口': 1003285,
        '省会': '西安',
        }
    }

for city, city_info in cities.items():
    shenfen = city_info['省份']
    renkou = city_info['人口']
    shenghui = city_info['省会']

    print("
" + city+ " is in " + shenfen + ".")
    print("  这座城市的人口有 " + str(renkou) + "人.")
    print("  他所处省份的省会是"+shenghui+".")

输出结果:

咸宁 is in 湖北.
  这座城市的人口有 6158080人.
  他所处省份的省会是武汉.

宁波 is in 浙江.
  这座城市的人口有 11760024人.
  他所处省份的省会是杭州.

宝鸡 is in 陕西.
  这座城市的人口有 1003285人.
  他所处省份的省会是西安.

在学习while之前,我们应该接触过input的相关知识,为了更好地学习后面的while循环,我将快速介绍一下input()的知识:

一.input()

概念:函数input()让程序暂停,等待用户输入一些文本。获取用户输入后,Python将其存储在一个变量中。

message=input("请告诉我,你想说什么:")
print(message)

输出情况(加粗的部分是键盘输入的内容):

请告诉我,你想说什么:我最帅
我最帅

使用函数input()编写一个清晰的程序:

message=input("请告诉我,你想说什么:")
a="我听到你说:
"+message
print(a)

输出情况(加粗的部分是键盘输入的内容):

请告诉我,你想说什么:你是猪
我听到你说:
你是猪

如果提示过长的时候,应该怎么处理?例:

message=input("尊敬的客户你好,由于本次服务通道出现异常,我们不得不关闭本次系统,现只能转人工服务,你愿意留下你的电话吗:")

可以看到,提示用户输入的语句过长,这让代码不够好看,在系统中也展现不直观,所以采用的方法应该是:

将提示输入的语句存储到一个变量中,使用换行符号:

tips="尊敬的客户你好,由于本次服务通道出现异常,我们不得不关闭本次系统,"
tips+="
现只能转人工服务,你愿意留下你的电话吗:"
message=input(tips)
print(message)

输出结果(加粗的部分是键盘输入的内容):

尊敬的客户你好,由于本次服务通道出现异常,我们不得不关闭本次系统,
现只能转人工服务,你愿意留下你的电话吗:123456789
123456789

处理输入的数据学会使用int()转换

在python3中,使用input()函数输入的任何东西都是字符串类型,其中不乏数字,善用int()进行转换:

math=input("请输入一个数字让系统计算它的平方数:")
value=int(math)**2
print("转换后的平方数为:",value)

输出结果(加粗的部分是键盘输入的内容):

请输入一个数字让系统计算它的平方数:9
转换后的平方数为: 81

虽然我们学习的是python3,但市场上很多项目还是pyton2,我们需要了解到关于python2的input(),有什么不同:

在python2中,提示用户输入的应该使用raw_input(),都被转为字符串类型。

如果你直接输入input()获取用户输入,python2会解读为python代码,所以往往会报错。

二.while循环

(1).while的基础

①不会刹车的司机不是好司机

在使用while循环的时候,新手程序员常常喜欢一写完while就去运行,往往不可避免进入无限循环的可能,

导致终端在一直快速打印造成程序崩溃。

当你不幸陷入无限循环的时候,若不考虑损失,建议直接关闭编辑器,此方法最为直接迅速。

也可以按Ctrl+C终止,也可以关掉显示程序输出的终端窗口

所以在使用while的时候,一定要善于设置循环的条件,套上一个限制,彻底对无限循环的可能斩草除根。

②让用户选择何时退出

现在来一段极为简单的循环示例:

num=0
while num<5:
    print(num)
    num+=1

输出结果:

0
1
2
3
4

解释:设置num的初始值0,然后在while门口,发现num的值<5,满足条件获取进入资格,然后按照里面的代码办事,出来时num已经变成了1,

这时候,while彷佛有一种魔力,又像梦境的轮回一样,也没有任何的东西阻止它,于是自行开启了月光宝盒,

再次回到了while的门口,发现它依旧小于5,于是又进去了,反反复复地轮回。

直到当它的值成了5,回到while的门口时,发现不再满足进入的条件,这时候梦醒了。

在下面的博客中,不再对while代码进行解释,请大家自行努力理解!

现在实现一个简单的复读机,当输入退出复读机时退出程序:

message=input("来试试复读机吧!说出你想说的话:
")
while message != "退出复读机":
    print(message)
    message=input("来试试复读机吧!说出你想说的话:
")

输出结果(加粗的部分是键盘输入的内容):

来试试复读机吧!说出你想说的话:
我真帅
我真帅
来试试复读机吧!说出你想说的话:
你真丑
你真丑
来试试复读机吧!说出你想说的话:
我真没
我真没
来试试复读机吧!说出你想说的话:
退出复读机

③在循环中使用continue

在使用while循环的过程中,有些被循环出来的条件是特殊条件,那么此时你也想做特殊处理,

使用continue能够让你实现特殊处理的过程,并再回到while,并不影响循环的进行。

实现一个简单的while让你更加了解continue:

num=0
while num<5:
    print(num)
    if num==3:
        print("3刚好是我最喜欢的数字!")
        continue
    num+=1

输出结果:

0
1
2
3

3刚好是我最喜欢的数字!

3刚好是我最喜欢的数字!

3刚好是我最喜欢的数字!

无限循环!!!!!!

什么?示例代码都弄成无限循环了,那还教个P!

不着急,这是很多新手写while代码时百分之90都会遇到的误区,并没有彻底理解continue的作用。

我在上面加粗了一段话,这段话非常重要:

当你执行continue的时候,要知道,它是直接回到了while,而直接无视了剩下的代码,恰好剩下的代码对循环极为重要,

在上面的示例代码中,对3进行continue处理后,它错过了num+=1的代码,直接回到了while,造成无限循环,一直停留在3。

正确的示例:

num=0
while num<5:
    print(num)
    if num==3:
        print("3刚好是我最喜欢的数字!")
        num+=1
        continue
    num+=1

输出结果:

0
1
2
3
3刚好是我最喜欢的数字!
4

希望大家通过一错一对的代码示范加深对continue的理解。

 

④使用break退出循环

有了上面的continue教学之后,再来理解break就不难了:

break也可以说是特殊处理的手段,但是特殊处理之后,直接退出了while循环。

不多说,还是一样的示例来理解:

num=0
while num<5:
    print(num)
    if num==3:
        print("晦气,这是我最讨厌的数字,我走了!")
        num+=1
        break
    num+=1

输出结果:

0
1
2
3
晦气,这是我最讨厌的数字,我走了!

(2).while来处理列表和字典

①在列表之间移动元素

我们知道,对于布尔表达式来说,空列表,空元组,空集合等空值,都是False。

如果一个列表list_1含有元素,它的布尔值是True,那么while list_1是不是就是while True,

那么,如果这个列表突然变成了空列表,while list_1是不是变成了while False,循环就终止了?

从这个思路出发,我们有下列代码实现:

print("公司给出了一批游戏测试名单,要求你全部测试一遍。")
print("这些游戏是穿越火线,QQ飞车,英雄联盟,地下城与勇士,枪火游侠。")
game_list=['穿越火线','QQ飞车','英雄联盟','地下城与勇士','枪火游侠']
finish_list=[]
while game_list:
    game=game_list.pop(0)
    print("现在你要测试的游戏是:",game)
    state=input("你正在测试中……测试完毕时请按回车")
    print(game,"测试完毕,请进入下一个游戏")
    game=game+"已测试完毕"
    finish_list.append(game)
print(finish_list)

输出结果:
公司给出了一批游戏测试名单,要求你全部测试一遍。
这些游戏是穿越火线,QQ飞车,英雄联盟,地下城与勇士,枪火游侠。
现在你要测试的游戏是: 穿越火线
你正在测试中……测试完毕时请按回车
穿越火线 测试完毕,请进入下一个游戏
现在你要测试的游戏是: QQ飞车
你正在测试中……测试完毕时请按回车
QQ飞车 测试完毕,请进入下一个游戏
现在你要测试的游戏是: 英雄联盟
你正在测试中……测试完毕时请按回车
英雄联盟 测试完毕,请进入下一个游戏
现在你要测试的游戏是: 地下城与勇士
你正在测试中……测试完毕时请按回车
地下城与勇士 测试完毕,请进入下一个游戏
现在你要测试的游戏是: 枪火游侠
你正在测试中……测试完毕时请按回车
枪火游侠 测试完毕,请进入下一个游戏
['穿越火线已测试完毕', 'QQ飞车已测试完毕', '英雄联盟已测试完毕', '地下城与勇士已测试完毕', '枪火游侠已测试完毕']

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

本次示例代码结合了上期博客所讲到的知识点,能够起到复习巩固的作用:

responses={}

#设置一个标志,指出调查是否继续
polling_active=True
while polling_active:
    #提示输入被调查者的名字和回答
    name=input("
你的名字是什么?")
    response=input("你最喜欢的游戏是什么?")
    #将答卷存储在字典中
    responses[name]=response

    #看看是否还能有人参与调查
    repeat=input("你愿意另一个人来回答问题吗?")
    if repeat =="no":
        polling_active=False
#调查结束,显示结果
print
for name,response in responses.items():
    print(name+"最喜欢的游戏是:"+response+".")

输出结果(加粗的部分是键盘输入的内容):

你的名字是什么?master
你最喜欢的游戏是什么?穿越火线
你愿意另一个人来回答问题吗?yes

你的名字是什么?paopao
你最喜欢的游戏是什么?QQ宠物
你愿意另一个人来回答问题吗?no

master最喜欢的游戏是:穿越火线.
paopao最喜欢的游戏是:QQ宠物.

本篇博客的内容就到这,布置的作业也非常简单:

编写一个三种没完没了的循环,并写出造成循环的原因,并学会终止无限循环的手段。

在往后的博客中,将会讲到函数,类,对象等知识,当你看到这句话时,代表你有着决定入门python决心....

只是作者会在很久以后再更新了,因为我也要去学习,当我彻底掌握函数和类等基础知识的时候,我会再次归来。

建议你们每过一段时间就复习以往所有博客,确保把这些基础知识变成长期记忆。

原文地址:https://www.cnblogs.com/Masterpaopao/p/10332049.html