Python 用户输入和while循环的操作


Posted in Python onMay 23, 2021

函数input()的工作原理

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

prompt="if you tell us who you are , we can personlize the message you see."
prompt+="\nWhat is your first name?"
name=input(prompt)
print("\nHello, "+name+"!")

if you tell us who you are , we can personlize the message you see.
What is your first name?Eric

Hello, Eric!

这个示例演示了一种创建多行字符串的方式。第1行将消息的前半部分存储在变量prompt中;在第2行中,运算符+=在存储在prompt中的字符串末尾附加一个字符串。

While循环简介

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

使用while循环

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

1
2
3
4
5

在第一行,我们将current_number设置为1,从而指定从1开始数。接下来的while循环被设置成这样:只要current_number小雨或等于5,就接着运行这个循环。循环中代码打印current_number的值,在使用current_number+=1(current_number=current_number+1)将其值加1。

只要满足条件current_number<=5,python就接着运行这个程序。

让用户选择何时退出

可用while循环让程序在用户愿意时不断地运行。

prompt="\nTell me something,and I will repeat it back to you:"
prompt+="\nEnter 'quit' to end the program."
message=""
while message !='quit':
    message=input(prompt)
    if message !='quit':
        print(message)

Tell me something,and I will repeat it back to you:
Enter 'quit' to end the program.hi
hi

Tell me something,and I will repeat it back to you:
Enter 'quit' to end the program.quit

我们定义了一条提示消息,告诉用户他有两个选择:要么输入一条消息,要么输入退出值。接下来,我们创建了一个变量——message,用于存储用户输入的值。我们将变量message的初始值设置为空字符串“”,让Python首次执行while代码行时有可供检查的东西。Python首次执行while语句时,需要将message的值与quit进行比较,但此时用户还没有输入。如果没有可供比较的东西,Python将无法运行程序。为解决这个问题,我们必须给变量message指定一个初始值。虽然这个初始值只是一个空字符串,但符合要求,让Python能够执行循环while所需的东西。只要循环不是‘quit',这个循环就会不断运行。

使用标志

在前一个示例中,我们让程序在满足指定条件时就执行特定的任务。但在更复杂的程序中,很多不同的事件都会导致程序停止运行;在这种情况下,该怎么办呢?

在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志,充当了程序的交通信号灯。你可让程序在标志为true时继续运行,并在任何事件导致标志的值为False时让程序停止运行。这样,在while语句中,就只需检查一个条件——标志的当前值是否为true,并将所有测试都放在其它地方,从而让程序变得更简洁。

prompt="\nTell me something,and I will repeat it back to you:"
prompt+="\nEnter 'quit' to end the program."

active=True
while active:
    message=input(prompt)

    if message=='quit':
        active=False
    else:
        print(message)

Tell me something,and I will repeat it back to you:
Enter 'quit' to end the program.yes
yes

Tell me something,and I will repeat it back to you:
Enter 'quit' to end the program.quit

我们将变量设置为true,让程序处于活跃状态。这样简化了while语句,因为不需要在其中做任何比较——相关的逻辑由程序的其他部分处理。只要变量active为true,循环就继续这样运行。

在while循环中,我们在用户输入后使用一条if语句来检查变量message的值。如果用户输入的是‘quit',我们就将变量active设置为False,这将导致while循环不再继续下去。如果用户输入的不是‘quit',我们就输入作为一条消息打印出来。

使用break退出循环

要立即退出循环,不再运行循环中余下的代码,也不管测试条件如何,可是用break语句。

prompt="\nTell me something,and I will repeat it back to you:"
prompt+="\nEnter 'quit' to end the program."

while True:
    message=input(prompt)

    if message=='quit':
        break
    else:
        print(message)

在循环中使用continue

要返回到循环开头,并根据测试条件测试结果决定是否继续执行循环,可使用continue语句,它不像break语句那样不在执行余下的代码并退出整个循环。

current_number=0
while current_number<10:
    current_number+=1
    if current_number %2==0:
        continue
    print(current_number)

1
3
5
7
9

我们首先将current_number设置成了0,由于它小于10,Python进入while循环。进入循环后,以步长为1的方式往上数,因此current_number为1。接下来,if语句检查current_number与2的求模运算结果。结果为0,就执行continue语句,让Python忽略余下的代码,并返回循环的开头。如果当前的数字不能被2整除,就执行循环中余下的代码,Python将这个数字打印出来。

在列表之间移动元素

