Top 35 Python Interview Questions for Freshers

Below is a detailed blog-style response for the “Top 35 Python Coding Questions for Interview for Freshers.” I’ve avoided questions that rely heavily on built-in functions and provided detailed solutions with comments in the code for clarity. Each question includes a problem statement, solution, and explanation through comments.

Table of Contents:


1. Reverse a String Without Using Built-in Functions

Problem: Write a program to reverse a string without using Python’s built-in reverse or slicing methods.

def reverse_string(s):
    # Convert string to list of characters since strings are immutable
    chars = list(s)
    left, right = 0, len(chars) - 1

    # Swap characters from start and end until pointers meet
    while left < right:
        chars[left], chars[right] = chars[right], chars[left]
        left += 1
        right -= 1

    # Join characters back into a string
    result = ''
    for char in chars:
        result += char
    return result

# Test the function
print(reverse_string("Hello"))  # Output: "olleH"

2. Check if a Number is Palindrome

Problem: Determine if a number is a palindrome without converting it to a string.

def is_palindrome_number(n):
    # Handle negative numbers (not palindromes)
    if n < 0:
        return False

    # Store original number
    original = n
    reversed_num = 0

    # Reverse the number by extracting digits
    while n > 0:
        digit = n % 10  # Extract last digit
        reversed_num = reversed_num * 10 + digit  # Build reversed number
        n = n // 10  # Remove last digit

    # Compare original with reversed
    return original == reversed_num

# Test the function
print(is_palindrome_number(121))  # Output: True
print(is_palindrome_number(123))  # Output: False

3. Find the Factorial of a Number

Problem: Calculate the factorial of a number using iteration (no recursion or built-ins).

def factorial(n):
    # Handle edge cases
    if n < 0:
        return "Factorial not defined for negative numbers"
    if n == 0 or n == 1:
        return 1

    # Initialize result
    result = 1

    # Multiply numbers from 2 to n
    for i in range(2, n + 1):
        result *= i

    return result

# Test the function
print(factorial(5))  # Output: 120

4. Check if Two Strings are Anagrams

Problem: Check if two strings are anagrams without using sorting or built-ins.

def are_anagrams(str1, str2):
    # Check if lengths are different
    if len(str1) != len(str2):
        return False

    # Create frequency arrays for characters (assuming lowercase a-z)
    freq1 = [0] * 26
    freq2 = [0] * 26

    # Count frequency of characters in str1
    for char in str1:
        freq1[ord(char) - ord('a')] += 1

    # Count frequency of characters in str2
    for char in str2:
        freq2[ord(char) - ord('a')] += 1

    # Compare frequency arrays
    for i in range(26):
        if freq1[i] != freq2[i]:
            return False

    return True

# Test the function
print(are_anagrams("listen", "silent"))  # Output: True
print(are_anagrams("hello", "world"))    # Output: False

5. Find the Largest Element in an Array

Problem: Find the largest element in an array without using max().

def find_largest(arr):
    # Check if array is empty
    if not arr:
        return None

    # Initialize largest as first element
    largest = arr[0]

    # Compare each element with largest
    for i in range(1, len(arr)):
        if arr[i] > largest:
            largest = arr[i]

    return largest

# Test the function
print(find_largest([3, 5, 1, 9, 2]))  # Output: 9

6. Sum of Digits in a Number

Problem: Calculate the sum of digits in a number without converting to string.

def sum_of_digits(n):
    # Handle negative numbers by taking absolute value
    n = abs(n)
    total = 0

    # Extract digits and add them
    while n > 0:
        total += n % 10  # Add last digit
        n //= 10        # Remove last digit

    return total

# Test the function
print(sum_of_digits(123))  # Output: 6

7. Check if a Number is Prime

Problem: Determine if a number is prime without using built-ins.

def is_prime(n):
    # Handle edge cases
    if n <= 1:
        return False
    if n == 2:
        return True

    # Check divisibility up to square root of n
    for i in range(2, int(n ** 0.5) + 1):
        if n % i == 0:
            return False

    return True

# Test the function
print(is_prime(17))  # Output: True
print(is_prime(4))   # Output: False

8. Fibonacci Series up to N Terms

Problem: Generate the Fibonacci series up to N terms without recursion.

def fibonacci(n):
    # Handle edge cases
    if n <= 0:
        return []
    if n == 1:
        return [0]

    # Initialize first two terms
    fib = [0, 1]

    # Generate subsequent terms
    for i in range(2, n):
        fib.append(fib[i-1] + fib[i-2])

    return fib

# Test the function
print(fibonacci(6))  # Output: [0, 1, 1, 2, 3, 5]

9. Swap Two Numbers Without a Third Variable

