Python Practice: 25 Essential Beginner Problems with Solutions

Practice is essential for mastering Python programming, transforming theoretical knowledge into practical skills through hands-on problem solving that reinforces concepts, reveals edge cases, and builds muscle memory for common patterns. This comprehensive collection presents 25 carefully curated beginner problems covering fundamental topics including loops for iteration, conditionals for decision making, string manipulation for text processing, lists and dictionaries for data organization, and mathematical operations for computational thinking. Each problem includes detailed solutions with explanations helping you understand not just how to solve problems but why solutions work, developing problem-solving strategies applicable beyond these specific exercises.
These problems progress logically from simple operations like printing patterns and calculating sums to more complex challenges involving data structure manipulation, string processing algorithms, and combining multiple concepts in single solutions. Working through these exercises builds confidence with Python syntax, strengthens understanding of core concepts, exposes you to common programming patterns, and prepares you for intermediate topics like object-oriented programming and algorithm design. Whether you're a complete beginner solidifying fundamentals or an experienced programmer learning Python as an additional language, these practice problems provide structured learning opportunities with immediate feedback through working code examples demonstrating best practices and Pythonic approaches to problem solving.
Numbers and Mathematical Operations
# Problem 1: Sum of First N Natural Numbers
def sum_natural_numbers(n):
"""Calculate sum of first n natural numbers."""
return sum(range(1, n + 1))
# Alternative: n * (n + 1) // 2
print(sum_natural_numbers(10)) # Output: 55
# Problem 2: Check Even or Odd
def is_even(number):
"""Check if number is even."""
return number % 2 == 0
print(is_even(7)) # Output: False
print(is_even(10)) # Output: True
# Problem 3: Factorial Calculator
def factorial(n):
"""Calculate factorial of n."""
if n == 0 or n == 1:
return 1
result = 1
for i in range(2, n + 1):
result *= i
return result
print(factorial(5)) # Output: 120
# Problem 4: Prime Number Checker
def is_prime(n):
"""Check if number is prime."""
if n < 2:
return False
for i in range(2, int(n ** 0.5) + 1):
if n % i == 0:
return False
return True
print(is_prime(17)) # Output: True
print(is_prime(10)) # Output: False
# Problem 5: Find Maximum of Three Numbers
def find_max(a, b, c):
"""Return maximum of three numbers."""
return max(a, b, c)
# Alternative: a if a > b and a > c else b if b > c else c
print(find_max(5, 12, 8)) # Output: 12Loops and Pattern Printing
# Problem 6: Print Pattern - Right Triangle
def print_triangle(n):
"""Print right triangle pattern."""
for i in range(1, n + 1):
print('*' * i)
print_triangle(5)
# Output:
# *
# **
# ***
# ****
# *****
# Problem 7: Print Numbers in Reverse
def print_reverse(n):
"""Print numbers from n to 1."""
for i in range(n, 0, -1):
print(i, end=' ')
print()
print_reverse(5) # Output: 5 4 3 2 1
# Problem 8: Multiplication Table
def multiplication_table(n):
"""Print multiplication table for n."""
for i in range(1, 11):
print(f"{n} x {i} = {n * i}")
multiplication_table(7)
# Problem 9: Sum of Digits
def sum_of_digits(n):
"""Calculate sum of digits in a number."""
total = 0
while n > 0:
total += n % 10
n //= 10
return total
print(sum_of_digits(12345)) # Output: 15
# Problem 10: Count Digits
def count_digits(n):
"""Count number of digits."""
if n == 0:
return 1
count = 0
while n > 0:
count += 1
n //= 10
return count
# Alternative: len(str(abs(n)))
print(count_digits(12345)) # Output: 5String Manipulation
# Problem 11: Reverse a String
def reverse_string(s):
"""Reverse a string."""
return s[::-1]
# Alternative: ''.join(reversed(s))
print(reverse_string("Python")) # Output: nohtyP
# Problem 12: Check Palindrome
def is_palindrome(s):
"""Check if string is palindrome."""
s = s.lower().replace(' ', '')
return s == s[::-1]
print(is_palindrome("racecar")) # Output: True
print(is_palindrome("A man a plan a canal Panama")) # Output: True
# Problem 13: Count Vowels
def count_vowels(s):
"""Count vowels in string."""
vowels = 'aeiouAEIOU'
return sum(1 for char in s if char in vowels)
print(count_vowels("Hello World")) # Output: 3
# Problem 14: Remove Whitespace
def remove_whitespace(s):
"""Remove all whitespace from string."""
return ''.join(s.split())
# Alternative: s.replace(' ', '')
print(remove_whitespace("Hello World Python")) # Output: HelloWorldPython
# Problem 15: Title Case Converter
def to_title_case(s):
"""Convert string to title case."""
return s.title()
# Alternative: ' '.join(word.capitalize() for word in s.split())
print(to_title_case("hello world")) # Output: Hello World
# Problem 16: Count Word Occurrences
def count_word(text, word):
"""Count occurrences of word in text."""
return text.lower().split().count(word.lower())
text = "Python is great. Python is powerful."
print(count_word(text, "python")) # Output: 2List Operations
# Problem 17: Find Maximum in List
def find_max_in_list(numbers):
"""Find maximum value in list."""
if not numbers:
return None
return max(numbers)
# Manual approach:
# max_val = numbers[0]
# for num in numbers[1:]:
# if num > max_val:
# max_val = num
# return max_val
print(find_max_in_list([3, 7, 2, 9, 1])) # Output: 9
# Problem 18: Remove Duplicates
def remove_duplicates(numbers):
"""Remove duplicates while preserving order."""
seen = set()
result = []
for num in numbers:
if num not in seen:
seen.add(num)
result.append(num)
return result
# Alternative: list(dict.fromkeys(numbers))
print(remove_duplicates([1, 2, 2, 3, 4, 3, 5])) # Output: [1, 2, 3, 4, 5]
# Problem 19: Find Common Elements
def find_common(list1, list2):
"""Find common elements between two lists."""
return list(set(list1) & set(list2))
print(find_common([1, 2, 3, 4], [3, 4, 5, 6])) # Output: [3, 4]
# Problem 20: List Average
def calculate_average(numbers):
"""Calculate average of numbers in list."""
if not numbers:
return 0
return sum(numbers) / len(numbers)
print(calculate_average([10, 20, 30, 40])) # Output: 25.0
# Problem 21: Reverse List In-Place
def reverse_list(lst):
"""Reverse list in-place."""
left, right = 0, len(lst) - 1
while left < right:
lst[left], lst[right] = lst[right], lst[left]
left += 1
right -= 1
return lst
# Alternative: lst.reverse() or lst[::-1]
my_list = [1, 2, 3, 4, 5]
print(reverse_list(my_list)) # Output: [5, 4, 3, 2, 1][x for x in numbers if x > 0] filters positive numbers. They're more Pythonic than traditional loops for simple operations.Dictionary Operations
# Problem 22: Character Frequency Counter
def char_frequency(s):
"""Count frequency of each character."""
freq = {}
for char in s:
freq[char] = freq.get(char, 0) + 1
return freq
# Alternative: from collections import Counter; Counter(s)
print(char_frequency("hello")) # Output: {'h': 1, 'e': 1, 'l': 2, 'o': 1}
# Problem 23: Merge Two Dictionaries
def merge_dicts(dict1, dict2):
"""Merge two dictionaries."""
result = dict1.copy()
result.update(dict2)
return result
# Python 3.9+: dict1 | dict2
# Alternative: {**dict1, **dict2}
dict1 = {'a': 1, 'b': 2}
dict2 = {'c': 3, 'd': 4}
print(merge_dicts(dict1, dict2)) # Output: {'a': 1, 'b': 2, 'c': 3, 'd': 4}
# Problem 24: Invert Dictionary
def invert_dict(d):
"""Swap keys and values."""
return {v: k for k, v in d.items()}
original = {'a': 1, 'b': 2, 'c': 3}
print(invert_dict(original)) # Output: {1: 'a', 2: 'b', 3: 'c'}
# Problem 25: Group Items by Property
def group_by_length(words):
"""Group words by their length."""
groups = {}
for word in words:
length = len(word)
if length not in groups:
groups[length] = []
groups[length].append(word)
return groups
words = ["a", "to", "cat", "dog", "python", "code"]
print(group_by_length(words))
# Output: {1: ['a'], 2: ['to'], 3: ['cat', 'dog'], 6: ['python'], 4: ['code']}Combined Concept Problems
These advanced beginner problems combine multiple concepts, requiring you to integrate loops, conditionals, strings, and data structures in single solutions. They represent realistic programming tasks demonstrating how fundamental concepts work together to solve practical problems.
# Bonus Problem 1: FizzBuzz
def fizzbuzz(n):
"""Print FizzBuzz sequence up to n."""
for i in range(1, n + 1):
if i % 15 == 0:
print("FizzBuzz")
elif i % 3 == 0:
print("Fizz")
elif i % 5 == 0:
print("Buzz")
else:
print(i)
fizzbuzz(15)
# Bonus Problem 2: Anagram Checker
def are_anagrams(str1, str2):
"""Check if two strings are anagrams."""
return sorted(str1.lower()) == sorted(str2.lower())
print(are_anagrams("listen", "silent")) # Output: True
print(are_anagrams("hello", "world")) # Output: False
# Bonus Problem 3: Find Missing Number
def find_missing(numbers):
"""Find missing number in sequence 1 to n."""
n = len(numbers) + 1
expected_sum = n * (n + 1) // 2
actual_sum = sum(numbers)
return expected_sum - actual_sum
print(find_missing([1, 2, 4, 5, 6])) # Output: 3
# Bonus Problem 4: Second Largest Number
def second_largest(numbers):
"""Find second largest number in list."""
if len(numbers) < 2:
return None
unique = list(set(numbers))
unique.sort(reverse=True)
return unique[1] if len(unique) > 1 else None
print(second_largest([5, 3, 9, 1, 9, 7])) # Output: 7
# Bonus Problem 5: Longest Word
def longest_word(sentence):
"""Find longest word in sentence."""
words = sentence.split()
return max(words, key=len)
print(longest_word("Python is an amazing programming language")) # Output: programmingEffective Practice Strategies
Maximizing learning from practice problems requires strategic approaches beyond simply reading solutions. Active engagement, debugging practice, testing edge cases, and exploring alternatives deepen understanding and build problem-solving skills transferable to new challenges.
- Try before looking: Attempt each problem independently before checking solutions. Struggling builds problem-solving skills more effectively than reading answers immediately
- Test edge cases: Always test with empty inputs, single elements, negative numbers, and boundary values to ensure solutions handle all scenarios correctly
- Understand don't memorize: Focus on understanding why solutions work rather than memorizing syntax. Understanding enables applying patterns to new problems
- Explore alternatives: For each problem, try solving it different ways. Multiple approaches deepen understanding and reveal trade-offs between readability and efficiency
- Debug systematically: When code doesn't work, add print statements to see variable values at each step. This reveals logic errors and builds debugging skills
- Read error messages: Python's error messages are helpful. Read them carefully to understand what went wrong and where the problem occurs in your code
- Time yourself: As you improve, time how long problems take. This builds speed for coding interviews and reveals which concepts need more practice
- Explain solutions: Try explaining your solution to someone else or write comments explaining each step. Teaching reinforces learning and clarifies understanding
- Build progressively: Start with easier problems before attempting harder ones. Each solved problem builds confidence and skills for the next challenge
- Review regularly: Revisit problems after a few days or weeks. Spaced repetition solidifies learning and reveals how much you've retained and improved
Next Steps After These Problems
After completing these 25 problems, you've built solid foundations in Python basics including loops, conditionals, strings, lists, and dictionaries. Continue your learning journey by tackling more complex challenges involving recursive functions, object-oriented programming with classes, file input/output operations, exception handling, and working with external libraries. Platforms like LeetCode, HackerRank, and Codewars offer thousands of additional problems organized by difficulty and topic, while building small projects like calculators, to-do apps, or data analysis scripts applies skills to real-world scenarios.
# Challenge Yourself Further
# 1. Recursive Problems
def fibonacci(n):
"""Calculate nth Fibonacci number recursively."""
if n <= 1:
return n
return fibonacci(n-1) + fibonacci(n-2)
# 2. List Comprehension Challenges
def flatten_list(nested):
"""Flatten a nested list."""
return [item for sublist in nested for item in sublist]
# 3. Lambda Functions
square = lambda x: x ** 2
filter_evens = lambda lst: list(filter(lambda x: x % 2 == 0, lst))
# 4. Generator Expressions
def infinite_sequence():
"""Generate infinite sequence."""
num = 0
while True:
yield num
num += 1
# 5. Exception Handling
def safe_divide(a, b):
"""Divide with error handling."""
try:
return a / b
except ZeroDivisionError:
return "Cannot divide by zero"
except TypeError:
return "Invalid input types"
# 6. File Operations
def count_lines(filename):
"""Count lines in a file."""
try:
with open(filename, 'r') as f:
return sum(1 for line in f)
except FileNotFoundError:
return "File not found"
# 7. Object-Oriented Programming
class Calculator:
"""Simple calculator class."""
@staticmethod
def add(a, b):
return a + b
@staticmethod
def multiply(a, b):
return a * b
# Keep practicing and building!Conclusion
These 25 essential beginner problems cover fundamental Python concepts including mathematical operations for computational thinking, loop patterns for iteration and output generation, string manipulation for text processing, list operations for data organization, and dictionary usage for key-value storage. Each problem includes detailed solutions demonstrating both straightforward approaches and Pythonic alternatives, helping you understand multiple ways to solve problems while learning idiomatic Python practices. Working through number problems teaches mathematical logic and algorithm implementation, loop exercises build pattern recognition and iteration skills, string challenges develop text processing capabilities essential for real applications, list operations introduce sequence manipulation techniques, and dictionary problems demonstrate hash-based data organization for efficient lookups.
Effective practice strategies include attempting problems independently before checking solutions to build problem-solving skills, testing edge cases with empty inputs and boundary values ensuring robust code, understanding concepts rather than memorizing syntax for transferable knowledge, exploring alternative solutions revealing trade-offs and deepening comprehension, and debugging systematically using print statements and error messages developing essential troubleshooting abilities. Combined concept problems like FizzBuzz, anagram detection, and missing number identification demonstrate how fundamental concepts integrate in realistic scenarios, preparing you for actual programming tasks beyond isolated exercises. Moving forward, continue practicing with platforms like LeetCode and HackerRank offering thousands of problems, explore recursive functions for elegant solutions, learn object-oriented programming for code organization, master file operations and exception handling for robust applications, and most importantly build small projects applying these skills to real problems solidifying learning through practical application. Remember that coding proficiency develops through consistent practice not overnight mastery, so embrace challenges, learn from mistakes, and celebrate progress as you advance from beginner problems toward intermediate and advanced Python programming building professional development skills applicable throughout your programming career.
$ share --platform
$ cat /comments/ (0)
$ cat /comments/
// No comments found. Be the first!