假设有一个列表,其中包含新注册但还未验证的网站用户;验证这些用户后,如何将他们移动到另一个已验证的用户列表中呢?一种办法是使用一个while循环,在验证用户的同时将其从未验证用户列表中提取出来,再将其加入到另一个已验证用户列表中。代码可能类似于下面这样:

# 首先,创建一个待验证用户列表
#和一个用于存储已验证用户的空列表
unconfirmed_users=['alice','brian','candace']
confirmed_users=[]

#验证每个用户,知道没有未验证用户为止
#将每个经过验证的列表都移到已验证用户列表中
while unconfirmed_users:
    current_user=unconfirmed_users.pop()

    print("Verifying user: "+current_user.title())
    confirmed_users.append(current_user)

#显示所有已验证的用户
print("\nThe following users have been confirmed:")
for confirmed_user in confirmed_users:
    print(confirmed_user.title())

Verifying user: Candace
Verifying user: Brian
Verifying user: Alice

The following users have been confirmed:
Candace
Brian
Alice

我们首先创建了一个未验证用户列表,其中包含Alice、Brain、和Candace,还创建了一个空列表,用于存储以验证的用户。While循环不断的运行,直到列表unconfirmed_users变成空的。在这个循环中,函数pop()以每次一个的方式从列表unconfirmed_user末尾删除未验证的用户。由于Candace位于列表unconfirmed_users末尾,因此名字将首先被删除、存储到变量current_user中并加入到列表confirmed_users中。

为模拟用户验证过程,我们打印一条验证消息并将用户加入到已验证用户列表中。未验证用户列表越来越短,已验证用户列表越来越长。未验证列表为空后结束循环,再打印已验证列表。

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

前面我们使用remove()来删除列表中的特定元素,这之所以可行,是因为要删除的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元素,该怎么办呢?

假设你有一个宠物列表,其中包含多个值为‘cat'的元素。要删除所有这些元素,可不断运行一个while循环,直到列表中不再包含值‘cat'.

pets=['dog','cat','dog','goldfish','cat','rabbit','cat']
print(pets)
while 'cat' in pets:
    pets.remove('cat')
print(pets)

