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中的from..import绝对导入语句
Jun 21 Python
Python实现将sqlite数据库导出转成Excel(xls)表的方法
Jul 17 Python
Python数据结构之图的应用示例
May 11 Python
对python中的argv和argc使用详解
Dec 15 Python
[机器视觉]使用python自动识别验证码详解
May 16 Python
python 实现将Numpy数组保存为图像
Jan 09 Python
基于Python获取照片的GPS位置信息
Jan 20 Python
Python HTMLTestRunner测试报告view按钮失效解决方案
May 25 Python
Python远程方法调用实现过程解析
Jul 28 Python
Python在后台自动解压各种压缩文件的实现方法
Nov 10 Python
Django利用AJAX技术实现博文实时搜索
May 06 Python
Python socket如何解析HTTP请求内容
Feb 12 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 mysql索引问题
2008/06/07 PHP
PHP 用数组降低程序的时间复杂度
2009/12/04 PHP
在PHP中PDO解决中文乱码问题的一些补充
2010/09/06 PHP
php图片处理:加水印、缩略图的实现(自定义函数:watermark、thumbnail)
2010/12/02 PHP
php使用标签替换的方式生成静态页面
2015/05/21 PHP
jQuery 行级解析读取XML文件(附源码)
2009/10/12 Javascript
javascript prototype原型操作笔记
2009/12/07 Javascript
使用jQuery.wechat构建微信WEB应用
2014/10/09 Javascript
Angularjs编写KindEditor,UEidtor,jQuery指令
2015/01/28 Javascript
JavaScript实现添加、查找、删除元素
2015/07/02 Javascript
JS实现alert中显示换行的方法
2015/12/17 Javascript
jQuery操作属性和样式详解
2016/04/13 Javascript
jQuery模仿京东/天猫商品左侧分类导航菜单效果
2016/06/29 Javascript
Bootstrap Modal对话框如何在关闭时触发事件
2016/12/02 Javascript
js实现自定义路由
2017/02/04 Javascript
使用JavaScript实现链表的数据结构的代码
2017/08/02 Javascript
Vue循环组件加validate多表单验证的实例
2018/09/18 Javascript
vue axios重复点击取消上一次请求封装的方法
2019/06/19 Javascript
Python基于Tkinter实现的记事本实例
2015/06/17 Python
Python读写txt文本文件的操作方法全解析
2016/06/26 Python
Python tkinter label 更新方法
2018/10/11 Python
对python:print打印时加u的含义详解
2018/12/15 Python
Django框架登录加上验证码校验实现验证功能示例
2019/05/23 Python
python基于socket进行端口转发实现后门隐藏的示例
2019/07/25 Python
python下载库的步骤方法
2019/10/12 Python
python实现发送带附件的邮件代码分享
2020/09/22 Python
Ticketmaster德国票务网站:购买音乐会和体育等门票
2016/11/14 全球购物
函授本科毕业自我鉴定
2013/10/09 职场文书
圆明园纪录片观后感
2015/06/03 职场文书
学生会干部任命书
2015/09/21 职场文书
小学体育课教学反思
2016/02/16 职场文书
详解JS WebSocket断开原因和心跳机制
2021/05/07 Javascript
Python Pandas模块实现数据的统计分析的方法
2021/06/24 Python
基于Python实现股票收益率分析
2022/04/02 Python
TV动画《八十龟酱观察日记》第四季宣传PV公布
2022/04/06 日漫
Java 写一个简单的图书管理系统
2022/04/26 Java/Android