python基础语法--顺序结构
Python中的顺序结构主要包括流程控制语句,如 if
、while
和 for
语句。这些语句允许你在程序中定义不同的执行路径,从而根据条件或循环次数来改变代码的执行流程。下面详细介绍这些语句的使用方法和示例。
if
语句
if
语句用于根据某个条件来决定是否执行一段代码。if
语句的基本语法如下:
if condition:
# 如果条件为真,则执行这里的代码
此外,还可以加上 elif
(else if)和 else
子句来扩展 if
语句的功能。
if
语句可以使用逻辑运算符 and
、or
和 not
来组合多个条件表达式,从而实现更复杂的逻辑判断。下面详细介绍这些逻辑运算符的用法:
运算符
1. and
运算符
and
运算符用于连接两个条件表达式,只有当两个条件都为真时,整个表达式的结果才为真。
示例
expression1 and expression2
假设我们要判断一个人是否成年且是否有驾照:
age = 20
has_license = True
if age >= 18 and has_license:
print("成年且有驾照")
else:
print("未成年后/或没有驾照")
在这个例子中,只有当 age >= 18
和 has_license
都为 True
时,才会执行 print("成年且有驾照")
。
2. or
运算符
or
运算符用于连接两个条件表达式,只要有一个条件为真,整个表达式的结果就为真。
示例
expression1 or expression2
假设我们需要判断一个人是否符合以下任一条件:年龄大于等于18岁或有驾照:
age = 17
has_license = True
if age >= 18 or has_license:
print("符合条件")
else:
print("不符合条件")
在这个例子中,只要 age >= 18
或 has_license
中至少有一个为 True
,就会执行 print("符合条件")
。
3. not
运算符
not
运算符用于取反一个条件表达式的结果,即如果原条件为真,则取反后为假;如果原条件为假,则取反后为真。
示例
not expression
假设我们需要判断一个人是否未成年:
age = 17
if not age >= 18:
print("未成年")
else:
print("成年")
在这个例子中,age >= 18
为 False
,取反后为 True
,因此执行 print("未成年")
。
综合示例
下面是一个综合示例,演示如何使用 and
、or
和 not
运算符来组合多个条件表达式:
age = 17
has_license = False
is_student = True
# 判断是否符合以下条件之一:成年且有驾照,或者未成年的学生
if (age >= 18 and has_license) or (age < 18 and is_student):
print("符合条件")
else:
print("不符合条件")
在这个例子中,我们使用了 and
和 or
来组合多个条件:
- 如果
age >= 18
且has_license
,则符合条件。 - 如果
age < 18
且is_student
,则符合条件。
优先级
逻辑运算符的优先级如下:
not
and
or
这意味着 not
的优先级最高,其次是 and
,最后是 or
。如果需要改变优先级,可以使用括号 ()
来明确表达式的顺序。
示例
age = 20
has_license = False
is_student = True
if (age >= 18 and not has_license) or is_student:
print("符合条件")
else:
print("不符合条件")
在这个例子中,not has_license
的优先级高于 and
运算符,因此先计算 not has_license
。
总结
使用 and
、or
和 not
运算符可以组合多个条件表达式,从而实现更复杂的逻辑判断。这些逻辑运算符的合理使用可以使你的代码更加清晰和高效。
and
:所有条件都为真时,整个表达式为真。or
:只要有一个条件为真,整个表达式为真。not
:取反条件表达式的结果。
示例代码
常见用法
x = 10
if x > 0:
print("x 是正数")
elif x == 0:
print("x 是零")
else:
print("x 是负数")
直接将结果赋值给一个变量
在一个条件表达式内可以嵌套另一个条件表达式
a = 6
b = 8
print('a大于b' if a > b else ('a小于b' if a < b else 'a等于b'))
# a小于b
题目
关于条件表达式的一些题目:
对于A选项:
在Python中,if
语句通常后面可以跟着elif
(else if
)和else
来构成完整的条件语句。在这种情况下,else
应该跟在if
语句的后面,而不是在其中间,作为另一个条件分支的开始。所以这个选项是错误的。
正确的语法应该是:
if x < y:
print('foo')
else:
print('bar')
在这个语法中,如果 x
小于 y
,则打印 'foo'
,否则打印 'bar'
。这样,每个分支都有清晰的开始和结束,遵循了Python语法的规定。
对于D选项:
这个Python语句是一个简单的条件语句,用于比较两个变量x
和y
的大小关系。如果x
小于y
,则会执行冒号后面的代码块,否则不执行。让我们逐步解析这个语句:
-
if x < y
:这是一个条件语句的开始,检查条件是否成立。条件是 x < y,如果x小于y,则条件成立,执行接下来的代码块。 -
print('foo');print('bac');print('baz')
:这是条件成立时执行的代码块。它包含三个独立的打印语句,每个语句后面都有一个分号。这表示这三个打印语句是一行内的连续语句,不需要使用缩进或换行符来分隔。在条件成立时,将按顺序执行这三个打印语句。
综上所述,如果变量x小于变量y,则会依次打印 'foo'
、'bac'
和'baz'
,否则不执行任何操作。
while
循环
while
循环用于在满足某个条件时重复执行一段代码。while
循环的基本语法如下:
while condition:
# 如果条件为真,则执行这里的代码
需要注意的是,在 while
循环中,必须确保循环条件最终会变为假,否则会导致无限循环。
示例代码
count = 0
while count < 5:
print("Count:", count)
count += 1
题目
def avg_input():
total = 0
count = 0
while True:
x = input()
if x == '': # 如果输入为空字符串,则结束循环
break
total += float(x)
count += 1
if count == 0:
return 'N/A'
else:
return round(total / count, 1)
print(avg_input())
for
循环
for
循环用于遍历序列(如列表、元组、字符串等)中的元素。for
循环的基本语法如下:
for variable in iterable:
# 对于 iterable 中的每个元素,执行这里的代码
for
循环也可以使用 range()
函数来生成一系列数字。
示例代码
# 遍历列表
numbers = [1, 2, 3, 4, 5]
for number in numbers:
print(number)
# 使用 range() 生成数字序列
for i in range(5):
print(i)
-
如果循环体内不需要使用自定义的变量,可以将自定义对象替换为
_
; -
for - in
循环语句通常用来遍历range
、列表、元组、字符串等序列;
# 使用range返回值作为迭代对象
for number in range(1, 4):
print(number)
# 不需要使用自定义变量,用_替代
for _ in range(1, 4): # 打印三次 hello
print('hello')
# 遍历字典, 变量返回的是key值
d = { 'Fruits':86, 'Books':83, 'Videos':2 }
for elem in d:
print(elem)
# 遍历字典,返回value值
for value in d.values():
print(value)
# 遍历字典,返回key,value值
for key, value in d.items():
print(key, '->', value)
- 如果想要在循环的过程更改序列的内容,最好使用序列的切片作为迭代对象;
worlds = ['Java', 'Python', 'C++', 'MySql']
# 将长度大于3的字符串移除
for world in worlds[:]:
if len(world) > 3:
worlds.remove(world)
print(worlds)
- 如果在遍历序列的过程中需要访问元素的索引,有以下几种实现方式:
L = ['Java','Python','Swift','Kotlin']
# 第1种实现方式
index = 0
for item in L:
print('L[{}] = {}'.format(index,item))
index += 1
# 第2种实现方式
for index in range(len(L)):
print('L[{}] = {}'.format(index,L[index]))
# 第3种方法
index = 0
while index < len(L):
print('L[{}] = {}'.format(index, L[index])
index += 1
# 第4种方法
# 可以调用内置函数enumerate(类enumerate的构造方法)将要遍历的序列转换为enumerate对象。
print(enumerate(L)) # <enumerate object at 0x103b03a20>
print(list(enumerate(L)))
# [(0,Java'),(1,'Python'),(2,'Swift'),(3,'Kotlin')]
# 还可以指定索引的起始值
print(list(enumerate(L, 1))
# [(1,Java'),(2,'Python'),(3,'Swift'),(4,'Kotlin')]
for index, item in list(enumerate(L)):
print('L[{}] = {}'.format(index,item))
# 或者
for index, item in enumerate(L):
print('L[{}] = {}'.format(index,item))
- 并行遍历–>同时遍历多个可迭代对象
例如:列表names中存放姓名,列表ages中存放对应的年龄。如果想同时遍历这两个列表,打印出所有的姓名及对应的年龄,可以这样实现:
实现一:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
for i in range(len(names)):
print(names[i],'的年龄是:', ages[i])
实现二:
如果需要同时遍历多个可迭代对象,可以调用内置函数zip(类zi的构造方法)将多个可迭代对象打包压缩成zip对象:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
print(list(zip(names, ages)))
# [('Jack', 16), ('Mike', 32), ('Tom', 43)]
或:
for name, age in zip(names, ages):
print(name, '->', age)
# Jack -> 16
# Mike -> 32
# Tom -> 43
可以使用 *
进行解压操作:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
a = list(zip(names, ages)) # 将zip对象转换为列表
print(a) # [('Jack', 16), ('Mike', 32), ('Tom', 43)]
x, y = zip(*a) # 直接使用zip结果解压
print(list(x)) # ['Jack', 'Mike', 'Tom']
print(list(y)) # [16, 32, 43]
错误示例:
names = ['Jack', 'Mike', 'Tom']
ages = [16, 32, 43]
a = zip(names, ages) # a此时是一个zip对象
print(list(a)) # [('Jack', 16), ('Mike', 32), ('Tom', 43)]
# 内容被清空了
x, y= zip(*a)
print(list(x))
print(list(y))
运行报错:
问题出在 zip
函数的使用上。在代码中,当执行 print(list(a))
后,a
已经被消耗完了。这是因为 zip
函数是一个迭代器,一旦被迭代完,它的内容就会被清空。
因此,当你尝试解压 a
的时候,a
已经为空,导致解压失败。
题目
这段代码意图是将列表 x
中的每个字符串转换为大写,但实际上它并没有起到预期的作用。
原因在于 upper()
方法并不会修改原字符串,而是返回一个新的字符串,该字符串是原字符串的大写版本。因此,在你的代码中,调用 i.upper()
并没有对原列表 x
中的字符串进行修改,而是返回了大写版本的字符串,但并没有进行任何操作。正确写法,如下:
# 方法一:使用列表推导式
x = [i.upper() for i in x]
print(x) # ['AB', 'CD']
# 方法二:修改原列表
for i in range(len(x)):
x[i] = x[i].upper()
print(x) # ['AB', 'CD']
- 在
for
循环中,我们遍历列表a
中的每一个元素。循环的迭代器是a[-1]
,即列表a
中的最后一个元素。 - 在每一次迭代中,我们将列表
a
中的最后一个元素赋值给a[-1]
。由于a[-1]
指向列表中的最后一个元素,因此这实际上是在修改列表中的元素。 - 然后,我们打印出
a[-1]
的值。由于a[-1]
在每次迭代中都会被重新赋值为列表a
中的当前元素,因此打印的结果是[0, 1, 2, 3]
中的每一个元素。
这段代码的目的是将列表 x
中的每个字符串转换为大写,并将转换后的字符串添加到列表 x
的末尾。然而,这段代码会导致意外的结果。
- 在
for
循环中,你正在遍历列表x
中的元素,并对每个元素执行i.upper()
来将其转换为大写。然后,你尝试将转换后的字符串添加到列表 x 的末尾,这会改变正在遍历的列表,导致无限循环。 - 具体来说,当循环执行到第一个元素
'ab'
时,它会将其转换为大写形式'AB'
并将其添加到x
的末尾。然后,循环继续下一个元素,但此时列表x
已经改变了,它现在包含了额外的大写字符串'AB'
,因此循环将永远不会结束。
这也是在前面,我们说 “如果想要在循环的过程更改序列的内容,最好使用序列的切片作为迭代对象”:
x=['ab','cd']
for i in x[:]:
x.append(i.upper())
print(x)
# ['ab', 'cd', 'AB', 'CD']
当然,还有以下两种方法可以实现:
# 方法一:使用另一个列表存储转换后的字符串
x = ['ab', 'cd']
result = []
for i in x:
result.append(i.upper())
x.extend(result)
print(x) # ['ab', 'cd', 'AB', 'CD']
# 方法二:使用列表推导式创建新的列表
x = ['ab', 'cd']
x = x + [i.upper() for i in x]
print(x) # ['ab', 'cd', 'AB', 'CD']
综合示例
下面是一个综合示例,展示了如何在 Python 中使用 if
、while
和 for
语句来完成一些简单的任务。
# 定义一个整数列表
numbers = [1, 2, 3, 4, 5]
# 使用 for 循环遍历列表
for number in numbers:
if number % 2 == 0:
print(f"{number} 是偶数")
else:
print(f"{number} 是奇数")
# 使用 while 循环打印从 1 到 5 的数字
i = 1
while i <= 5:
print(f"当前数字是 {i}")
i += 1
# 使用 if 语句检查一个条件
age = 20
if age >= 18:
print("成年")
else:
print("未成年")
其他控制流语句
除了 if
、while
和 for
语句外,Python 还提供了一些其他的控制流语句,如 break
、continue
和 pass
。
break
:用于立即退出循环。continue
:用于跳过当前循环中的剩余代码,继续执行下一次迭代。pass
:是一个占位符语句,用于在语法上需要一个语句的地方,但实际上不需要做任何事情。
示例代码
# 使用 break 退出循环
for i in range(10):
if i == 5:
break
print(i)
# 使用 continue 跳过特定的迭代
for i in range(10):
if i % 2 == 0:
continue
print(i)
# 使用 pass 作为占位符
def dummy_function():
pass
今天的分享就到这里了,如果,你感觉这篇博客对你有帮助的话,就点个赞吧!感谢感谢……