Python3完全新手小白的学习手册 7 用户输入和while循环

1. 函数input()的工作原理

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

message = input("Enter a message: ")
print(message)

input() 函数接受一个参数,即要向用户显示的提示(prompt)。
在这个示例中,提示为 "Enter a message: "。
用户输入的文本将存储在变量 message 中。
最后,使用 print() 函数将用户输入的文本打印出来。

编写清晰的提示

当使用 input()函数时,应该指定清晰易懂的提示,准确地指出希望用户提供什么样的信息。

name = input("Please enter your name: ")
print(f"\nHello, {name}!")

通过在提示末尾添加冒号和一个空格,提示与用户输入分开,让用户清楚地知道其输入始于何处。

有时候提示会超过一行。在这种情况下,可以先将提示赋给一个变量。再将这个变量传递给 input()函数。

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

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

在第二行中,使用了 += 在赋给变量prompt的字符串末尾附加了一个字符串。

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

使用 input()函数时,Python 会将用户输入解读为字符串。


>>> age = input("How old are you? ")
How old are you? 21
>>> age
'21'

在这个示例中,用户输入的是 21,但是 Python 将其解读为字符串 ‘21’。

如果要将输入的值作为数值使用,就必须使用函数 int()将其转换为整数。


>>> age = input("How old are you? ")
How old are you? 21
>>> age = int(age)
>>> age >= 18
True

在这个示例中,用户输入的是 21,但是 Python 将其转换为整数 21。

求摸运算符

求模运算符(%)将两个数相除并返回余数。

>>> 4 % 3
1
>>> 5 % 3
2
>>> 6 % 3
0
>>> 7 % 3
1

如果一个数可被另一个数整除,余数就为 0,因此求模运算符将返回 0。

可以利用这一点来判断一个数时奇数还是偶数

number = input("Please enter your number,and I will tell you if it is even or odd: ")

number = int(number)

# 如果一个数和 2 执行求摸运算的结果为 0,即 number % 2 == 0,那么这个数就是偶数;
if number % 2 == 0:
    print(f"\nThe number {number} Even.")
else:
    print(f"\nThe number {number} Odd.")

2. while 循环简介

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

使用 while 循环

# 将 1赋给变量 current_number,指定从 1 开始数。
current_number = 1
# 只要 current_number的值小于或等于 5,就接着数。
while current_number <= 5:
    # 循环打印代码 current_number的值,然后将 current_number的值加 1。
    print(current_number)
    current_number += 1
# 只要满足条件 current_number <= 5,Python就接着运行这个循环。

在这个示例中,变量 current_number 的值为 1。只要这个值小于或等于 5,Python 就接着运行 while 循环中的代码。
在每次执行 while 循环中的代码时,都将 current_number 的值加 1。
因此,这个循环将不断地运行,直到 current_number 的值大于 5。

让用户选择何时退出

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

# 定义一条提示消息,告诉用户有两个选择:要么输入一条消息,要么输入quit退出程序
prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "

# 创建变量 message,用于存储用户输入的消息
message = ""
# 创建一个 while 循环,只要用户输入的消息不是 quit,就不断地提示用户输入消息
while message != "quit":
    message = input(prompt)
    print(message)

在这个示例中,我们定义了一条提示消息,告诉用户有两个选择:要么输入一条消息,要么输入 quit 退出程序。
我们创建了一个变量 message,用于存储用户输入的消息。
我们创建了一个 while 循环,只要用户输入的消息不是 quit,就不断地提示用户输入消息。
在每次循环中,我们将用户输入的消息存储在变量 message 中,并打印出来。
当用户输入 quit 时,循环结束,程序退出。

上面的程序美中不足的是,将单词‘quit’也作为一条消息打印了出来。使用是个简单的 if 测试。

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)

使用标志

在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志(flag),充当程序的交通信号灯。
可以让程序在标志为 True 时继续运行,并在任何事件导致标志的值为 False 时让程序停止运行。
这样,在 while 语句中就只需要检查一个条件(标志的当前值是否为 True),从而提高了程序的效率。

prompt = "\nTell me something, and I will repeat it back to you:"
prompt += "\nEnter 'quit' to end the program. "
# 定义一个标志变量 active,用于控制循环是否继续运行。
active = True
while active:
    message = input(prompt)

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

在这个示例中,我们定义了一个标志变量 active,用于控制循环是否继续运行。
我们创建了一个 while 循环,只要 active 的值为 True,就不断地提示用户输入消息。
在每次循环中,我们将用户输入的消息存储在变量 message 中,并检查它是否等于 quit。
如果用户输入了 quit,我们将 active 的值设置为 False,从而让循环停止运行。
否则,我们打印出用户输入的消息。
当用户输入 quit 时,循环结束,程序退出。

