第7章 用户输入和while循环

  • 我们设计的程序大多是为了解决用户最终的问题,所以我们大多需要在用户那里获取一些信息。
  • 学习用户输入的获取与处理,学习while循环让程序不断运行直到达到指定的条件不满足为止。

7.1 函数input()的工作原理

  • 函数input()让程序暂停,等待用户输入一些文本。
  • 获取用户输入后将其存储在一个变量中,方便对其的使用。
  • 函数input()只接受一个参数:即要想用户显示的提示或者说明,让用户知道该如何做。
Name = input('请输入您的姓名: ')
print(Name)

输出结果为:

请输入您的姓名: 饶庆龙
饶庆龙

7.1.1 编写清晰的程序

  • 每当你使用input()函数,都应指定清晰易于明白的提示,准确的指出你希望用户输入的信息。
  • 通过末尾(冒号后面)包含一个空格,可以将提示与用户输入分开,让用户清楚的知道输入何处。
  • 当提示可能超过一行,在这种情况下你可以将提示存储在一个变量中,再将该变量传给函数input(),这样可以更加清晰。
Tishi = '春眠不觉晓,处处闻啼鸟。\n夜来风雨声,花落知多少。\n'
Tishi += '我们来玩一个游戏吧!游戏的名字叫做看诗猜名。\n请输入您觉得正确的诗名: '
Caice = input(Tishi)
if Caice == '春晓':
print('恭喜您回答正确。')
else:
print('不好意思,输入错误!再加油哟!')

输出的结果为:

春眠不觉晓,处处闻啼鸟。
夜来风雨声,花落知多少。
我们来玩一个游戏吧!游戏的名字叫做看诗猜名。
请输入您觉得正确的诗名: 唐诗
不好意思,输入错误!再加油哟!

  • 第1行 我们创建了第一个提示就是一首完整的诗。
  • 第2行 我们是运算符 += 将第1行和第2行的两个字符串进行拼接。
  • 第3行 调用input函数将Tishi的内容传参进去,这样提示的内容完整清晰,用户很轻易的知道自己要输入的信息。
  • 第4行 调用if条件测试 测试用户传进来的参数是否 字符串 春晓
  • 第5行 如果第4行的条检测试通过,执行输出操作
  • 第6行 如果第4行的条件测试未通过,执行else语块下第7行的操作。

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

  • 使用input函数时,python将用户输入解读为字符串。
  • 为解决这个问题,可使用函数int()让他将python输入内容转换为整数。
  • 将数值输入用于比较和计算前,务必将去转换为数值表示。
age = input('请输入您的年龄(整数): ')
print(type(age))
age = int(age)
print(type(age))
if age < 18:
print('您是未成年!')
else:
print('您已经成年了')

输出结果为:

请输入您的年龄(整数): 18
<class 'str'>
<class 'int'>
您已经成年了
  • 第1行 使用input函数等待用户输出
  • 第2行 打印第一次输入时候输入过后信息的类型,为字符串类型。
  • 第3行 将第1行age使用int函数,转换为整数数值。
  • 第4行 打印新的变量age的类型,为整数类型。
  • 第5行 判断用户输入的数值是否小于18
  • 第6行 如果判断通过,执行改行操作,输出 您是未成年
  • 第7行 判断不通过,执行else语块下 第8行操作 输出 您已经成年了

7.1.3 求模运算符

  • 处理数值信息的时候,求模运算符 % 是一个很有用的工具,将两个整数相除并返回余数。
  • 求模运算符不会支出一个数是另一个数的几倍,而只是指出余数是多少。
  • 判断数值是否是偶数时,可以让一个数与2求余,如果余0则是偶数,余1则是奇数。
Numbers = [ i for i in range(1,10) if i % 2 == 0]
Numbers1 = [ i for i in range(1,10) if i % 2 == 1]
print(Numbers,Numbers1)

输出的结果为:

[2, 4, 6, 8] [1, 3, 5, 7, 9]
  • 第1行 使用列表解析式创建列表Numbers 表示为迭代变量i 在数值1-9范围类 如果能整除2 则存贮为变量i 存储1-9内偶数
  • 第2行 使用列表解析式创建列表Numbers1 表示为迭代变量i 在数值1-9范围类 如果整除2余1 则存贮为变量i 存储1-9内奇数
  • 第3行 输出两个列表

7.1.4 在python2.7中获取输入

  • 在python2.7中使用raw_input()函数来输入,与input函数意义一样,在2.7中最好使用raw_input()来让用户输入。

