【Python】6道Python入门算法练习题及源码

题目一:生成斐波那契数列的前 n 项 斐波那契数列的起始两项为 1,从第三项开始,每一项都等于前两项之和。 斐波那契数列 生成斐波那契数列的前 n 项 def fibonacci n : if n <

题目一:生成斐波那契数列的前 n 项

  • 斐波那契数列的起始两项为 1,从第三项开始,每一项都等于前两项之和。
#斐波那契数列  生成斐波那契数列的前 n 项

def fibonacci(n):
    if n <= 1:
        return n
    else:
        return fibonacci(n - 2) + fibonacci(n - 1)
        
def main():
    user\_input = input("请输入生成斐波那契数列第n项的值: ")

    try:
        print(fibonacci(int(user\_input, base=10)))
    except ValueError:
        print("输入无效,请输入一个有效的整数。")
        main()
        
if \_\_name\_\_ == "\_\_main\_\_":
    main()
AI写代码bash12345678910111213141516171819

题目二:冒泡排序

  • 冒泡排序(Bubble Sort)是一种简单的排序算法。它通过重复地遍历待排序的元素,比较相邻的元素并交换它们的位置,直到整个序列有序。
def bubble\_sort(arr):
    n = len(arr)
    for i in range(n):
        for j in range(0, n - i - 1):
            if arr\[j\] > arr\[j + 1\]:
                arr\[j\], arr\[j + 1\] = arr\[j + 1\], arr\[j\]
    return arr

def main():
    arr = \[64, 34, 25, 12, 22, 11, 90\]
    print(bubble\_sort(arr))

if \_\_name\_\_ == "\_\_main\_\_":
    main()
AI写代码bash1234567891011121314

题目三:二分查找

  • 二分查找(Binary Search)是一种高效的查找算法,适用于已经排序的数组或列表。它的基本思想是通过不断将查找范围分为两半,缩小查找的范围,从而快速找到目标元素。
def binary\_search(arr, target):
    low = 0
    high = len(arr) - 1

    while low <= high:
        mid = (low + high) // 2  # 计算中间索引
        if arr\[mid\] == target:
            return mid  # 找到目标,返回索引
        elif arr\[mid\] < target:
            low = mid + 1  # 目标在右半部分
        else:
            high = mid - 1  # 目标在左半部分

    return -1  # 没有找到目标,返回-1

def main():
    arr = \[1, 3, 5, 7, 9, 11, 13, 15, 17, 19\]
    target = 7
    result = binary\_search(arr, target)
    if result != -1:
        print(f"目标元素 {target} 在索引 {result} 处")
    else:
        print(f"目标元素 {target} 不在数组中")

if \_\_name\_\_ == "\_\_main\_\_":
    main()
AI写代码bash1234567891011121314151617181920212223242526

题目四:最大子数组和 (kadane算法)

  • 给定一个整数数组,找出一个具有最大和的连续子数组,并返回其和。这个子数组至少包含一个元素。
def kadane(nums):
    # 如果数组为空,返回0
    if not nums:
        return 0

    # 初始化当前子数组和和最大子数组和
    current\_sum = max\_sum = nums\[0\]

    for i in range(1, len(nums)):
        # 更新当前子数组和
        #print("init  current\_sum = :", current\_sum)
        current\_sum = max(nums\[i\], current\_sum + nums\[i\])
        #print("current\_sum = :", current\_sum)
        # 更新最大子数组和
        max\_sum = max(max\_sum, current\_sum)
       # print("max\_sum = :", max\_sum)
    return max\_sum

def main():
    nums = \[-3, 1, -3, 4, -1, 2, 1, -5, 4\]
    result = kadane(nums)
    print("最大子数组和:", result)

if \_\_name\_\_ == "\_\_main\_\_":
    main()
AI写代码bash12345678910111213141516171819202122232425

题目五:水仙花数

  • 水仙花数是指一个 n 位数,其各位数字的 n 次方之和等于该数本身。
\# 判断是否为水仙花数
def is\_armstrong\_number(number):
    # 提取百位、十位和个位的数字
    hundreds = number // 100
    tens = (number // 10) % 10
    ones = number % 10

    # 判断水仙花数条件:各位数字的立方和等于原数
    if (hundreds \*\* 3 + tens \*\* 3 + ones \*\* 3) == number:
        return True
    else:
        return False


def main():
    # 获取用户输入
    num = int(input("请输入一个三位数: "))

    # 判断输入是否是有效的三位数
    if 100 <= num <= 999:
        if is\_armstrong\_number(num):
            print(f"{num} 是一个水仙花数")
        else:
            print(f"{num} 不是水仙花数")
    else:
        print("请输入一个有效的三位数")

if \_\_name\_\_ == "\_\_main\_\_":
    main()
AI写代码bash1234567891011121314151617181920212223242526272829

题目六:判断一个数是否为质数

  • 质数(英文名:Prime number)又称素数,是指在大于1的自然数中,除了1和它本身以外不再有其他因数的自然数。
import math

def is\_prime(n):
    if n <= 1:
        return False
    if n == 2:
        return True
    if n % 2 == 0:
        return False
    for i in range(3, int(math.sqrt(n)) + 1, 2):
        if n % i == 0:
            return False
    return True

def main():
    # 输入一个数字并判断是否为质数
    num = int(input("请输入一个数:"))
    if is\_prime(num):
        print(f"{num} 是质数")
    else:
        print(f"{num} 不是质数")

if \_\_name\_\_ == "\_\_main\_\_":
    main()
AI写代码bash123456789101112131415161718192021222324