Problem: Swap two numbers without using a temporary variable.

def swap_numbers(a, b):
    # Use arithmetic to swap
    a = a + b  # Add b to a
    b = a - b  # Subtract original b from sum to get original a
    a = a - b  # Subtract new b (original a) from sum to get original b

    return a, b

# Test the function
a, b = 5, 10
a, b = swap_numbers(a, b)
print(a, b)  # Output: 10 5

10. Find GCD of Two Numbers

Problem: Calculate the GCD of two numbers using Euclidean algorithm.

def gcd(a, b):
    # Ensure positive numbers
    a, b = abs(a), abs(b)

    # Keep dividing until remainder is 0
    while b:
        a, b = b, a % b

    return a

# Test the function
print(gcd(48, 18))  # Output: 6

11. Count Vowels in a String

Problem: Count the number of vowels in a string without using built-ins.

def count_vowels(s):
    # Define vowels
    vowels = {'a', 'e', 'i', 'o', 'u', 'A', 'E', 'I', 'O', 'U'}
    count = 0

    # Iterate through string and count vowels
    for char in s:
        if char in vowels:
            count += 1

    return count

# Test the function
print(count_vowels("Hello"))  # Output: 2

12. Merge Two Sorted Arrays

Problem: Merge two sorted arrays into one sorted array without using sort().

def merge_sorted_arrays(arr1, arr2):
    # Initialize result array and pointers
    merged = []
    i, j = 0, 0

    # Compare elements and merge
    while i < len(arr1) and j < len(arr2):
        if arr1[i] <= arr2[j]:
            merged.append(arr1[i])
            i += 1
        else:
            merged.append(arr2[j])
            j += 1

    # Add remaining elements from arr1
    while i < len(arr1):
        merged.append(arr1[i])
        i += 1

    # Add remaining elements from arr2
    while j < len(arr2):
        merged.append(arr2[j])
        j += 1

    return merged

# Test the function
print(merge_sorted_arrays([1, 3, 5], [2, 4, 6]))  # Output: [1, 2, 3, 4, 5, 6]

13. Find Missing Number in Array

Problem: Find the missing number in an array of 1 to N without using sum().

def find_missing_number(arr, n):
    # XOR of all numbers from 1 to n
    xor_all = 0
    for i in range(1, n + 1):
        xor_all ^= i

    # XOR of all array elements
    xor_arr = 0
    for num in arr:
        xor_arr ^= num

    # Missing number is XOR of xor_all and xor_arr
    return xor_all ^ xor_arr

# Test the function
print(find_missing_number([1, 2, 4, 5], 5))  # Output: 3

14. Remove Duplicates from Array

Problem: Remove duplicates from an unsorted array without using sets.

def remove_duplicates(arr):
    # Initialize result array
    result = []

    # Check each element and add if not already present
    for num in arr:
        found = False
        for res in result:
            if res == num:
                found = True
                break
        if not found:
            result.append(num)

    return result

# Test the function
print(remove_duplicates([1, 3, 5, 3, 1]))  # Output: [1, 3, 5]

15. Check if Array is Sorted

Problem: Check if an array is sorted in ascending order.

def is_sorted(arr):
    # Compare adjacent elements
    for i in range(len(arr) - 1):
        if arr[i] > arr[i + 1]:
            return False

    return True

# Test the function
print(is_sorted([1, 2, 3, 4]))  # Output: True
print(is_sorted([1, 3, 2, 4]))  # Output: False

16. Rotate Array to the Right by K Steps

Problem: Rotate an array to the right by K steps without using extra space.

def rotate_array(arr, k):
    n = len(arr)
    # Handle cases where k > n
    k = k % n

    # Reverse entire array
    reverse(arr, 0, n - 1)
    # Reverse first k elements
    reverse(arr, 0, k - 1)
    # Reverse remaining n-k elements
    reverse(arr, k, n - 1)

    return arr

def reverse(arr, start, end):
    # Swap elements from start to end
    while start < end:
        arr[start], arr[end] = arr[end], arr[start]
        start += 1
        end -= 1

# Test the function
arr = [1, 2, 3, 4, 5]
print(rotate_array(arr, 2))  # Output: [4, 5, 1, 2, 3]

17. Find Second Largest Element in Array

Problem: Find the second largest element in an array.

def second_largest(arr):
    # Check if array has less than 2 elements
    if len(arr) < 2:
        return None

    # Initialize largest and second largest
    largest = arr[0]
    second = None

    # Traverse array
    for i in range(1, len(arr)):
        if arr[i] > largest:
            second = largest
            largest = arr[i]
        elif arr[i] != largest and (second is None or arr[i] > second):
            second = arr[i]

    return second

