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 相关文章推荐
解读Django框架中的低层次缓存API
Jul 24 Python
python的socket编程入门
Jan 29 Python
python实现简单日期工具类
Apr 24 Python
Python检测数据类型的方法总结
May 20 Python
对Python中TKinter模块中的Label组件实例详解
Jun 14 Python
python面向对象 反射原理解析
Aug 12 Python
基于Python数据分析之pandas统计分析
Mar 03 Python
Pycharm IDE的安装和使用教程详解
Apr 30 Python
python怎么提高计算速度
Jun 11 Python
使用python对excel表格处理的一些小功能
Jan 25 Python
只用Python就可以制作的简单词云
Jun 07 Python
Python制作动态字符画的源码
Aug 04 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图片处理之图片背景、画布操作
2014/11/19 PHP
php array_merge函数使用需要注意的一个问题
2015/03/30 PHP
php上传excel表格并获取数据
2017/04/27 PHP
javascript面向对象包装类Class封装类库剖析
2013/01/24 Javascript
从js向Action传中文参数出现乱码问题的解决方法
2013/12/29 Javascript
ie8本地图片上传预览示例代码
2014/01/12 Javascript
自定义jquery模态窗口插件无法在顶层窗口显示问题
2014/05/29 Javascript
js中的事件捕捉模型与冒泡模型实例分析
2015/01/10 Javascript
Javascript 完美运动框架(逐行分析代码,让你轻松了运动的原理)
2015/01/23 Javascript
js实现TAB切换对应不同颜色的代码
2015/08/31 Javascript
基于jQuery Bar Indicator 插件实现进度条展示效果
2015/09/30 Javascript
jQuery中show与hide方法用法示例
2016/09/16 Javascript
d3.js入门教程之数据绑定详解
2017/04/28 Javascript
angularJS实现动态添加,删除div方法
2018/02/27 Javascript
微信小程序实现工作时间段选择
2019/02/15 Javascript
JS中min函数实例讲解
2019/02/18 Javascript
bootstrap-table+treegrid实现树形表格
2019/07/26 Javascript
vue中使用v-model完成组件间的通信
2019/08/22 Javascript
vue draggable resizable gorkys与v-chart使用与总结
2019/09/05 Javascript
js神秘的电报密码 哈弗曼编码实现
2019/09/10 Javascript
使用Python导出Excel图表以及导出为图片的方法
2015/11/07 Python
对python 生成拼接xml报文的示例详解
2018/12/28 Python
Python File(文件) 方法整理
2019/02/18 Python
python并发编程多进程 模拟抢票实现过程
2019/08/20 Python
Python pandas RFM模型应用实例详解
2019/11/20 Python
python软件测试Jmeter性能测试JDBC Request(结合数据库)的使用详解
2021/01/26 Python
教师校本培训方案
2014/02/26 职场文书
新春寄语大全
2014/04/09 职场文书
作风年建设汇报材料
2014/08/14 职场文书
成本会计实训报告
2014/11/05 职场文书
大学同学聚会感言
2015/07/30 职场文书
安全教育日主题班会
2015/08/13 职场文书
2016年“六一儿童节”校园广播稿
2015/12/17 职场文书
人身损害赔偿协议书
2016/03/22 职场文书
Python进度条的使用
2021/05/17 Python
详解OpenCV曝光融合
2022/04/29 Python