7.2 while循环简介

  • for循环用于针对集合中的每一个元素都一个代码块,二while循环不断地运行,知道指定的条件不满足为止。

7.2.1 使用while循环

start_number = 1
while start_number <= 5 :
print(start_number)
start_number += 1

输出结果为:

1
2
3
4
5
  • 第1行 我们定义一个变量存贮数值 1
  • 第2行 调用while循环 当变量中的满足条件 变量数值小于等于5时 不断运行
  • 第3行 输出循环的数值
  • 第4行 将循环中的值加1 然后返回到第2行进行判断 当数值不满足小于等于5时循环中断

7.2.2 让用户选择何时退出

Tishi = '请告诉我一些东西,待会我将返回给你。'
Tishi += '\n如果你想退出,可以输入 q 用于退出。\n开始输入: '
message = ''
while message != 'q':
message = input(Tishi)
if message != 'q':
print(message)

输出结果为:

请告诉我一些东西,待会我将返回给你。
如果你想退出,可以输入 q 用于退出。
开始输入: 我是饶庆龙
我是饶庆龙
请告诉我一些东西,待会我将返回给你。
如果你想退出,可以输入 q 用于退出。
开始输入: q
  • while循环的条件我们是对比 message 与 字符 q 是否相等。
  • 因为 message 我们需要在后面输入 前面没由与q比较的内容 所以我们创建一个空字符串 message
  • 当我们输入内容为q时候 进入if语句 因为if语句条件是不等于q时 输出输入内容 所以当我们输入q时 不会进行任何输出
  • 当你输入不等于q的内容 while语句和if语句的条件均会通过,那么我们输入的话,将会被无限循环输出。

7.2.3 使用标志

  • 如果一条while循环要检查多个条件,将即负责又困难。
  • 在要求很多条件满足才能继续进行的程序中,可以定义一个变量,用于判断整个程序是否处于活动状态。这个变量称为标志!
Tishi = '请告诉我一些东西,待会我将返回给你。'
Tishi += '\n如果你想退出,可以输入 q 用于退出。\n开始输入: '
message = ''
active = True
while active:
message = input(Tishi)
if message == 'q':
active = False
else:
print(message)

输出结果为:

请告诉我一些东西,待会我将返回给你。
如果你想退出,可以输入 q 用于退出。
开始输入: 我爱您
我爱您
请告诉我一些东西,待会我将返回给你。
如果你想退出,可以输入 q 用于退出。
开始输入: q
  • 对比7.2.2中代码 我们设置了一个标志变量 active 当触发if语句中的条件 active会被变成False 然后返回到循环中
  • while循环的条件为False时,循环中断。

7.2.4 使用break退出循环

  • 当我们要立即退出while循环,不再运行余下的代码,也不管条件测试的结果如何,可使用break语句。
  • break语句用于控制程序流程,可使用他来控制那些代码执行,那些代码不执行,从而让您的程序按您的要求执行代码。
  • 在任何python循环中都可以使用break来推出循环。
#使用while循环循环1-10内偶数
start_number = 0
#设置条件为True 没有退出机制将会无限循环
while True:
#让初始数值0 循环一次加上1
start_number += 1
#设置退出条件,如果条件被触发,将退出循环。
if start_number > 10:
break
#用if语句判断是否偶数
if start_number % 2 == 0:
print(start_number)
else:
pass

输出的结果为:

2
4
6
8
10
  • 开始循环初始数值是0 进入第一步+1 变成数值1
  • 判断是否大于10 不通过下一步 判断是否能整除2
  • 能整除通过,输出该数字。
  • 不能通过则不进行任何操作,使用pass占位符
  • 当最后一次输出10的时候,再进循环+1 这个时候数值变为11
  • 当数值为11 满足大于10条件 触发break语句 中断循环

7.2.5 再循环中使用continue

  • 返回到循环的开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句。
  • 它只是中断当前循环返回循环的开头。
 #使用while循环循环1-10内奇数
start_number = 0
#设置条件为True 没有退出机制将会无限循环
while True:
#让初始数值0 循环一次加上1
start_number += 1
#设置退出条件,如果条件被触发,将退出循环。
if start_number > 10:
break
#用if语句判断是否偶数,是偶数则使用continue语句返回到第4行重新开始循环
if start_number % 2 == 0:
continue
else:
print(start_number)

输出结果为:

1
3
5
7
9

7.2.6 避免无限循环

  • 每个while循环都必须有停止的途径,这样才不会没玩的执行下去。
  • 如果程序陷入无限循环,可按ctrl+c,也可以关闭显示程序的终端窗口。
  • 务必检查循环的条件以及包含语块的设计,避免无意义的死循环。
  • 数值循环中,很多可能因为忘记变更数字以及数字变更的位置错误导致死循环。

