《Python基础知识-4判断和循环语句》

1 判断(分支)语句

1.1 if 语句

1)简单 if 语句

  在Python中,if 语句就是用来判断的,格式如下:

if 要判断的条件:
	条件成立时,要做的事情
	...

  例如:

In [1]: age = 19
In [2]: if age >= 18:
In [3]:     print("You are old enough to vote!")

Out[3]: You are old enough to vote!

  注意:if 语句及其缩进部分是一个完整的代码块。

2)if-else 语句

  我们经常需要在条件测试通过时执行一个操作,并在没有通过时执行另一个操作;在这种情况下,可使用Python提供的 if-else 语句。if-else 语句块类似于简单的 if 语句, 但其中的 else 语句能够指定条件测试未通过时要执行的操作。

if 要判断的条件:
	条件成立时,要做的事情
	...
else:
	条件不成立时,要做的事情
	...

  例如:

In [1]: age = 17
In [2]: if age >= 18:
In [3]:     print("You are old enough to vote!")
In [4]:     print("Have you registered to vote yet?")
In [5]: else:
In [6]:     print("Sorry, you are too young to vote.")
In [7]:     print("Please register to vote as soon as you turn 18!")

Out[7]: Sorry, you are too young to vote.
		Please register to vote as soon as you turn 18!

3)if-elif-else 语句

  我们经常需要检查超过两个的情形,为此可使用Python提供的 if-elif-else 结构。Python只执行 if-elif-else 结构中的一个代码块,它依次检查每个条件测试,直到遇到通过的条件测试。测试通过后,Python将执行紧跟在它后面的代码,并跳过余下的测试。

if 要判断的条件1:
	条件1成立时,要做的事情
	...
elif 要判断的条件2:
	条件2成立时,要做的事情
	...
elif 要判断的条件3:
	条件3成立时,要做的事情
	...
...
else:
	以上条件都不成立时,要做的事情
	...

  例如:

In [1]: age = 12
In [2]: if age < 4:
In [3]:     price = 0
In [4]: elif age < 18:
In [5]:     price = 5
In [6]: elif age < 65:
In [7]:     price = 10
In [8]: else:
In [9]:     price = 5
In [10]: print("Your admission cost is $" + str(price) + ".")

Out[10]: Your admission cost is $5.

  注意:Python并不要求 if-elif 结构后面必须有 else 代码块。在有些情况下,else 代码块很有用;而在其他一些情况下,使用一条 elif 语句来处理特定的情形更清晰:

age = 12
if age < 4:
    price = 0
elif age < 18:
    price = 5
elif age < 65:
    price = 10
elif age >= 65:
    price = 5
print("Your admission cost is $" + str(price) + ".")

  else 是一条包罗万象的语句,只要不满足任何 if 或 elif 中的条件测试,其中的代码就会执行,这可能会引入无效甚至恶意的数据。 如果知道最终要测试的条件,应考虑使用一个 elif 代码块来代替 else 代码块。 这样就可以肯定,仅当满足相应的条件时,代码才会执行。

4)if 语句的嵌套

  我们经常需要在条件测试通过时再增加条件测试,为此可使用嵌套结构。

if 要判断的条件1:
	条件1成立时,要做的事情
	...
	if 条件1成立基础上,要判断的条件2:
		条件2成立时,要做的事情
	...
	else:
		条件2不成立时,要做的事情
	...

else:
	条件1不成立时,要做的事情
	...

1.2 使用 if 语句处理列表

1)检查特殊元素

  下面来研究如何检查列表中的特殊值,并对其做合适的处理。使用比萨店示例:一家比萨店在制作比萨时,每添加一种配料都打印一条消息。通过创建一个列表,在其中包含顾客点的配料,并使用一个循环来指出添加到比萨中的配料,可以以极高的效率编写这样的代码:

In [1]: requested_toppings = ['mushrooms', 'green peppers', 'extra cheese']
In [2]: for requested_topping in requested_toppings:
In [3]:     print("Adding " + requested_topping + ".")
In [4]: print("\nFinished making your pizza!")

Out[4]: Adding mushrooms.
		Adding green peppers.
		Adding extra cheese.
		Finished making your pizza!

2)确定列表不是空的

  到目前为止,对于处理的每个列表都做了一个简单的假设,即假设它们都至少包含一个元素。我们马上就要让用户来提供存储在列表中的信息,因此不能再假设循环运行时列表不是空的。有鉴于此,在运行 for 循环前确定列表是否为空很重要。
  下面在制作比萨前检查顾客点的配料列表是否为空。如果列表是空的,就向顾客确认他是否要点普通比萨;如果列表不为空,就像前面的示例那样制作比萨:

In [1]: requested_toppings = []
In [2]: if requested_toppings:
In [3]:     for requested_topping in requested_toppings:
In [4]:         print("Adding " + requested_topping + ".")
In [5]:     print("\nFinished making your pizza!")
In [6]: else:
In [7]:     print("Are you sure you want a plain pizza?")

Out[7]: Are you sure you want a plain pizza?

  在 if 语句中将列表名用在条件表达式中时,Python将在列表至少包含一个元素时返回True,并在列表为空时返回 False。

2 循环语句

2.1 三种控制结构


2.2 while 循环

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

1)简单 while 语句

  while 语句格式如下:

初始条件设置 -- 通常是重复执行的计数器

