修订历史:
- 2024/09/23 完成 for 和 while 语法笔记
- 主页链接:hydro.ac/d/datawhale…
1 for 语句
for 循环的特点
基于提供的范围,重复执行特定次数的操作。 for 循环的语法格式如下:
for iterating_var in sequence:
statements(s)
其中 sequence 可以 Python基础02|数据类型和操作 中讲解的文本序列类型(字符串),或序列类型(如列表、元组,range对象)。在循环中,每次迭代都会为 sequence 中的下一个元素赋值给 iterating_var。
示例
# sequence 为字符串
for char in "Python":
print(char) # 输出每个字符
# sequence 为列表
for item in [1, 2, 3, 4, 5]:
print(item) # 输出列表中的每个元素
# sequence 为元组
for item in (10, 20, 30, 40, 50):
print(item) # 输出元组中的每个元素
# sequence 为 range 对象
for number in range(1, 6): # 这将输出 1 到 5 的数字
print(number)
2 while 语句
当你不知道循环什么时候停下来的时候,可以试试 while 循环。
3 break 和 continue 语句
for number in range(1, 30): # 这将输出 1 到 15 之间的奇数
if number % 2 == 0: # 如果 number 是偶数,则跳过当次循环,继续下一个循环
continue
elif number > 15: # 如果 number 大于 15,则跳出整个循环
break
else:
pass # 占位符(不会被运行),表示什么也不做
print(number, end=" ")
4 例子
4.1 猜数字游戏
import random
# 随机生成一个1到100之间的整数作为目标数字
target_number = random.randint(1, 100)
# 初始化猜测次数
guess_count = 0
print("欢迎来到猜数字游戏!")
print("我已经想好了一个1到100之间的数字。")
# 开始游戏循环
while True:
# 获取用户输入并转换为整数
guess = int(input("请输入你的猜测:"))
# 增加猜测次数
guess_count += 1
# 检查猜测是否正确
if guess == target_number:
print(f"恭喜你!你猜对了!目标数字是 {target_number}。")
print(f"你总共猜了 {guess_count} 次。")
break # 结束游戏循环
elif guess < target_number:
print("太小了!请再试一次。")
else:
print("太大了!请再试一次。")
4.2 质数检测
4.2.1 简单直观的质数检测法
def is_prime(n):
if n < 2:
return False
for i in range(2, n):
if n % i == 0:
return False
return True
4.2.2 试除法
测试n是否为素数的最基本方法为试除法。此一程序将n除以每个大于1且小于等于n的平方根之整数m。若存在一个相除为整数的结果,则n不是素数;反之则是个素数。
def trial_division(n):
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
4.2.3 改进的试除法质数检测
def is_prime_efficient(n):
if n < 2:
return False
if n == 2:
return True
if n % 2 == 0:
return False
for i in range(3, int(n**0.5) + 1, 2):
if n % i == 0:
return False
return True
4.2.4 三种方法比较
import time
def print_timing(func_name, result, start_time):
""" 打印函数执行时间和结果 """
end_time = time.time()
print(f"Timing: {func_name}({big_prime}) is {result}, time = {(end_time - start_time) * 1000:.2f} ms")
# is_prime
start_time = time.time()
try:
result = is_prime(big_prime)
print_timing("is_prime", result, start_time)
except Exception as e:
print(f"Error in is_prime: {e}")
# trial_division
start_time = time.time()
try:
result = trial_division(big_prime)
print_timing("trial_division", result, start_time)
except Exception as e:
print(f"Error in trial_division: {e}")
# is_prime_efficient
start_time = time.time()
try:
result = is_prime_efficient(big_prime)
print_timing("is_prime_efficient", result, start_time)
except Exception as e:
print(f"Error in is_prime_efficient: {e}")
结果如下
Timing: is_prime(102030407) is True, time = 8937.52 ms
Timing: trial_division(102030407) is True, time = 1.06 ms
Timing: is_prime_efficient(102030407) is True, time = 0.56 ms