第七章 用户输入和 while 语句

本文介绍了Python中input()函数的使用,如何从用户获取清晰的输入,以及如何处理数值输入。此外,讲解了while循环的基本语法,包括如何让用户选择退出、使用标志控制循环、使用break和continue语句。还展示了如何在while循环中处理列表和字典,如移动元素、删除特定值以及使用用户输入填充字典。最后,强调了避免无限循环的重要性。
摘要由CSDN通过智能技术生成

系列文章目录

第一章 起步
第二章 变量和简单数据类型
第三章 列表简介
第四章 操作列表
第五章 if 语句
第六章 字典
第七章 用户输入和 while 语句
第八章 函数
第九章 类
第十章 文章和异常
第十一章 测试代码



前言

大多数程序旨在解决最终用户的问题,为此通常需要从用户那里获取一些信息,这就需要接受用户的输入,以便程序进行处理。为此,我们将学习使用函数 input() 。
另外,我们还将学习如何让程序不断地运行,以便用户根据需要输入信息,并在程序中使用这些信息。为此我们可以使用 while 循环来让程序不间断地运行,直到指定的条件不再满足为止。
最后,通过获取用户输入并学会控制程序的运行时间,就能编写出交互式程序。


7.1 函数 input() 的工作原理

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

message = input("Tell me something, and I will repeat it back to you: ")
print(message)  #注意每次 input() 中冒号的后面最好留一个空格,这是一个好习惯

函数 input() 接受一个参数——要向用户显示的 提示(prompt) 或说明,让用户知道该如何做。例如上述代码中双引号里的内容就是一种提示,程序等待用户的输入,并在用户按回车键后继续运行,这里的输入被赋值给变量 message ,接下来的 print(message) 则将输入呈现给用户:

Tell me something, and I will repeat it back to you: Hello everyone!
Hello everyone!

7.1.1 编写清晰的程序

每当我们使用函数 inpur() 时,都应指定清晰易懂的提示。其次,我们可以在提示末尾(这里是冒号后边)包含一个空格,可将提示与用户的输入翻开,让用户更清楚地知道其输入始于何处。
有时候,提示可能超过一行。例如,可能需要指出获取特定输入的原因,在这种情况下,可将提示赋给一个变量,再将该变量传递给函数 input() 。这样,即便提示超过一行,input() 语句也会非常清晰:

prompt = "If you tell us who are you, wu can personalize the message you see."
prompt += "\nWhat is your first name? "

name = input(prompt)
print(f"Hello, {name}!")

这样一来就很清晰了不是:

If you tell us who are you, wu can personalize the message you see.
What is your first name? Mikey
Hello, Mikey!

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

使用函数 put() 时,Python 将用户输入解读为字符串,这时就要用到 int() 函数来将其转化为整型,和 C 语言里的强制转化的用法是一样的。
下面我们就用 “判断一个人是否满足坐过山车的身高要求” 的一个示例来看看吧:

height = input("How tell are you, in inches? ")
height = int(height)

if height >= 48:
    print("\nYou're tell enough to ride")
else:
    print("\nYou'll be able to ride when you're a little older.")

7.1.3 求模运算符

简单来说,同 C 语言一样,在处理数值信息时,求模运算符(%)是一个很有用的工具,它将两个数相除并返回余数(利用这一特性可以很容易得到一些特殊数列,如奇数列、偶数列、5的倍数数列等等)。

7.2 while 循环简介

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

7.2.1 使用 while 循环

最简单的一个例子就是用 while 循环来数数:

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

7.2.2 让用户选择何时退出

可以使用 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)
    print(message)

我们来看看运行结果:

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

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

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

这个程序确实不错,但唯一美中不足的是,它将单词 ‘quit’ 也作为一条消息打印了出来,位修复这种问题,我们只需在 while 循环中使用一个简单的 if 测试即可:

while message != 'quit':
    message = input(prompt)
    
    if message != 'quit':
        print(message)

7.2.3 使用标志