练习:

#7-4 披萨配料
#将提示存储到一个变量中方便后面调用
Tishi = '请输入您要添加的配料,\n输入 q 以退出,\n请在此输入: '
#构建while循环
while True:
#等待用户输入信息
ingredients = input(Tishi)
#判断用户输入信息是否字符 q 如果是则触发break语句 退出循环
if ingredients == 'q':
break
#如果没有触发退出机制,则执行输出
else:
print('我们会在披萨中添加 '+ingredients+' 这种配料')

输出结果为:

请输入您要添加的配料,
输入 q 以退出,
请在此输入: 芝士
我们会在披萨中添加 芝士 这种配料
请输入您要添加的配料,
输入 q 以退出,
请在此输入: q
#7-5电影票
'''
age <3 0
age >= 3 and age <= 12 10
age > 12 15
'''
while True:
age = input('请输入您的年龄:')
age = int(age)
if age <3 :
print('您无需支付任何费用。')
elif age >= 3 and age <= 12 :
print('您需要支付10美元!')
elif age > 12 :
print('您需要支付15美元!')

输出结果为:

请输入您的年龄:2
您无需支付任何费用。
请输入您的年龄:7
您需要支付10美元!
请输入您的年龄:15
您需要支付15美元!
请输入您的年龄:
 #7-5电影票
'''
age <3 0
age >= 3 and age <= 12 10
age > 12 15
'''
active = True
while active:
age = input('请输入您的年龄,\n输入 q 退出,\n请在此处输入:')
if age == 'q':
active = False
continue
new_age = int(age)
if new_age <3 :
print('您无需支付任何费用。')
elif new_age >= 3 and new_age <= 12 :
print('您需要支付10美元!')
elif new_age > 12 :
print('您需要支付15美元!')
  • 这个地方我要讲下我自己的错误,试了几次之前把 第10行-第12行代码块放到了 第13行后面 程序一直报错
  • 我们要注意同级别代码是按顺序执行的,如果先执行第13行 那么我们输入的 q 是无法转换为数值的,所以会报错。
  • 更改顺序后,可以使用break 也可以先将标志改为False然后使用continue将active新值带回到循环开头,这样循环就结束了。
  • 如果不使用continue或者break语句,我们还将执行第13行,将输入内容转换为数值,而这个是我们要避免的。
  • 也可以使用if嵌套的模式。

输出结果为:

请输入您的年龄,
输入 q 退出,
请在此处输入:2
您无需支付任何费用。
请输入您的年龄,
输入 q 退出,
请在此处输入:q

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

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

7.3.1 在列表之间移动元素

 #创建一个有元素的未接受检查的用户列表
unconfirmed_users = ['令狐冲','任我行','任盈盈']
#创建一个空列表用于添加已经接受了检查的用户
confirmed_users = []
#使用while循环 循环列表 当列表为空 循环条件为False 循环终止
while unconfirmed_users:
#创建一个变量接受用pop方法在为接受检查列表末尾弹出的元素
confirmed_user = unconfirmed_users.pop()
#输出 接受检查用户:和刚才接受的变量
print('接受检查用户: '+confirmed_user)
#将变量添加到接受检查列表的末尾
confirmed_users.append(confirmed_user)
#当未接受检查列表为空时,循环结束,执行输出操作 以下用户接受了检查
print('以下用户接受了检查:')
#使用for循环换行打印出接受检查列表的每个元素
for user in confirmed_users:
print(user)

输出结果为:

接受检查用户: 任盈盈
接受检查用户: 任我行
接受检查用户: 令狐冲
以下用户接受了检查:
任盈盈
任我行
令狐冲

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

  • 使用remove函数来删除列表中的特定值。
  • 使用while循环,条件设置为查看特定值是否在列表中,如果在执行删除命令。
#创建一个数值列表,其中有多个重复数值1
Numbers = [1,6,7,5,4,1,3,5,1,8,1]
#使用while循环 条件为1在列表中
while 1 in Numbers:
Numbers.remove(1)
#输出删除 数值1的列表并且给他来个倒序
Numbers.sort(reverse=True)
print(Numbers)

输出结果为:

[8, 7, 6, 5, 5, 4, 3]

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

  • 首先我们创建一个空字典。
  • 然后将用户输入的信息分为针对键 的输入,针对 值得输入,然后使用创建字典的方法将组合的键值对添加到字典中。
  • 不过有一个问题,键是唯一的,如果名字重复了怎么办?这个问题我们需要考虑哈。
