Python基础05 | 循环语句

135 阅读3分钟

修订历史:

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 breakcontinue 语句

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 质数检测

质数,又称素数,指在大于1自然数中,除了1和该数自身外,无法被其他自然数整除的数。

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

参考资料