Python帮助:特殊数字总计

0 投票
1 回答
72 浏览
提问于 2025-04-14 17:01

我在写一段代码,用来找出特殊数字(1到10之间的质数),这段代码能正常运行。不过我想让它显示出有多少个这样的数字。目前它的输出是:

Enter smaller number (m): 4
Enter the larger number (n): 7
Special numbers: [5, 7]
Special numbers Brute force: [5, 7] 

但是我希望它能显示成“特殊数字 = 2: [5,7]”。

我试着加了一个if语句,但不知道该怎么把它放进我的代码里,下面是我的代码。

def main():
    m = int(input("Enter smaller number (m): "))
    n = int(input("Enter the larger number (n): "))
    if m >= n:
        print("Error: First number should be smaller than second")
    special_nums = locate_special_numbers(m, n)

    if len(special_nums) <= 5:
        print("Special numbers are:", special_nums)
    else:
        first_three = special_nums[:3]
        last_three = special_nums[-3:]
        print("First three smallest special numbers:", first_three)
        print("Last three biggest special numbers:", last_three)

    # Brute force approach
    special_numbers_brute_force = locate_special_numbers(m, n)
    print("Special numbers Brute force:", special_numbers_brute_force)


# lines 33-39 are not executing as expected
def amount_of_special_numbers(m, n):
    amount_of_special_numbersList = []
    for num in range(m, n + 1):
        if prime(num) and mirrored(num):
            amount_of_special_numbersList.append(num)
            print(
                "The total number of special number is:",
                len(amount_of_special_numbersList),
            )
            # Return the list after the first special number is found
            return amount_of_special_numbersList


if __name__ == "__main__":
    main()

1 个回答

0

我稍微改了一下你的代码,写了两个函数:is_prime(num)locate_special_numbers(m, n)

def is_prime(num):
    if num < 2:
        return False
    for i in range(2, int(num ** 0.5) + 1):
        if num % i == 0:
            return False
    return True

def locate_special_numbers(m, n):
    prime_numbers = []
    for num in range(m, n + 1):
        if is_prime(num):
            prime_numbers.append(num)
    return prime_numbers

def main():
    m = int(input("Enter smaller number (m): "))
    n = int(input("Enter the larger number (n): "))
    if m >= n:
        print("Error: First number should be smaller than second")
    special_nums = locate_special_numbers(m, n)

    if len(special_nums) <= 5:
        print("Special numbers are:",len(special_nums), ":", special_nums)
    else:
        first_three = special_nums[:3]
        last_three = special_nums[-3:]
        print("First three smallest special numbers:", first_three)
        print("Last three biggest special numbers:", last_three)

    # Brute force approach
    special_numbers_brute_force = locate_special_numbers(m, n)
    print("Special numbers Brute force:", special_numbers_brute_force)

if __name__ == "__main__":
    main()

这样我得到了以下输出:

Enter smaller number (m): 4
Enter the larger number (n): 7
Special numbers are: 2 : [5, 7]
Special numbers Brute force: [5, 7]

从代码中可以看到,print("特殊数字有:", len(special_nums), ":", special_nums) 这个语句对你是有效的。如果你想用格式化字符串的话,print("特殊数字有: %d" % len(special_nums), ":", special_nums) 也可以,不过这样会稍微难理解一些。

希望这对你有帮助!

撰写回答