【Python3】练习三

6 阅读4分钟

100到200的素数

题目 判断101-200之间有多少个素数,并输出所有素数

import math
# 遍历100到200之间的所有数字
for i in range(100,200):
    flag=0
    # 遍历2到i的平方根之间的所有数字
    for j in range(2,round(math.sqrt(i))+1):
        # 如果i能被j整除,则flag为1,跳出循环
        if i%j==0:
            flag=1
            break
    # 如果flag为1,则跳过本次循环
    if flag:
        continue
    # 打印i
    print(i)


print('\nSimplify the code with "else"\n')


# 遍历100到200之间的所有数字
for i in range(100,200):
    # 遍历2到i的平方根之间的所有数字
    for j in range(2,round(math.sqrt(i))+1):
        # 如果i能被j整除,则跳出循环
        if i%j==0:
            break
    # 如果循环正常结束,则打印i
    else:
        print(i)

这行代码是Python中一个for循环的一部分,用于遍历一个从2到round(math.sqrt(i))+1的整数序列。下面是对这行代码的详细解释:

for j in range(2, round(math.sqrt(i))+1)::

for j in range(start, stop): 是Python中创建一个循环的标准语法,其中j是循环变量,range(start, stop)生成一个从start到stop-1的整数序列。

start 是这个序列的起始值,这里是 2。 stop 是这个序列的终止值,这里是 round(math.sqrt(i))+1。 math.sqrt(i) 计算 i 的平方根。 round() 函数将计算结果四舍五入到最接近的整数。 +1 是为了确保循环包括 round(math.sqrt(i)) 这个值,因为 range 函数生成的序列不包括终止值。

用途:

这种循环通常用于检查一个数 i 是否是素数。在素数检测算法中,一个数 i 如果没有2到 sqrt(i) 之间的任何因子,则被认为是素数。 通过遍历从2到 sqrt(i) 的所有整数,并检查 i 是否能被这些数整除,可以确定 i 是否是素数。

注意事项:

math 模块需要在代码的开头导入,使用 import math。 如果 i 是一个很小的数,比如1或2,这个循环可能不会执行任何迭代,因为 range(2, x) 生成的序列需要 x 大于2。 这个循环的终止条件是 round(math.sqrt(i))+1,这意味着如果 i 是一个完全平方数,比如4、9、16等,round(math.sqrt(i)) 会等于 sqrt(i),但由于四舍五入,它可能会跳过一些重要的因子检查。因此,在某些情况下,可能需要更精确地处理平方根的计算。 总的来说,这行代码是用于遍历一个特定范围内的整数,通常用于数学计算,特别是素数检测。

水仙花数

题目 打印出所有的"水仙花数",所谓"水仙花数"是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个"水仙花数",因为153=1的三次方+5的三次方+3的三次方。

# 遍历100到999之间的所有数字
for i in range(100,1000):
    # 将数字转换为字符串
    s=str(i)
    # 获取个位数
    one=int(s[-1])
    # 获取十位数
    ten=int(s[-2])
    hun=int(s[-3])
    if i == one**3+ten**3+hun**3:
        print(i)

判断水仙花数

判断一个数是否为水仙花数

def is_narcissistic_number(num):
    # 将数字转换为字符串,方便逐位处理
    num_str = str(num)
    # 获取数字的位数
    n = len(num_str)
    # 计算每个位上的数字的 n 次幂之和
    sum_of_powers = sum(int(digit) ** n for digit in num_str)
    # 判断是否等于原数
    return sum_of_powers == num

# 测试
number = 153
if is_narcissistic_number(number):
    print(f"{number} 是水仙花数")
else:
    print(f"{number} 不是水仙花数")

输入一个三位数,判断它是否为水仙花数

def is_narcissistic_number(num):
    # 确保输入是一个三位数
    if num < 100 or num > 999:
        return False

    # 分解数字为百位、十位和个位
    hundreds = num // 100
    tens = (num // 10) % 10
    ones = num % 10

    # 计算每个位上数字的三次幂之和
    sum_of_cubes = hundreds ** 3 + tens ** 3 + ones ** 3

    # 判断是否为水仙花数
    return sum_of_cubes == num

# 测试代码
num = int(input("请输入一个三位数: "))
if is_narcissistic_number(num):
    print(f"{num} 是水仙花数")
else:
    print(f"{num} 不是水仙花数")