Search code examples
pythonpycharm

Python Help: total special numbers


I was writing code which finds special numbers (prime numbers between 1-10) and the code functions however I want it to list out how many numbers. Right now it says:

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

However I want it to say "special numbers = 2: [5,7]".

I tried adding an if statement but didn't know how to add it in to my code, I'll list the code below.

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()

Solution

  • I changed your code a bit and wrote the is_prime(num) and locate_special_numbers(m, n) functions.

    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()
    

    This gave me the output of:

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

    As you can see in the code, print("Special numbers are:",len(special_nums), ":", special_nums) would work for you. If you wanted to use formatted strings print("Special numbers are: %d" %len(special_nums), ":", special_nums) would also work although it would be harder to understand. Hope this helps!