# Test the function
print(second_largest([5, 2, 9, 1, 7]))  # Output: 7

18. Count Occurrences of a Character in String

Problem: Count occurrences of a specific character in a string.

def count_char(s, char):
    count = 0

    # Iterate through string and count occurrences
    for c in s:
        if c == char:
            count += 1

    return count

# Test the function
print(count_char("hello", "l"))  # Output: 2

19. Find Common Elements in Two Arrays

Problem: Find common elements between two arrays without using sets.

def find_common(arr1, arr2):
    # Initialize result array
    common = []

    # Check each element of arr1 in arr2
    for num1 in arr1:
        for num2 in arr2:
            if num1 == num2:
                # Add to common if not already present
                if num1 not in common:
                    common.append(num1)
                break

    return common

# Test the function
print(find_common([1, 2, 3], [2, 3, 4]))  # Output: [2, 3]

20. Check if String is Balanced (Parentheses)

Problem: Check if a string with parentheses is balanced.

def is_balanced(s):
    # Initialize stack
    stack = []

    # Iterate through string
    for char in s:
        if char == '(':
            stack.append(char)
        elif char == ')':
            if not stack:  # Stack empty, unbalanced
                return False
            stack.pop()  # Remove matching '('

    # Check if stack is empty (fully balanced)
    return len(stack) == 0

# Test the function
print(is_balanced("((()))"))  # Output: True
print(is_balanced("(()"))     # Output: False

21. Find Power of a Number

Problem: Calculate power of a number (a^b) without using ** operator.

def power(a, b):
    # Handle edge cases
    if b < 0:
        return "Negative exponents not supported"
    if b == 0:
        return 1

    # Initialize result
    result = 1

    # Multiply a, b times
    for _ in range(b):
        result *= a

    return result

# Test the function
print(power(2, 3))  # Output: 8

22. Check if Two Strings are Rotations

Problem: Check if one string is a rotation of another.

def are_rotations(str1, str2):
    # Check if lengths are different
    if len(str1) != len(str2):
        return False

    # Double str1 and check if str2 is substring
    temp = str1 + str1
    i, j = 0, 0

    # Manual substring check
    while i < len(temp) and j < len(str2):
        if temp[i] == str2[j]:
            j += 1
        i += 1

    return j == len(str2)

# Test the function
print(are_rotations("abcde", "cdeab"))  # Output: True

23. Find First Non-Repeating Character

Problem: Find the first non-repeating character in a string.

def first_non_repeating(s):
    # Create frequency array
    freq = [0] * 26

    # Count frequency of each character
    for char in s:
        freq[ord(char) - ord('a')] += 1

    # Find first character with frequency 1
    for char in s:
        if freq[ord(char) - ord('a')] == 1:
            return char

    return None

# Test the function
print(first_non_repeating("aabbc"))  # Output: 'c'

24. Multiply Two Numbers Without *

Problem: Multiply two numbers without using the multiplication operator.

def multiply(a, b):
    # Handle negative numbers
    sign = -1 if (a < 0) ^ (b < 0) else 1
    a, b = abs(a), abs(b)
    result = 0

    # Add a to itself b times
    for _ in range(b):
        result += a

    return sign * result

# Test the function
print(multiply(5, 3))  # Output: 15

25. Reverse Words in a Sentence

Problem: Reverse the order of words in a sentence.

def reverse_words(s):
    # Convert string to list for manipulation
    chars = list(s)
    # Reverse entire string
    reverse(chars, 0, len(chars) - 1)

    # Reverse each word
    start = 0
    for i in range(len(chars) + 1):
        if i == len(chars) or chars[i] == ' ':
            reverse(chars, start, i - 1)
            start = i + 1

    # Join back to string
    return ''.join(chars)

def reverse(arr, start, end):
    while start < end:
        arr[start], arr[end] = arr[end], arr[start]
        start += 1
        end -= 1

# Test the function
print(reverse_words("Hello World"))  # Output: "World Hello"

26. Find Pair with Given Sum in Array

Problem: Find a pair in an array with a given sum.

def find_pair(arr, target):
    # Check each pair
    for i in range(len(arr)):
        for j in range(i + 1, len(arr)):
            if arr[i] + arr[j] == target:
                return arr[i], arr[j]

    return None

# Test the function
print(find_pair([2, 4, 3, 5, 7], 9))  # Output: (4, 5)

27. Convert Decimal to Binary

Problem: Convert a decimal number to binary without built-ins.

def decimal_to_binary(n):
    if n == 0:
        return "0"

    binary = ""
    # Extract bits by dividing by 2
    while n > 0:
        binary = str(n % 2) + binary
        n //= 2

    return binary