在前一个示例中,我们让程序在满足特定条件时执行特定的任务。但在更复杂的程序中,很多不同的事件会导致程序停止。例如,有多种事件可能导致游戏结束,像是玩家失去所有飞船、时间已用完,或者要保护的城市全部被摧毁。导致程序结束的事件有很多时,如果在一条 while 语句中检查所有这些条件,将既复杂又困难。

在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量称为标志(flag),充当程序的交通信号灯。
还是上一个例子,这次我们使用标志:

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)

7.2.4 使用 break 退出循环

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

7.2.5 在循环中使用 continue

要返回循环开头,并根据条件测试结果决定是否继续执行循环(重新开始新一轮的循环),可使用 continue 语句。

7.2.6 避免无限循环

每个 while 循环都必须有停止运行的途径(也就相当于一个循环的出口),这样才不会没完没了地执行下去。但每个程序员都会偶尔因不小心而编写出无限循环,在循环的退出条件比较微妙时尤其如此。如果循环陷入无限循环,可按 Ctrl+C(先在输出窗口单击一下鼠标哈),也可关闭显示程序输出的终端窗口。

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

到目前为止,我们每次都只处理了一项用户信息:获取用户的输入,再将输入打印出来或做出答应;循环再次运行时,获悉另一个输入值并做出响应。然而,要记录大量的用户和信息,需要在 while 循环中使用列表和字典。
for 循环是一种遍历列表的有效方式,但不应该在 for 循环中修改列表,否则将导致 Python 难以跟踪其中的元素

7.3.1 在列表之间移动元素

假设有一个列表包含新注册但还未验证的网站用户。验证这些用户后,如何将他们移到另一个已验证用户列表中呢?一种办法是使用一个 while 循环:

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

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

    print(f"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

7.3.2 删除为特定值的所有列表元素

在第3章中,我们使用函数 remove() 来删除列表中的特定值,这之所以可行,是因为要删除的值只在列表中出现一次。所以,要想删除列表中所有为特定值的元素,还是要借助一个 while 循环来完成。

在一个宠物列表中删除’cat’元素:

pets = ['dog', 'cat', 'goldfish', 'cat', 'rabbit', 'cat']
print(pets)

while 'cat' in pets:
    pets.remove('cat')

print(pets)

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

我们可以使用 while 循环提示用户输入任意多的信息。下面创建一个调查程序,其中的循环每次执行时都提示输入被调查者的名字和回答。我们将收集的数据存储在一个字典中,以便将回答同被调查者关联起来:

responses = {}

# 设置一个标志,指出调查是否继续
polling_active = True

while polling_active:
    # 提示输入被调查着的名字和回答
    name = input("\nWhat is your name? ")
    response = input("Which mountain would you like to climb soneday? ")

    # 将回答存储在字典中
    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(f"{name} would kike to clime {response}")

输出为:

What is your name? Eric
Which mountain would you like to climb soneday? Denali
Would you like to let another person respond?(yes/ no) yes

What is your name? Lynn
Which mountain would you like to climb soneday? Devil's Thumb
Would you like to let another person respond?(yes/ no) no

--- Poll Results ---
Eric would kike to clime Denali
Lynn would kike to clime Devil's Thumb

总结

在本章中,我们学习了:

  1. 如何在程序中使用 input() 来让用户提供信息;
  2. 如何处理文本和数的输入,以及如何使用 while 循环让程序按照用户的要求不断运行;
  3. 多种控制 while 循环流程的方式:设置活动标志、使用 break 语句以及使用 continue 语句;
  4. 如何使用 while 循环在列表之间移动元素,以及如何从列表中删除所有包含特定值的元素;
  5. 如何结合使用 while 循环和字典。

在第8章中,我们将学习到函数。,函数能将程序分成多个很小的部分,每部分都负责完成一项具体的任务并能够重复使用或存储在独立的文件中。学会之后,我们可以使用函数来让我们编写的代码效率更高、维护更易和故障排除更方便,并在众多不同的程序中重复使用哟~

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值