['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
['dog', 'dog', 'goldfish', 'rabbit']

使用用户输入来填充字典

可使用while循环提示用户输入任意数量的信息。

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 another person respond?(yes/no)")
    if repeat=='no':
        polling_active=False

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

What is your name?hi
which mountain would you like to climb someday?ko
Would you like to let another person respond?(yes/no)yes

What is your name?ji
which mountain would you like to climb someday?kp
Would you like to let another person respond?(yes/no)no

---Poll Results---
hi would like to climb ko.
ji would like to climb kp.

这个程序首先定义了一个空字典,并设置了一个标志,用于指出调查是否继续。只要polling_active为True,Python就运行while循环中的代码。

在这个循环中,提示用户输入其用户名及其爬那座山。将这些信息存储在字典response中,然后询问用户调查是否继续。如果用户输入yes,程序将再次进入while循环;如果用户输入no,标志polling_active将被设置为False,而while循环就此结束。

补充:python学习笔记——循环退出的几种方式

在这里主要讨论的是while循环,for循环通过迭代对象退出。

由于while循环通常不知道循环的次数,所以对于while循环,它的几种应用场景导致退出条件设置的不同。

一、让用户选择何时退出:定义退出变量

可使用while循环让程序在用户在愿意的时不断运行,在其中定义一个退出值,只要用户输入的不是这个,程序就接着运行。

我们小时候玩游戏的经常会遇到,当人物死亡的时候,界面会跳出 重新开始游戏or结束游戏,结束游戏就相当于我们设置的退出值。

形式如下:

active = True 
while active:
    message = input()
    if message =="quit":
        active = False
    else:
        print(message)

1、active是我们开始就定义的一个while触发器

2、message定义用户输入字符

3、quit是退出条件,若用户输入quit,则active转换属性,下次循环退出。

二、用break退出:当明确遇到某些条件即退出时使用

当程序执行到break,不管后面直接退出循环(而不是if-else模块)。

break主要用于控制if-else语句,可使用ta来控制哪些代码将执行,哪些代码不执行。

prompt = "请输入你曾去过的城市名字(当你不想玩的时候输入'quit'退出程序)"
while True:
    if city == 'quit':
        break
    else:
        print("i'd love to go to"+'city.title()')

三、在循环中使用continue:当循环中需要跳过一些值时使用

当程序执行到continue,直接跳出本次循环,进入下一次循环。

例:从1到10,如果是奇数则输出,偶数则跳过

chuzhi = 0
while chuzhi !=10:
    chuzhi += 1
    if chuzhi%2 ==0:
        continue
    else:
        print(chuzhi)

在遇到continue的时候后面的else不看直接进入下一次while。

以上为个人经验,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Python 相关文章推荐
Python实例之wxpython中Frame使用方法
Jun 09 Python
Python中处理字符串的相关的len()方法的使用简介
May 19 Python
Python网络编程 Python套接字编程
Sep 13 Python
关于Python的一些学习总结
May 25 Python
python实现猜数字小游戏
Mar 24 Python
十个Python练手的实战项目,学会这些Python就基本没问题了(推荐)
Apr 26 Python
Python爬虫 批量爬取下载抖音视频代码实例
Aug 16 Python
python 画出使用分类器得到的决策边界
Aug 21 Python
centos+nginx+uwsgi+Django实现IP+port访问服务器
Nov 15 Python
python 数据分析实现长宽格式的转换
May 18 Python
Python自动化测试中yaml文件读取操作
Aug 20 Python
浅谈对python中if、elif、else的误解
Aug 20 Python
解决Tkinter中button按钮未按却主动执行command函数的问题
May 23 #Python
python tkinter Entry控件的焦点移动操作
May 22 #Python
python3.7.2 tkinter entry框限定输入数字的操作
May 22 #Python
tensorboard 可视化之localhost:6006不显示的解决方案
pytorch训练神经网络爆内存的解决方案
粗暴解决CUDA out of memory的问题
May 22 #Python
pytorch中的model.eval()和BN层的使用
May 22 #Python
You might like
php生成图形验证码几种方法小结
2013/08/15 PHP
smarty模板引擎中内建函数if、elseif和else的使用方法
2015/01/22 PHP
php写入、删除与复制文件的方法
2015/06/20 PHP
使用php从身份证号中获取一系列线索(星座、生肖、生日等)
2016/05/11 PHP
PHP排序算法之简单选择排序(Simple Selection Sort)实例分析
2018/04/20 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
解决 firefox 不支持 document.all的方法
2007/03/12 Javascript
用jQuery简化JavaScript开发分析
2009/02/19 Javascript
基于jquery的内容循环滚动小模块(仿新浪微博未登录首页滚动微博显示)
2011/03/28 Javascript
js解析xml字符串和xml文档实现原理及代码(针对ie与火狐)
2013/02/02 Javascript
jquery动态改变form属性提交表单
2014/06/03 Javascript
webpack打包后直接访问页面图片路径错误的解决方法
2017/06/17 Javascript
bootstrap table方法之expandRow-collapseRow展开或关闭当前行数据
2020/08/09 Javascript
vue-cli3.0 脚手架搭建项目的过程详解
2018/10/19 Javascript
node.js连接mysql与基本用法示例
2019/01/05 Javascript
微信小程序自定义组件实现环形进度条
2020/11/17 Javascript
微信小程序点餐系统开发常见问题汇总
2019/08/06 Javascript
基于javascript实现碰撞检测
2020/03/12 Javascript
Python常用的日期时间处理方法示例
2015/02/08 Python
Python基于回溯法子集树模板解决最佳作业调度问题示例
2017/09/08 Python
Python实现数据可视化看如何监控你的爬虫状态【推荐】
2018/08/10 Python
利用Python库Scapy解析pcap文件的方法
2019/07/23 Python
Python使用configparser库读取配置文件
2020/02/22 Python
不到20行实现Python代码即可制作精美证件照
2020/04/24 Python
python statsmodel的使用
2020/12/21 Python
html5新增的属性和废除的属性简要概述
2013/02/20 HTML / CSS
澳大利亚先进的皮肤和激光诊所购物网站:Soho Skincare
2018/10/15 全球购物
美国尼曼百货官网:Neiman Marcus
2019/09/05 全球购物
双十佳事迹材料
2014/01/29 职场文书
酒店中秋节活动方案
2014/01/31 职场文书
商业活动邀请函
2014/02/04 职场文书
有关花店创业的计划书模板
2019/08/27 职场文书
php7中停止php-fpm服务的方法详解
2021/05/09 PHP
关于React Native使用axios进行网络请求的方法
2021/08/02 Javascript
一文搞清楚MySQL count(*)、count(1)、count(col)区别
2022/03/03 MySQL
Java 获取Word中所有的插入和删除修订的方法
2022/04/06 Java/Android