input() 函数让程序暂停运⾏,等待⽤户输⼊⼀些⽂本。获取⽤户输⼊ 后,Python 将其赋给⼀个变量,以便使⽤。
- message = input("Tell me something, and I will repeat it back to you:
- ")
- print(message)
input() 函数接受⼀个参数,即要向⽤户显⽰的提⽰(prompt),让⽤户 知道该输⼊什么样的信息。
- prompt = "If you share your name, we can personalize the messages you
- see."
- prompt += "\nWhat is your first name? "
- name = input(prompt)
- print(f"\nHello, {name}!")
- >>> age = input("How old are you? ")
- How old are you? 21
- >>> age >= 18
- Traceback (most recent call last):
- File "
" , line 1, in <module> - TypeError: '>=' not supported between instances of 'str' and 'int'
Python 报错,因为它⽆法将 字符串和整数进⾏⽐较:不能将赋给 age 的字符串 '21' 与数值 18 进⾏ ⽐较
- >>> age = input("How old are you? ")
- How old are you? 21
- >>> age = int(age)
- >>> age >= 18
- True
Python 将这个数解读为字符串,但随后 int() 将这个字符串转换成了数值表⽰
求模运算符(%)是个很有⽤的⼯具,它将两个数相除 并返回余数
- >>> 4 % 3
- 1
- >>> 5 % 3
- 2
- >>> 6 % 3
- 0
- >>> 7 % 3
- 1
可利以来判断⼀个数是奇数还是偶数:
for 循环⽤于针对集合中的每个元素执⾏⼀个代码块,⽽ while 循环则不 断地运⾏,直到指定的条件不再满⾜为⽌。
可以使⽤ while 循环来数数。例如,下⾯的 while 循环从 1 数到 5:
- current_number = 1
- while current_number <= 5:
- print(current_number)
- current_number += 1
可以使⽤ 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)
在更 复杂的程序中,有很多不同的事件会导致程序停⽌运⾏。
在要求满⾜很多条件才继续运⾏的程序中,可定义⼀个变量,⽤于判断整 个程序是否处于活动状态。这个变量称为标志(flag),充当程序的交通信 号灯。
添加⼀个标志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)
在复杂的程序(⽐如有很多事件会导致 程序停⽌运⾏的游戏)中,标志很有⽤:在任意⼀个事件导致活动标志变 成 False 时,主游戏循环将退出。
想⽴即退出 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 True 打头的循环将不断运行,直到遇到break语句。
注意:在所有 Python 循环中都可使⽤ break 语句。例如,可使⽤
break 语句来退出遍历列表或字典的 for 循环。
要返回循环开头,并根据条件测试的结果决定是否继续执⾏循环,可使⽤ continue 语句。
- current_number = 0
- while current_number < 10:
- current_number += 1
- if current_number % 2 == 0:
- continue
- print(current_number)
if 语句检查 current_number 与 2 的 求模运算结果。如果结果为 0(意味着current_number 可被 2 整除), 就执⾏ continue 语句,让 Python 忽略余下的代码,并返回循环的开头。
每个 while 循环都必须有结束运⾏的途径,这样才不会没完没了地执⾏下 去。
- x = 1
- while x <= 5:
- print(x)
- x += 1
如果像下⾯这样不⼩⼼遗漏了代码⾏ x += 1,这个循环将没完没了地运 ⾏:
- # 这个循环将没完没了地运⾏!
- x = 1
- while x <= 5:
- print(x)
通过将 while 循环与列表和字典结合起来使⽤,可收 集、存储并组织⼤量的输⼊,供以后查看和使⽤。
假设有⼀个列表包含新注册但还未验证的⽹站⽤户。验证这些⽤户后,如
何将他们移到已验证⽤户列表中呢?
⼀种办法是使⽤⼀个 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())
我们使⽤ remove() 函数来删除列表中的特定值。这之所以
可⾏,是因为要删除的值在列表中只出现了⼀次。
假设有⼀个宠物列表,其中包含多个值为 'cat' 的元素。
要删除所有这些 元素,可不断运⾏⼀个 while 循环,直到列表中不再包含值 'cat',
如下 所⽰:
- pets = ['dog', 'cat', 'dog', 'goldfish', 'cat', 'rabbit', 'cat']
- print(pets)
- while 'cat' in pets:
- pets.remove('cat')
- print(pets)
⾸先创建⼀个列表,其中包含多个值为 'cat' 的元素。打印这个列表后, Python 进⼊ while 循环,因为它发现 'cat' 在列表中⾄少出现了⼀次。 进⼊这个循环后,Python 删除第⼀个 'cat' 并返回 while 代码⾏,然后 发现 '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)⽤于指出调查是否继续。只要 polling_active 为 True,Python 就运⾏ while 循环中的代码。