python个人练习(50-)

4

#50.最大公因数

#输入

def func1(a, b):
    num = min(a, b)
    if a == b:
        return a
    while a % num != 0 or b % num != 0:
        num -= 1
    return num


def func2(a, b):
    while b != 0:
        a, b = b, a % b
    return a


while True:
    try:
        a = int(input("请输入第一个正整数:"))
        b = int(input("请输入第一个正整数:"))
        if a < 1 or b < 1:
            print("请输入正整数!")
            continue
        print(func1(a, b))
        print(func2(a, b))
    except ValueError:
        print("请输入有效的数")

#输出

# 请输入第一个正整数:42
# 请输入第一个正整数:21 
# 21
# 21
# 请输入第一个正整数:1
# 请输入第一个正整数:1
# 1
# 1
# 请输入第一个正整数:25
# 请输入第一个正整数:14
# 1
# 1
# 请输入第一个正整数:33
# 请输入第一个正整数:36
# 3
# 3
# 请输入第一个正整数:-2
# 请输入第一个正整数:4
# 请输入正整数!
# 请输入第一个正整数:,,
# 请输入有效的数

#51.数组里面没有出现过的数

#输入

def find_missing_numbers(nums):
    n = len(nums)
    # 创建一个集合来存储所有出现过的数字
    present_numbers = set(nums)
    # 遍历 1 到 n 的范围,检查哪些数字不在集合中
    missing_numbers = [i for i in range(1, n + 1) if i not in present_numbers]
    return missing_numbers


while True:
    try:
        # 获取用户输入,并将其转换为整数列表
        user_input = input("请输入一个数字列表(用空格分隔每个数字):")
        List = [int(num) for num in user_input.split()]

        print("您输入的列表是:", List)

        missing = find_missing_numbers(List)
        print("Missing numbers:", missing)
    except ValueError:
        print("请输入有效的列表")

#输出

# 请输入一个数字列表(用空格分隔每个数字):2 4 7 1 1 1 1
# 您输入的列表是: [2, 4, 7, 1, 1, 1, 1]
# Missing numbers: [3, 5, 6]
# 请输入一个数字列表(用空格分隔每个数字):2 2 3 5 6   7 8
# 您输入的列表是: [2, 2, 3, 5, 6, 7, 8]
# Missing numbers: [1, 4]
# 请输入一个数字列表(用空格分隔每个数字):, 4 6 6 6 6 6 6 
# 请输入有效的列表

#52.替换空格

#输入

while True:
    try:
        a = input("请输入一串字符串:")
        a = a.replace(" ", "%")
        print(a)
    except ValueError:
        print("请输入有效的数!")

#输出

# 请输入一串字符串:dewjkdk ewjd ew  fwjke fw
# dewjkdk%ewjd%ew%%fwjke%fw
# 请输入一串字符串:121 ewf3 dk4  e
# 121%ewf3%dk4%%e
# 请输入一串字符串:,,, f ,d 
# ,,,%f%,d%

#53.快乐数

#输入

def kuaileshu(n, seen=None):
    if seen is None:
        seen = set()  # 初始化一个集合用于记录已出现的数字

    b = list(n)  # n 应该是字符串类型
    total = 0
    for i in b:
        total += int(i)**2
    # print(total)
    # print(seen)
    if total == 1:
        return "是快乐数"
    elif total in seen:
        return "不是快乐数"  # 如果结果重复出现,说明进入循环,不是快乐数
    else:
        seen.add(total)  # 将当前结果加入集合
        return kuaileshu(str(total), seen)  # 递归调用时传入字符串和集合


while True:
    try:
        n = int(input("请输入一个正整数:"))
        if n < 1:
            print("输入不是正整数!")
            continue
        result = kuaileshu(str(n))  # 第一次调用时将输入转换为字符串
        print(result)
    except ValueError:
        print("请输入有效的数!")

#输出

# 请输入一个正整数:,给
# 请输入有效的数!
# 请输入一个正整数:-1.4
# 请输入有效的数!
# 请输入一个正整数:-24
# 输入不是正整数!
# 请输入一个正整数:46
# 不是快乐数
# 请输入一个正整数:7
# 是快乐数
# 请输入一个正整数:101
# 不是快乐数
# 请输入一个正整数:43
# 不是快乐数
# 请输入一个正整数:48594
# 不是快乐数

#54.立方根

#输入

import math
while True:
    try:
        a = int(input("请输入一个正整数:"))
        if a < 1:
            print("输入不是正整数!")
            continue
        result = int(pow(a, 1/3))
        print(f"{a}的立方根是(向下取整):{result}")
    except ValueError:
        print("请输入有效的数")

#输出

# 请输入一个正整数:27
# 27的立方根是(向下取整):3
# 请输入一个正整数:87
# 87的立方根是(向下取整):4
# 请输入一个正整数:999
# 999的立方根是(向下取整):9
# 请输入一个正整数:0
# 输入不是正整数!
# 请输入一个正整数:-1
# 输入不是正整数!
# 请输入一个正整数:,.
# 请输入有效的数

#55.最长公共前缀

#输入

def longest_common_prefix(strs):
    if not strs:
        return ""  # 处理空列表

    shortest = min(strs, key=len)  # 找到最短字符串

    for i, char in enumerate(shortest):
        for other in strs:
            if other[i] != char:
                return shortest[:i]  # 遇到不匹配字符则返回当前前缀
    return shortest  # 全部匹配则返回最短字符串本身


while True:
    try:
        user_input = input("请输入一个字符串列表(用空格隔开):")
        input_list = user_input.split()
        print(input_list)
        if not input_list:
            print("输入为空,请重新输入!")
            continue

        result = longest_common_prefix(input_list)
        if result == "":
            print("无公共前缀")
        else:
            print("最长公共前缀:", [result])

    except Exception as e:
        print(f"发生错误: {e},请检查输入并重试!")

#输出

# 请输入一个字符串列表(用空格隔开):dqwuj wejk dfre
# ['dqwuj', 'wejk', 'dfre']
# 无公共前缀
# 请输入一个字符串列表(用空格隔开):123 123nsdk 1265478 12fsmfk
# ['123', '123nsdk', '1265478', '12fsmfk']
# 最长公共前缀: ['12']
# 请输入一个字符串列表(用空格隔开):ds
# ['ds']
# 最长公共前缀: ['ds']
# 请输入一个字符串列表(用空格隔开):  er efdf efd edddd
# ['er', 'efdf', 'efd', 'edddd']
# 最长公共前缀: ['e']