1.range()函数的使用
range() 用于生成一个整数序列,常用于循环中。
语法:range(start, stop, step)
,其中:
- start:起始值(包含,默认 0)。
- stop:结束值(不包含)。
- step:步长(默认 1)。
返回一个 range 对象(返回值是一个迭代器对象, 如果需要查看里面的内容,需要用list转换为列表),可通过 list(range())
转换为列表。
创建range的3种方式:
注意range是左闭右开的。
range类型的优点 :不管range对象表示的整数序列有多长,所有range对象占用的内存空间都是相同的,因为仅仅需要存储start,stop和step,只有当用到range对象时,才会去计算序列中的相关元素
in与not in 判断整数序列中是否存在(不存在)指定的整数
例如:
1
2
for i in range(5):
print(i)
输出0-4的数字
1
2
for i in range(1, 7, 2):
print(i)
输出1,3,5
特别注意:
- stop 值不包含在序列中,容易误以为包含。
- step 可以为负数,表示逆序,但需确保 start > stop。
- range() 生成的是惰性序列,内存效率高,但直接打印需转换。
看一些特殊的例子:
1
2
3
4
l = list(range(15, 2, -3))
print(l) # 输出:[15, 12, 9, 6, 3]
print(9 in range(15, 2, -3)) # True
2.while循环
反复做同一件事情的情况,称为循环。循环结构的流程图如下所示:
循环的分类
- while
- for -in
语法结构
1
2
while 条件表达式:
条件执行体(循环体)
选择结构的if与循环结构while的区别:If是判断一次,条件为True执行一行;while是判断N+1次,条件为True执行N次
例如求0-4的累加和:
1
2
3
4
5
# 求0-4的累加和
sum = 0
for i in range(0, 5):
sum += i
print("0-4累加和是:", sum)
或者用while写:
1
2
3
4
5
6
j = 0
sum_ = 0
while j < 5 :
sum_ += j
j += 1
print("0-4的累加和是:", sum_)
四步循环法
- 初始化变量
- 条件判断
- 条件执行体(循环体)
- 改变变量
while循环的执行流程
特别注意:while必须有修改条件的语句(如
j += 1
),否则进入死循环。另外while与for in 可与 break 和 continue 配合使用。
嵌套 while 时,变量作用域混乱,需明确区分。
练习:while循环计算1-100(不包含100)之前的偶数和:
1
2
3
4
5
6
7
i = 1
sum = 0
while i < 100:
if i % 2 == 0:
sum += i
i += 1
print("1-100之间的偶数和为:", sum)
如果要求奇数和:注意 i % 2
输出有布尔值,可以用这个作为条件来判断
1
2
3
4
5
6
7
i = 1
sum = 0
while i <= 100:
if i % 2 :
sum += i
i += 1
print("1-100之间的奇数和为:", sum)
3.for-in循环
in表达从(字符串、序列等)中依次取值,又称为遍历
for-in遍历的对象必须是可迭代对象
for-in的语法结构
1
2
for 自定义的变量 in 可迭代对象:
循环体
for-in的执行图 :
循环体内不需要访问自定义变量,可以将自定义变量替代为下划线
特别注意:
- for in 适合遍历固定序列,内部隐式管理索引
- for in 可与 range() 结合使用生成索引。
- for in 支持解包迭代(如 for x, y in [(1, 2), (3, 4)])。
- 修改迭代对象(如列表)会导致未定义行为,建议复制或使用新列表。
一些例子:
1
2
for _ in range(1, 5):
print("俺老孙来也")
1
2
for x, y in [(1, 2), (3, 4)]:
print(x, y, x + y)
练习:100到999之间的水仙花数
水仙花数:例如153是水仙花数,因为
3*3*3+5*5*5+1*1*1=153
1
2
3
4
5
6
for i in range(100, 1000) :
b1 = i % 10
b2 = i // 10 % 10
b3 = i // 100 % 10
if b1 ** 3 + b2 ** 3 + b3 ** 3 == i :
print(i, "是水仙花数")
4.break、continue与else语句
(1)break
用于结束循环结构,通常与分支结构if一起使用
比如:键盘录入密码(正确密码是1234),只能最多录入3次,正确就退出循环:
1
2
3
4
5
6
7
for i in range(3) :
pwd = input("请录入密码:")
if pwd == "1234" :
print("录入密码正确")
break
else:
print("录入密码失败")
(2)continue
用于结束当前循环,进入下一次循环,通常与分支结构中的if一起使用
(3)else语句
与else语句配合使用的三种情况
1
2
3
4
5
6
7
8
9
for i in range(3) :
pwd = input("请输入密码")
if pwd == "1234":
print("密码输入正确")
break
else:
print("密码输入错误")
else:
print("三次密码都输入错误,请5分钟后尝试!")
如果执行了break,是不会执行和while/for in并列的else的:
5.嵌套循环
循环结构中又嵌套了另外的完整的循环结构,其中内层循环做为外层循环的循环体执行。
例如现在打印9*9
乘法表:
1
2
3
4
5
6
7
8
ans = ''
for i in range(1, 10):
for j in range(1, 10):
if i >= j:
ans += str(i) + "*" + str(j) + "=" + str(i * j) + "\t"
ans += "\n"
print(ans)
或者:注意控制条件for j in range(1, i)
1
2
3
4
5
6
7
ans = ''
for i in range(1, 10):
for j in range(1, i):
ans += str(i) + "*" + str(j) + "=" + str(i * j) + "\t"
ans += "\n"
print(ans)
再例如输出一个三行四列的矩形:
1
2
3
4
5
for i in range(3):
for j in range(4):
# 不换行输出
print("*", end="\t")
print() # 为了换一行
二重循环中的break和continue
二重循环中的break和continue用于控制本层循环
break 立即终止包含它的最近一层循环,并跳出该循环体的执行。
在多重循环中,break 只影响当前嵌套层,不会终止外层循环。
如果需要终止外层循环,可以通过标记或标志变量实现:
例如:
1
2
3
4
5
6
7
8
9
10
flag = False
for i in range(3):
for j in range(3):
if j == 1:
flag = True
break
print(f"i={i}, j={j}")
if flag:
continue
print(f"外层 i={i} 结束")
可以尝试猜测下这段代码输出什么。
1
2
3
i=0, j=0
i=1, j=0
i=2, j=0