# 程序逻辑
我们思考一个问题:如何通过所学的知识去解决实际的问题呢,那么就需要不断地锻炼我们的思维。下面我们通过前面所学的知识去解决一下实际问题。
1、寻找水仙花数
水仙花数(Narcissistic Number)也被称为阿姆斯特朗数(Armstrong Number),是指一个 n 位数,它的每个位上的数字的 n 次幂之和等于它本身。例如,153 是一个 3 位数的水仙花数,因为 1^3 + 5^3 + 3^3 = 153。
def is_narcissistic(num):
str_num = str(num)
n = len(str_num)
sum_of_num = 0
for bit in str_num:
sum_of_num += int(bit) ** n
return num == sum_of_num
# 列举出 100~1000 的水仙花数
narcissistic = [x for x in range(100,1001) if is_narcissistic(x)]
print(narcissistic)
2、给定一个正整数,输出其反转数,比如12345,输出54321
def reversal_num(num):
reversed_num = 0
while num > 0:
reversed_num = reversed_num * 10 + num % 10
num //= 10
return reversed_num
num = int(input('请输入数字:'))
print(reversal_num(num))
3、百钱百鸡问题,公鸡5元一只,母鸡3元一只,小鸡1元三只,用100块钱买一百只鸡,问公鸡、母鸡、小鸡各有多少只?
for x in range(0, 20):
for y in range(0, 33):
z = 100 - x - y
if 5 * x + 3 * y + z / 3 == 100:
print(f'公鸡: {x}只, 母鸡: {y}只, 小鸡: {z}只')
4、生成斐波那契数列的前20个数。
def fibonacci_iterative(n):
if n <= 0:
return []
elif n == 1:
return [1]
elif n == 2:
return [1, 1]
else:
sequence = [1, 1]
for _ in range(2, n):
sequence.append(sequence[-1] + sequence[-2])
return sequence
print(fibonacci_iterative(20))
5、找出10000以内的完美数
def is_perfect(n):
if n <= 1:
return False
divisor_sum = 1 # 1总是因子,但我们不包括n本身
for i in range(2, int(n**0.5) + 1): # 只检查到sqrt(n)即可,因为因子成对出现
if n % i == 0:
divisor_sum += i
if i != n // i: # 避免重复加入平方根因子
divisor_sum += n // i
return divisor_sum == n
# 找出10000以内的所有完美数
perfect_numbers = [num for num in range(1, 10001) if is_perfect(num)]
print(perfect_numbers)
6、输出100以内的所有的素数
def is_prime(n):
"""检查一个数是否为素数"""
if n < 2:
return False
for i in range(2, int(n**0.5) + 1):
if n % i == 0:
return False
return True
# 输出100以内所有的素数
print([x for x in range(1,101) if is_prime(x)])