Python3基础 自学控制结构
控制结构
布尔类型
Python 中的另一种类型是布尔类型。有两个布尔值:True
和 False
。
可以通过比较值的方法来创建它们,例如通过使用相等的运算符 ==
。
>>> my_boolean = True
>>> my_boolean
True
>>> 2 == 3
False
>>> "hello Edong" == "hello Edong"
True
注意:
- 不要把赋值(一个等号)与比较(两个等号)混淆。
- Python是区分大小写的,所以True与true是不同的。
比较运算符
不等于运算符 !=
两边被比较的项不相等的情况下则值为 True,如果相等,则值为 False。
>>> 1 != 1
False
>>> "eleven" != "seven"
True
>>> 2 != 10
True
Python 使用 >
和 <
运算符来判断一个数字(浮点数或整数)是大于还是小于另一个数。
>>> 8 > 5
True
>>> 15 < 15
False
Python 使用 >=
和 <=
运算符来判断一个数字(浮点数或整数)是大于等于还是小于等于另一个数字。
在比较相等的数字时它们返回 True。
>>> 7 <= 8
True
>>> 9 >= 9.0
True
注: 也可以使用比较运算符来按字母顺序比较字符串。
>>> "ab" >= "bb"
False
比较运算符:==
!=
>
<
>=
<=
打印布尔值 打印结果 True False
设置变量 string和int 不能进行比较 就算是 1 和 ‘1’ 用 ‘=’ 比较的时候返回的是False 如果是‘!= ’那么就是True
if 语句
if 语句的表达式结果为True, 则执行if代码块中的代码。
语法如下:
if 表达式:
一些代码
Python 使用缩进(一行的开始处的空白)来分隔代码块。
而其他语言,比如C语言使用大括号来实现分隔代码块,但是在 Python 中必须使用缩进。
创建一个demo.py, 并写入代码:
if 10 > 5:
print("10 > 5")
print("program end")
结果
10 > 5
program end
表达式 10 > 5。于是执行缩进的代码块,所以会输出 “10 > 5”。然后,运行if语句后的代码,并显示“program end”。
注1:
if 语句中表达式末尾使用冒号, 不要忘记这个冒号!
注2:
由于程序包含多行代码,因此应该将其作为单独的文件创建并运行。
之后的多行代码演示, 均表示创建一个文件, 写入代码, 然后运行的结果。
if 语句允许嵌套使用,可用于执行更复杂的判断。
内部 if 语句是外部语句的代码块部分。
这是查看是否满足多个条件的一种方法。
例如:
num = 15
if num > 5:
print("Bigger than 5")
if num <=47:
print("Between 5 and 47")
结果
Bigger than 5
Between 5 and 47
if条件:单分支、双分支、多分支结构
else 语句
else语句跟随在if语句之后,当if语句表达式计算的结果为False时执行else的代码块。
和if语句一样,块内的代码应该缩进。
x = 4
if x == 5:
print("Yes")
else:
print("No")
结果
No
可以嵌套使用 if/else 语句,进行更加复杂的判断。
num = 7
if num == 5:
print("Number is 5")
else:
if num == 11:
print("Number is 11")
else:
if num == 7:
print("Number is 7")
else:
print("Number isn't 5, 11 or 7")
结果
Number is 7
elif(else if 的简写)语句是 if 和 else 语句时使用的快捷方式。
一系列 if elif 语句可以有一个最终的 else 块,如果 if 或者 elif 条件均不成立时会调用 else 代码块。
例如:
num = 7
if num == 5:
print("Number is 5")
elif num == 11:
print("Number is 11")
elif num == 7:
print("Number is 7")
else:
print("Number isn't 5, 11 or 7")
结果
Number is 7
注: 在其他编程语言中,elif 语句有不同的名称,包括 else if,elseif 或 elsif。
Python 中只能使用 elif,而不能识别 else if。
逻辑运算符
逻辑运算符
逻辑运算符用于为依赖于多个条件的 if 语句创建更复杂的条件。
Python 的布尔运算符分别是 and, or, 和 not。
and 运算符有两个参数,只有但两个参数均为 True 时,结果为 True,否则结果为 False。
print(1 == 1 and 2 == 2)
print(1 == 1 and 2 == 3)
print(1 != 1 and 2 == 2)
print(2 < 1 and 3 > 6)
结果
True
False
False
False
Python 的布尔运算符使用单词,而大多数其他语言使用符号(如 &&,||)和!
or 运算符
or 运算符也有两个参数。如果其参数中的任何一个(或两者)都为 True,则结果为 True; 如果两个参数均为 False,则结果为 False。
print(1 == 1 or 2 == 2)
print(1 == 1 or 2 == 3)
print(1 != 1 or 2 == 2)
print(2 < 1 or 3 > 6)
结果
True
True
True
False
not 运算符
not 运算符只有一个参数,运算结果是将求反。
如果提供的参数为 True 求得结果为 False,如果参数为 False 求得结果为 True。
print(not 1 == 1)
print(not 1 > 7)
结果
False
True
你可以使用逻辑运算符在 if 语句中链接多个条件语句。
- 逻辑运算符:and or not
- 运算符的优先级:不懂就加小括号
- 三元运算符:a = x if 条件 else y
运算符优先级
运算符优先级是编程中一个非常重要的概念。
它是运算次序的数学思想的延伸(比如先算乘除后算加减)不过它也包含其他运算符,比如逻辑运算符,位运算符,赋值运算符等。
下面的代码中 == 具有比 or 更高的优先级:
print(False == False or True)
print(False == (False or True))
print((False == False) or True)
结果
True
False
True
提示: Python 的操作顺序与正常数学的顺序相同, 先是括号,然后是取幂,然后是乘/除,然后是加/减。
下表列出了从最高优先级到最低优先级的所有Python运算符。
while 循环
while循环
如果 if 语句的计算结果为 True,则 if 语句的代码块会运行一次,如果计算结果为 False,则不会运行。
while 语句是相似的,while 只要条件为True,while内部的代码块就会重复执行。
当条件为 False 时就停止 while 循环,程序继续往后执行。
例如:
i = 1
while i <=5:
print(i)
i = i + 1
print("Finished!")
结果
1
2
3
4
5
Finished!
while 循环体中的代码被重复执行。这被称为迭代。
无限循环是一种特殊的 while 循环;它永远不会停止运行。它的条件总是 True 。
一个无限循环的例子:
while 1==1:
print("In the loop")
这个程序将无限期地打印 “In the loop”。
您可以通过使用 Ctrl-C 快捷键或关闭程序来停止程序的执行。
break 语句
要提前结束 while 循环,可以使用 break 语句。
在循环中遇到时,break 语句会立即结束循环。
i = 0
while 1==1:
print(i)
i = i + 1
if i >= 5:
print("Breaking")
break
print("Finished")
结果
0
1
2
3
4
Breaking
Finished
在循环外部使用 break 语句会导致错误。
continue 语句
可以在循环内使用的另一个语句是 continue 语句。
与 break 不同的是,continue 语句是提前结束本次循环,进入下一次循环。
i = 0
while True:
i = i +1
if i == 2:
print("Skipping 2")
continue
if i == 5:
print("Breaking")
break
print(i)
print("Finished")
结果
1
Skipping 2
3
4
Breaking
Finished
简而言之:continue 语句停止当前的迭代,并继续下一个。
在循环外部使用 continue 语句会导致错误。
- while 循环语法:重复使用
- break 关键字使用:结束当前的循环
- Continue 关键字使用:跳过本次循环,继续下一次循环
列表
列表
列表是 Python 中的另一种类型的对象。它们被用来存储索引的元素列表。
方括号中用逗号分隔元素来创建一个列表。
列表中的某个元素可以通过使用方括号中的索引来访问。
例如:
words = ["Hello", "world", "!"]
print(words[0])
print(words[1])
print(words[2])
结果
Hello
world
!
注意:列表的索引是从0开始的,而不是从1开始的
一个空的列表用一对空的方括号创建。
empty_list = []
print(empty_list)
结果
[]
大多数情况下,列表中的最后一项不会带逗号。然而,在最后一项放置一个逗号是完全有效的,在某些情况下是鼓励的。
通常情况下,列表包含单种数据类型的元素,但也可以包含几个不同的类型。
列表也可以嵌套在其他列表中。
number = 3
things = ["string", 0, [1, 2, number], 4.56]
print(things[1])
print(things[2])
print(things[2][2])
结果
0
[1, 2, 3]
3
引用超出列表值的索引范围将导致 IndexError 错误。
一些类型,比如字符串,可以像列表一样编入索引。索引字符串的行为就像你索引包含字符串中每个字符的列表一样。
str = "Hello world!"
print(str[6])
结果
w
列表操作
列表操作
列表中某个索引处的元素值可以被重新分配。
例如:
nums = [7, 7, 7, 7, 7]
nums[2] = 5
print(nums)
结果
[7, 7, 5, 7, 7]
列表可以像字符串一样添加和相乘。
例如:
nums = [1, 2, 3]
print(nums + [4, 5, 6])
print(nums * 3)
结果
[1, 2, 3, 4, 5, 6]
[1, 2, 3, 1, 2, 3, 1, 2, 3]
列表和字符串在很多方面是相似的 - 字符串可以被认为是不能改变的字符列表。
要查找某个值是否在列表中,可以使用 in 运算符。如果值在列表中出现一次或多次,则返回 True,否则返回 False。
words = ["spam", "egg", "spam", "sausage"]
print("spam" in words)
print("egg" in words)
print("tomato" in words)
结果
True
True
False
in 运算符也用于确定一个字符串是否是另一个字符串的子字符串。
要某个值是否不在列表中,可以使用 not 操作符:
nums = [1, 2, 3]
print(not 4 in nums)
print(4 not in nums)
print(not 3 in nums)
print(3 not in nums)
结果
True
True
False
False
列表函数
可以使用 append 方法将一个元素添加到现有列表的末尾。
nums = [1, 2, 3]
nums.append(4)
print(nums)
结果
[1, 2, 3, 4]
append 是列表类的一个方法。
要获取列表中的项目数量,可以使用 len 函数。
nums = [1, 3, 5, 2, 4]
print(len(nums))
结果
5
与 append 方法不同,len 是一个正常的函数,而不是一个方法。这意味着它写在被调用的列表之前。
insert 方法与 append 相似,不同之处在于它允许您在列表中的任何位置插入一个新元素,而不仅仅是在最后。
words = ["W3Cschool", "Good"]
index = 1
words.insert(index, "is")
print(words)
结果
['W3Cschool', 'is', 'Good']
index 方法找到列表项的第一个匹配项并返回它的索引。
如果该项目不在列表中,则会引发 ValueError。
letters = ['p', 'q', 'r', 's', 'p', 'u']
print(letters.index('r'))
print(letters.index('p'))
print(letters.index('z'))
结果
2
0
ValueError: 'z' is not in list
列表还有一些很有用的功能和方法。
max(list): 返回具有最大值的列表元素
min(list): 返回具有最小值的列表元素
list.count(obj): 返回一个元素在一个列表中出现的次数
list.remove(obj):从列表中删除一个元素
list.reverse():颠倒列表中的元素的顺序
- 列表的定义及创建:语法
- 列表的嵌套
- 列表常见的异常:列表下标越界
- 列表操作:赋值、相加相乘、
in
和not in
的使用 - 列表函数:
append()
len()
insert()
index()
max()
min()
count()
remove()
reverse()
范围(Range)
使用范围函数创建一个顺序的数字列表。
numbers = list(range(10))
print(numbers)
结果
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
Range 本身会创建一个 Range 对象,所以调用 list 函数将其转换为列表。
如果使用一个参数调用 Range,则会生成0到该参数值的对象。
如果使用两个参数调用范围,则会从第一个值到第二个值的对象。
例如:
numbers = list(range(3, 8))
print(numbers)
print(range(20) == range(0, 20))
结果
[3, 4, 5, 6, 7]
True
Range 可以有第三个参数,第三个参数决定了产生的序列的间隔。
numbers = list(range(5, 20, 2))
print(numbers)
结果
[5, 7, 9, 11, 13, 15, 17, 19]
注意: 第三个参数必须是一个整数, 否则会报TypeError。
for 循环
循环
有时,您需要在列表中的每个元素上执行代码。这被称为迭代,它可以用一个 while 循环和一个计数器变量来完成。
例如:
words = ["hello", "world", "spam", "eggs"]
counter = 0
max_index = len(words) - 1
while counter <= max_index:
word = words[counter]
print(word + "!")
counter = counter + 1
结果
hello!
world!
spam!
eggs!
上面的例子中我们迭代了列表中的所有元素,并使用索引访问元素。
使用 while 循环遍历列表需要相当多的代码,所以 Python 提供了 for 循环作为完成相同事情的快捷方式。
前一个例子中的代码可以用 for 循环来编写,如下所示:
words = ["hello", "world", "spam", "eggs"]
for word in words:
print(word + "!")
结果
hello!
world!
spam!
eggs!
Python中的 for 循环就像其他语言的 foreach 循环一样。
for 循环通常用于重复某些代码一定次数。这是通过将循环与范围 range 对象结合来完成的。
for i in range(5):
print("hello!")
结果
hello!
hello!
hello!
hello!
hello!
在 for 循环中使用 range 对象时不需要调用 list,因为它没有被索引,所以不需要列表。
创建一个计算器
# -*- coding: UTF-8 -*-
while True:
print("选项:")
print("输入 'add' 计算两个数相加")
print("输入 'subtract' 计算两个数相减")
print("输入 'multiply' 计算两个数相乘")
print("输入 'divide' 计算两个数相除")
print("输入 'quit' 退出程序")
user_input = input(": ")
if user_input == "quit":
break
elif user_input == "add":
print('要执行加法操作')
elif user_input == "subtract":
print('要执行减法操作')
elif user_input == "multiply":
print('要执行乘法操作')
elif user_input == "divide":
print('要执行除法操作')
else:
print("未知的输入,请根据提示输入!")
上面的代码是我们程序的起点。它接受用户输入,并将其与 if/elif 语句中的选项进行比较。
当用户输入 “quit” 时使用 break 语句跳出 while 循环结束程序。
接下来是获取用户要处理的数字。
下面的代码显示了这个计算器的相加部分。
elif user_input == "add":
num1 = float(input("输入一个数字: "))
num2 = float(input("输入另一个数字: "))
当用户输入 “add” 时,程序会提示输入两个数字,并存储在相应的变量中。
实际上,如果用户在提示输入数字时输入非数字输入,则此代码会崩溃。我们将在后面的模块中查看这样的问题。
程序的最后部分处理用户输入并显示它。
以下是加法部分的代码。
elif user_input == "add":
num1 = float(input("输入一个数字: "))
num2 = float(input("输入另一个数字: "))
result = str(num1 + num2)
print("结果是 " + result)
用户输入的是"add" 时,提示用户输入数字,然后计算两个数的和并打印输出。
完整的代码是:
# -*- coding: UTF-8 -*-
while True:
print("选项:")
print("输入 'add' 计算两个数相加")
print("输入 'subtract' 计算两个数相减")
print("输入 'multiply' 计算两个数相乘")
print("输入 'divide' 计算两个数相除")
print("输入 'quit' 退出程序")
user_input = input(": ")
if user_input == "quit":
break
elif user_input == "add":
num1 = float(input("输入一个数字: "))
num2 = float(input("输入另一个数字: "))
result = str(num1 + num2)
print("结果是 " + result)
elif user_input == "subtract":
num1 = float(input("输入一个数字: "))
num2 = float(input("输入另一个数字: "))
result = str(num1 - num2)
print("结果是 " + result)
elif user_input == "multiply":
num1 = float(input("输入一个数字: "))
num2 = float(input("输入另一个数字: "))
result = str(num1 * num2)
print("结果是 " + result)
elif user_input == "divide":
num1 = float(input("输入一个数字: "))
num2 = float(input("输入另一个数字: "))
result = str(num1 / num2)
print("结果是 " + result)
else:
print("未知的输入,请根据提示输入!")
本文地址:https://blog.csdn.net/weixin_44076570/article/details/107437464