#创建一个空字典,方便后面的用户输入信息录入字典
love_team = {}
#设置激活标志
active = True
#使用while循环
while active:
#获取用户的姓名和喜爱球队分别存储到对应的变量中
name = input('请输入您的姓名: ')
team = input('您最喜欢的英超球队是: ')
#将用户的姓名作为键,喜爱的球队作为值,往空字典中加入键值对
love_team[name] = team
#询问是否还有人参与测试
repeat = input('您是否想让朋友参加此次测试:(yes/no)')
#设置if语句当没有的时候将激活标志变为False终止循环
if repeat == 'no':
active = False
print('\n---最终结果---')
#遍历循环后的字典,并且输出
for name,team in love_team.items():
print(name+'最喜欢的英超队伍是: '+team)

输出结果为:

请输入您的姓名: 任我行
您最喜欢的英超球队是: 曼城
您是否想让朋友参加此次测试:(yes/no)yes
请输入您的姓名: 令狐冲
您最喜欢的英超球队是: 曼联
您是否想让朋友参加此次测试:(yes/no)yes
请输入您的姓名: 任盈盈
您最喜欢的英超球队是: 狼队
您是否想让朋友参加此次测试:(yes/no)no ---最终结果---
任我行最喜欢的英超队伍是: 曼城
令狐冲最喜欢的英超队伍是: 曼联
任盈盈最喜欢的英超队伍是: 狼队

联系:

 #7-8熟食店
#创建一个点单的三明治列表
sandwich_orders = ['Tuna sandwich','Ham cheese sandwich','Potato salad sandwich']
#创建一个已经做成功的三明治列表
sandwich_finished = []
while sandwich_orders:
sandwich = sandwich_orders.pop()
print('我已经做好了您的 '+sandwich)
sandwich_finished.append(sandwich)
print('您的三明治都做好了,名单如下:')
for sandwich in sandwich_finished:
print(sandwich)

输出的结果为:

我已经做好了您的 Potato salad sandwich
我已经做好了您的 Ham cheese sandwich
我已经做好了您的 Tuna sandwich
您的三明治都做好了,名单如下:
Potato salad sandwich
Ham cheese sandwich
Tuna sandwich
#7-9 五香熏牛肉
sandwich_orders = ['Tuna sandwich','pastrami','Ham cheese sandwich','pastrami','Potato salad sandwich','pastrami','pastrami']
while 'pastrami' in sandwich_orders:
sandwich_orders.remove('pastrami')
print('pastrami 已经卖完了。')
print('还剩下以下食品供您选择:')
for sandwich in sandwich_orders:
print(sandwich)

输出的结果为:

pastrami 已经卖完了。
还剩下以下食品供您选择:
Tuna sandwich
Ham cheese sandwich
Potato salad sandwich
#7-10 梦想的独家圣地
like_places = {}
active = True
while active:
name = input('请输入您的姓名: ')
place = input('您最想去的地方:')
like_places[name] = place
repeat = input('您是否想让您的朋友参加此次测试:(yes/no)')
if repeat == 'no':
active = False
print('\n---测试结果---')
for name,place in like_places.items():
print(name+'最想去的地方是: '+place)

输出的结果为:

请输入您的姓名: 任我行
您最想去的地方:非洲
您是否想让您的朋友参加此次测试:(yes/no)yes
请输入您的姓名: 令狐冲
您最想去的地方:欧洲
您是否想让您的朋友参加此次测试:(yes/no)yes
请输入您的姓名: 任盈盈
您最想去的地方:中国
您是否想让您的朋友参加此次测试:(yes/no)no ---测试结果---
任我行最想去的地方是: 非洲
令狐冲最想去的地方是: 欧洲
任盈盈最想去的地方是: 中国