# Test the function
print(decimal_to_binary(10))  # Output: "1010"

28. Check if Number is Power of 2

Problem: Check if a number is a power of 2.

def is_power_of_two(n):
    # Power of 2 has only one 1-bit in binary
    if n <= 0:
        return False

    # Keep dividing by 2 until odd
    while n > 1:
        if n % 2 != 0:
            return False
        n //= 2

    return True

# Test the function
print(is_power_of_two(8))  # Output: True
print(is_power_of_two(10)) # Output: False

29. Find Middle Element of Linked List

Problem: Find the middle element of a singly linked list (simulated with array).

def find_middle(arr):
    # Use slow and fast pointers
    if not arr:
        return None

    slow = 0
    fast = 0

    # Move fast pointer twice as fast as slow
    while fast < len(arr) and fast + 1 < len(arr):
        slow += 1
        fast += 2

    return arr[slow]

# Test the function
print(find_middle([1, 2, 3, 4, 5]))  # Output: 3

30. Count Set Bits in a Number

Problem: Count the number of 1s in the binary representation of a number.

def count_set_bits(n):
    count = 0

    # Check each bit by right shifting
    while n > 0:
        count += n & 1  # Add 1 if least significant bit is 1
        n >>= 1        # Right shift to check next bit

    return count

# Test the function
print(count_set_bits(13))  # Output: 3 (13 = 1101 in binary)

31. Check if Two Arrays are Equal

Problem: Check if two arrays are equal.

def are_arrays_equal(arr1, arr2):
    # Check lengths first
    if len(arr1) != len(arr2):
        return False

    # Compare each element
    for i in range(len(arr1)):
        if arr1[i] != arr2[i]:
            return False

    return True

# Test the function
print(are_arrays_equal([1, 2, 3], [1, 2, 3]))  # Output: True
print(are_arrays_equal([1, 2], [2, 1]))       # Output: False

32. Find Minimum Distance Between Two Numbers

Problem: Find the minimum distance between two numbers in an array.

def min_distance(arr, x, y):
    min_dist = float('inf')
    prev_index = -1

    # Traverse array and track distance
    for i in range(len(arr)):
        if arr[i] == x or arr[i] == y:
            if prev_index != -1 and arr[prev_index] != arr[i]:
                min_dist = min(min_dist, i - prev_index)
            prev_index = i

    return min_dist if min_dist != float('inf') else -1

# Test the function
print(min_distance([1, 2, 3, 2], 2, 3))  # Output: 1

33. Find Longest Consecutive Sequence

Problem: Find the length of the longest consecutive sequence in an array.

def longest_consecutive(arr):
    if not arr:
        return 0

    # Use a set-like approach with array
    longest = 0
    for num in arr:
        if num - 1 not in arr:  # Start of a sequence
            current = num
            current_streak = 1
            while current + 1 in arr:
                current += 1
                current_streak += 1
            longest = max(longest, current_streak)

    return longest

# Test the function
print(longest_consecutive([1, 9, 3, 10, 4, 20, 2]))  # Output: 4 (1, 2, 3, 4)

34. Check if String Contains Only Digits

Problem: Check if a string contains only digits.

def is_digit_only(s):
    if not s:
        return True

    # Check each character against digit range
    for char in s:
        if ord(char) < ord('0') or ord(char) > ord('9'):
            return False

    return True

# Test the function
print(is_digit_only("123"))  # Output: True
print(is_digit_only("12a3")) # Output: False

35. Find Intersection Point of Two Linked Lists

Problem: Find the intersection point of two linked lists (simulated with arrays).

def find_intersection(arr1, arr2):
    # Get lengths of both arrays
    len1, len2 = len(arr1), len(arr2)

    # Align starting points by skipping extra elements
    diff = abs(len1 - len2)
    i = diff if len1 > len2 else 0
    j = diff if len2 > len1 else 0

    # Traverse both arrays together
    while i < len1 and j < len2:
        if arr1[i] == arr2[j]:
            return arr1[i]
        i += 1
        j += 1

    return None

# Test the function
arr1 = [1, 2, 3, 4, 5]
arr2 = [9, 8, 4, 5]
print(find_intersection(arr1, arr2))  # Output: 4

Conclusion

These 35 Python coding questions cover a wide range of topics—arrays, strings, numbers, and basic data structures—perfect for freshers preparing for interviews. Practice these problems, understand the logic behind each solution, and you’ll be well-equipped to tackle technical interviews. Happy coding!

🔎 Take the Data Science Entrance Test – Boost your career with Cuvette’s placement guarantee! Take the test, and our team will contact you: Start the test now