while 条件(判断计数器是否达到目标次数):
	条件满足时,要做的事情
	...

	处理条件(计数器 + 1

  例如:

In [1]: current_number = 1
In [2]: while current_number <= 5:
In [3]:     print(current_number)
In [4]:     current_number += 1
Out[4]: 1
		2
		3
		4
		5

  注意:不要忘记在循环内部修改循环的判断条件,否则将导致死循环。

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)
    
    if message != 'quit':
        print(message)

  首次遇到这个循环时,message 是一个空字符串,因此Python进入这个循环。执行到代码行 message = input(prompt) 时,Python显示提示消息,并等待用户输入。只要用户输入的不是单词 ‘quit’,都将存储到变量 message 中并打印出来;接下来,Python重新检查 while 语句中的条件。只要用户输入的不是单词 ‘quit’,Python就会再次显示提示消息并等待用户输入。等到用户终于输入 ‘quit’ 后,Python停止执行 while 循环,而整个程序也到此结束:

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

3)使用标志退出循环

  在前一个示例中,我们让程序在满足一个指定条件时就执行特定的任务。但在更复杂的程序中,很多不同的事件都会导致程序停止运行;在这种情况下,该怎么办呢?
  在要求很多条件都满足才继续运行的程序中,可定义一个变量,用于判断整个程序是否处于活动状态。这个变量被称为标志 ,充当了程序的交通信号灯。你可让程序在标志为 True 时继续运行,并在任何事件导致标志的值为 False 时让程序停止运行。这样,在 while 语句中就只需检查一个条件——标志的当前值是否为 True,并将所有测试(是否发生了应将标志设置为 False 的事件) 都放在其他地方,从而让程序变得更为整洁。

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)

  这个程序的输出与前一个示例相同。在前一个示例中,我们将条件测试直接放在了 while 语句中,而在这个程序中,我们使用了一个标志来指出程序是否处于活动状态,这样如果要添加测试(如 elif 语句) 以检查是否发生了其他导致 active 变为 False 的事件,将很容易。

4)使用 break 退出循环

  要立即退出 while 循环,不再运行循环中余下的代码,也不管条件测试的结果如何,可使用 break 语句。break 语句用于控制程序流程,可使用它来控制哪些代码行将执行,哪些代码行不执行,从而让程序按你的要求执行你要执行的代码。
  例如,来看一个让用户指出他到过哪些地方的程序。在这个程序中,我们可以在用户输入 ‘quit’ 后使用 break 语句立即退出 while 循环:

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("I'd love to go to " + city.title() + "!")

  以 while True 打头的循环将不断运行,直到遇到 break 语句。这个程序中的循环不断输入用户到过的城市的名字,直到他输入 ‘quit’ 为止。用户输入 ‘quit’ 后,将执行 break 语句,导致Python退出循环:

Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) New York
I'd love to go to New York!

Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) San Francisco
I'd love to go to San Francisco!

Please enter the name of a city you have visited:
(Enter 'quit' when you are finished.) quit

  再例如:

In [1]: i = 0
In [2]: while i < 10:
In [3]:     if i == 3:
In [4]:         break
In [5]:     else:
In [6]:         print(i)
In [7]:     i += 1
In [8]: print('over')

Out[8]: 0
		1
		2
		over

  注意:break 只针对当前所在循环有效;在任何Python循环中都可使用 break 语句。例如可使用 break 语句来退出遍历列表或字典的 for 循环。

5)在循环中使用 continue

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

In [1]: current_number = 0
In [2]: while current_number < 10:
In [3]:     current_number += 1
In [4]:     if current_number % 2 == 0:
In [5]:         continue
In [6]:     print(current_number)

Out[6]: 1
		3
		5
		7
		9

  注意:使用 continue 时,条件处理部分的代码需要特别注意,容易出现死循环。例如:

current_number = 0
while current_number < 10:

    if current_number == 5:
        # 这里在使用 continue 之前,同样需要修改计数器,否则会出现死循环
        current_number += 1
        continue

    current_number += 1

    print(current_number)

6)while 语句的嵌套

  输出九九乘法表:

row = 1
while row <= 9:
    col = 1

    while col <= row:
        print('%d * %d = %d' % (col, row, col * row), end='\t')
        col += 1

    print('')
    row += 1

2.3 使用 while 语句处理列表和字典

  for 循环是一种遍历列表的有效方式,但在 for 循环中不应修改列表,否则将导致Python难以跟踪其中的元素。要在遍历列表的同时对其进行修改,可使用 while 循环。通过将 while 循环同列表和字典结合起来使用,可收集、存储并组织大量输入,供以后查看和显示。(参考链接:为什么Python不建议在 for 循环中修改列表?

1)在列表之间移动元素

  假设有一个列表,其中包含新注册但还未验证的网站用户;验证这些用户后,如何将他们移到另一个已验证用户列表中呢?一种办法是使用一个 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())

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

  我们使用函数 remove( ) 来删除列表中的特定值,这之所以可行,是因为要删除的值在列表中只出现了一次。如果要删除列表中所有包含特定值的元素,该怎么办呢?
  假设你有一个宠物列表,其中包含多个值为 ‘cat’ 的元素。要删除所有这些元素,可不断运行一个 while 循环,直到列表中不再包含值 ‘cat’,如下所示:

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

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

3)使用用户输入来填充字典

  可使用 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 + ".")
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

-Sussurro-

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

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

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

打赏作者

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

抵扣说明:

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

余额充值