使用 break 退出循环

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

prompt = "\nPlease enter the name of a city you have visited:"
prompt += "\n(Enter 'quit' when you are finished.) "
while True:
    city = input(prompt)
    if city == "quit":
        break
    else:
        print(f"I'd love to go to {city.title()}!")

在这个示例中,我们创建了一个 while 循环,它将不断地运行,直到用户输入 quit。
在每次循环中,我们提示用户输入一个城市的名称,并将用户输入的消息存储在变量 city 中。
如果用户输入了 quit,我们使用 break 语句退出循环。
否则,我们打印出一条消息,告诉用户我们将前往该城市。
当用户输入 quit 时,循环结束,程序退出。

在循环中使用 continue

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

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

在这个示例中,我们创建了一个 while 循环,它将不断地运行,直到 current_number 的值大于或等于 10。
在每次循环中,我们将 current_number 的值加 1。
然后,我们使用 if 语句检查 current_number 的值是否为偶数。
如果是偶数,我们使用 continue 语句跳过余下的代码,并返回到循环的开头。
否则,我们打印出 current_number 的值。
当 current_number 的值大于或等于 10 时,循环结束,程序退出。

避免无限循环

每个 while 循环都必须有停止运行的途径,这样才不会没完没了地执行下去。

x = 1
while x <= 5:
    print(x)

在这个示例中,我们创建了一个 while 循环,它将不断地运行,直到 x 的值大于 5。
在每次循环中,我们将 x 的值加 1 (我们忘记了编写 x += 1 的代码进行操作 x 的值) ,并打印出 x 的值。
当 x 的值大于 5 时,循环结束,程序退出。
但是,如果我们忘记在循环中更新 x 的值,就会导致无限循环。

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

要在遍历列表的同时修改,可以使用 while 循环。
通过将列表和 while 循环结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。

在列表之间移动元素

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


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

# 验证每个用户,直到没有未验证用户为止。
# 将每个经过验证的列表都移到已验证用户列表中。
while unconfirmed_users:
    # pop()方法每次从列表 unconfirmed_users末尾删除一个未验证用户,赋值给 current_user
    current_user = unconfirmed_users.pop()
    print(f"Verifying user: {current_user.title()}")
    # 将已验证的用户添加到已验证用户列表current_user中
    confirmed_users.append(current_user)

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

在这个示例中,我们创建了一个待验证用户列表 unconfirmed_users 和一个用于存储已验证用户的空列表 confirmed_users。
我们使用 while 循环,在验证用户的同时将其从未验证用户列表中提取出来,再将其加入到已验证用户列表中。
在每次循环中,我们使用 pop()方法从列表 unconfirmed_users 末尾删除一个未验证用户,并将其赋值给变量 current_user。
然后,我们打印出一条消息,告诉用户我们正在验证该用户。
最后,我们将已验证的用户添加到已验证用户列表 confirmed_users 中。
当列表 unconfirmed_users 为空时,循环结束,程序退出。

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

使用 while 循环,可不断地删除包含特定值的所有列表元素。使用 remove()函数来删除列表中的特定值。

# 创建一个列表,其中包含多个值为‘cat’的元素。打
pets = ["dog", "cat", "dog", "goldfish", "cat", "rabbit", "cat"]
# 打印该列表。
print(pets)
# 不断地删除列表中的元素‘cat’,直到没有‘cat’为止。
while "cat" in pets:
    pets.remove("cat")
# 再次打印该列表。
print(pets)

在这个示例中,我们创建了一个列表 pets,其中包含多个值为 ‘cat’ 的元素。
我们使用 while 循环,不断地删除列表中的元素 ‘cat’,直到没有 ‘cat’ 为止。
在每次循环中,我们使用 remove()函数从列表 pets 中删除一个值为 ‘cat’ 的元素。
当列表 pets 中没有值为 ‘cat’ 的元素时,循环结束,程序退出。
最后,我们再次打印该列表。

使用用户输入填充字典

可以使用 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(f"{name} would like to climb {response}.")

在这个示例中,我们创建了一个空字典 responses,用于存储调查结果。
我们设置了一个标志 polling_active,指出调查是否继续。
我们使用 while 循环,提示用户输入被调查者的名字和回答。
在每次循环中,我们将回答存储在字典 responses 中,其中键为被调查者的名字,值为回答。
然后,我们使用 input()函数询问是否还有人要参与调查。
如果用户输入 ‘no’,我们将 polling_active 的值设置为 False,从而让循环停止运行。
当调查结束时,我们使用 for 循环遍历字典 responses 中的键值对,并打印出每个被调查者的名字和回答。


往期


代码仓库

代码仓库

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

qyydeep

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值