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
- 2. Check if a Number is Palindrome
- 3. Find the Factorial of a Number
- 4. Check if Two Strings are Anagrams
- 5. Find the Largest Element in an Array
- 6. Sum of Digits in a Number
- 7. Check if a Number is Prime
- 8. Fibonacci Series up to N Terms
- 9. Swap Two Numbers Without a Third Variable
- 10. Find GCD of Two Numbers
- 11. Count Vowels in a String
- 12. Merge Two Sorted Arrays
- 13. Find Missing Number in Array
- 14. Remove Duplicates from Array
- 15. Check if Array is Sorted
- 16. Rotate Array to the Right by K Steps
- 17. Find Second Largest Element in Array
- 18. Count Occurrences of a Character in String
- 19. Find Common Elements in Two Arrays
- 20. Check if String is Balanced (Parentheses)
- 21. Find Power of a Number
- 22. Check if Two Strings are Rotations
- 23. Find First Non-Repeating Character
- 24. Multiply Two Numbers Without *
- 25. Reverse Words in a Sentence
- 26. Find Pair with Given Sum in Array
- 27. Convert Decimal to Binary
- 28. Check if Number is Power of 2
- 29. Find Middle Element of Linked List
- 30. Count Set Bits in a Number
- 31. Check if Two Arrays are Equal
- 32. Find Minimum Distance Between Two Numbers
- 33. Find Longest Consecutive Sequence
- 34. Check if String Contains Only Digits
- 35. Find Intersection Point of Two Linked Lists
- Conclusion
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