python自学Day06(自学书籍python编程从入门到实践)的更多相关文章

  1. 《Python编程:从入门到实践》分享下载

    书籍信息 书名:<Python编程:从入门到实践> 原作名:Python Crash Course 作者: [美] 埃里克·马瑟斯 豆瓣评分:9.1分(2534人评价) 内容简介 本书是一 ...

  2. 《python编程从入门到实践》2.3字符串

    书籍<python编程从入门到实践> 2.3字符串 知识模块 print()函数,函数名称突出为蓝色,输出括号内的变量或者字符创. 变量名的命名:尽量小写字母加下划线并且具有良好的描述性, ...

  3. Python编程从入门到实践笔记——异常和存储数据

    Python编程从入门到实践笔记——异常和存储数据 #coding=gbk #Python编程从入门到实践笔记——异常和存储数据 #10.3异常 #Python使用被称为异常的特殊对象来管理程序执行期 ...

  4. Python编程从入门到实践笔记——文件

    Python编程从入门到实践笔记——文件 #coding=gbk #Python编程从入门到实践笔记——文件 #10.1从文件中读取数据 #1.读取整个文件 file_name = 'pi_digit ...

  5. Python编程从入门到实践笔记——类

    Python编程从入门到实践笔记——类 #coding=gbk #Python编程从入门到实践笔记——类 #9.1创建和使用类 #1.创建Dog类 class Dog():#类名首字母大写 " ...

  6. Python编程从入门到实践笔记——函数

    Python编程从入门到实践笔记——函数 #coding=gbk #Python编程从入门到实践笔记——函数 #8.1定义函数 def 函数名(形参): # [缩进]注释+函数体 #1.向函数传递信息 ...

  7. Python编程从入门到实践笔记——用户输入和while循环

    Python编程从入门到实践笔记——用户输入和while循环 #coding=utf-8 #函数input()让程序暂停运行,等待用户输入一些文本.得到用户的输入以后将其存储在一个变量中,方便后续使用 ...

  8. Python编程从入门到实践笔记——字典

    Python编程从入门到实践笔记——字典 #coding=utf-8 #字典--放在{}中的键值对:跟json很像 #键和值之间用:分隔:键值对之间用,分隔 alien_0 = {'color':'g ...

  9. Python编程从入门到实践笔记——if语句

    Python编程从入门到实践笔记——if语句 #coding=utf-8 cars=['bwm','audi','toyota','subaru','maserati'] bicycles = [&q ...

  10. Python编程从入门到实践笔记——操作列表

    Python编程从入门到实践笔记——操作列表 #coding=utf-8 magicians = ['alice','david','carolina'] #遍历整个列表 for magician i ...

随机推荐

  1. 关于jquery 项目中文件上传还有图片上传功能的尴尬???

    做项目需要兼容IE8,所以找了好久,都没找到合适的希望有大神能够解惑!!! 要求是兼容IE8,在选完图片直接自动上传,有进度展示,并有成功的标记,下面的选择文件也是一个input file 选择完自动 ...

  2. 「雕爷学编程」Arduino动手做(34)——三色LED交通灯模块

    37款传感器与模块的提法,在网络上广泛流传,其实Arduino能够兼容的传感器模块肯定是不止37种的.鉴于本人手头积累了一些传感器和模块,依照实践出真知(一定要动手做)的理念,以学习和交流为目的,这里 ...

  3. 移动端布局的一些设置(在viewport里设置使页面显示相同宽度,显示相同像素大小)

    viewport(视口) 具体数值(不设置时默认为980 ,部分安卓手机不支持设置成具体数值) width=device-width 和设备宽度保持一致 user-scalable=no 是否允许用户 ...

  4. P4526 【模板】自适应辛普森法2

    P4526 [模板]自适应辛普森法2 #include <bits/stdc++.h> using namespace std; ; double a; inline double f(d ...

  5. elment新增el-select的全选功能

    不废话,效果如图 代码实现 平生不爱啰嗦,功能如上已实现.

  6. Java常用设计模式详解1--单例模式

    单例模式:指一个类有且仅有一个实例 由于单例模式只允许有一个实例,所以单例类就不可通过new来创建,而所有对象都默认有一个无参的构造函数可以创建对象,所以单例类不仅不能提供public的构造方法,还需 ...

  7. hdu6005找带权最小环

    题意:给你点和边,让你找最小环的权值,其权值是所有边权的和,没环输出-1. 解法:枚举每一条边,找到其端点,做最短路.. #include<cstdio> #include<cstr ...

  8. CF838A

    题目链接:http://codeforces.com/contest/838/problem/A 知识点: (void) 题目大意: 给一个 \(n \times m\) 的 01 矩阵,对于矩阵在 ...

  9. Understanding closures in depth

    什么是闭包 维基百科中的概念 在计算机科学中,闭包(英语:Closure),又称词法闭包(Lexical Closure)或函数闭包(function closures),是在支持头等函数的编程语言中 ...

  10. 还不会K8S吗?先从kubeadm开始吧

    目录 1. 准备工作 1.1 机器准备 1.2 系统配置 1.2.1 主机名及域名解析 1.2.2 免密登录 1.2.3 配置yum源 1.2.4 安装必要依赖包 1.2.5 关闭防火墙.SELinu ...