python 学习 第一册 第7章 用户输入和while循环

-----用教授的方式学习

目录

7.1 函数input()的工作原理

7.1.1 编写清晰的程序

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

7.1.3 求模运算符

7.2 while 循环简介

7.2.1 使用while循环

7.2.2 让用户选择何时退出

7.2.3 使用标志

7.2.4 使用break退出循环

7.2.5 在循环中使用continue

7.2.6 避免无限循环

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

7.3.1 在列表之间移动元素

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

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


7.1 函数input()的工作原理

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

例如,下面的程序让用户输入一些文本,再将这些文本呈现给用户:

parrot.py

message = input("Tell me something, and I will repeat it back to you: ")
print(message)

注意    Sublime Text等众多编辑器不能运行提示用户输入的程序。你可以使用Sublime Text来编写提示用户输入的程序,但必须从终端运行它们。详情请参阅1.5节。

7.1.1 编写清晰的程序

每当使用函数input()时,都应指定清晰易懂的提示,准确地指出希望用户提供什么样的信息——指出用户应该输入何种信息的任何提示都行,如下所示:

greeter.py

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

有时候,提示可能超过一行。例如,你可能需要指出获取特定输入的原因。在这种情况下,可将提示赋给一个变量,再将该变量传递给函数input() 。这样,即便提示超过一行,input()语句也会非常清晰。

greeter.py

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}!")

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

使用函数input()时,Python将用户输入解读为字符串。请看下面让用户输入年龄的解释器会话:

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

如图,上面输出的字符串'21',而我们需要的是数字21

为解决这个问题,可使用函数int() ,它让Python将输入视为数值。函数int() 将数的字符串表示转换为数值表示,如下所示:

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

>>> age = int(age)
>>> age >= 18
 True

7.1.3 求模运算符

处理数值信息时,求模运算符(%)是个很有用的工具,它将两个数相除并返回余数:

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

求模运算符不会指出一个数是另一个数的多少倍,只指出余数是多少。

如果一个数可被另一个数整除,余数就为0,因此求模运算将返回0。可利用这一点来判断一个数是奇数还是偶数:

even_or_odd.py

number = input("Enter a number, and I'll tell you if it's even or odd: ")
number = int(number)

if number % 2 == 0:

    print(f"\nThe number {number} is even.")
else:
    print(f"\nThe number {number} is odd.")

7.2 while 循环简介

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

7.2.1 使用while循环

可使用while循环来数数。例如,下面的while循环从1数到5:

counting.py

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

7.2.2 让用户选择何时退出

可以使用while循环让程序在用户愿意时不断运行,如下面的程序parrot.py所示。我们在其中定义了一个退出值 ,只要用户输入的不是这个值,程序就将接着运行:

parrot.py

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)

7.2.3 使用标志

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

例如,有多种事件可能导致游戏结束,如玩家失去所有飞船、时间已用完,或者要保护的城市被全部摧毁。导致程序结束的事件有很多时,如果在一条while语句中检查所有这些条件,将既复杂又困难。

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

下面在前一节的程序parrot.py中添加一个标志。将其命名为active(你可给它指定任何名称),用于判断程序是否应继续运行:

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循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用brea语句。break语句用于控制程序流程,可用来控制哪些代码行将执行、哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。

例如,来看一个让用户指出他到过哪些地方的程序。在这个程序中,可在用户输入'quit'后使用break语句立即退出while循环:

cities.py

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()}!")

7.2.5 在循环中使用continue

要返回循环开头,并根据条件测试结果决定是否继续执行循环,可使用continue语句,它不像break语句那样不再执行余下的代码并退出整个循环。例如,来看一个从1数到10但只打印其中奇数的循环:

counting.py

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

      print(current_number)

7.2.6 避免无限循环

每个while循环都必须有停止运行的途径,这样才不会没完没了地执行下去。例如,下面的循环从1数到5:

counting.py

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

注意     Sublime Text等一些编辑器内嵌了输出窗口,这可能导致难以结束无限循环,不得不通过关闭编辑器来结束。在这种情况下,可在输出窗口中单击鼠标,再按Ctrl + C,这样应该能够结束无限循环。

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

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

7.3.1 在列表之间移动元素

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

confirmed_users.py

# 首先,创建一个待验证用户列表
  # 和一个用于存储已验证用户的空列表。
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())

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

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

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

pets.py

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

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

print(pets)

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

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

mountain_poll.py

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}.")

-----end

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

weixin_38135241

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

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

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

打赏作者

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

抵扣说明:

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

余额充值