DEV Community

Rakesh Daniel
Rakesh Daniel

Posted on

Python Fundamentals for Freshers: Variables, Operators, Data Types, Loops

This blog explains the Python basics every fresher should understand: variables, readability, operators, data types, loops, functions, collections, and object-oriented programming. It is written in a simple learning path, with theory first and a practical Python example after each concept

What Is a Programming Language?

A programming language is a language used to give instructions to a computer. The computer converts those instructions into actions such as displaying output, storing data, or controlling hardware.

Why Python?

  • Python is easy to read and learn.
  • It is a high-level, general-purpose language.
  • It supports web apps, desktop apps, automation, data science, AI, and ML.
  • It has many built-in libraries and a large community.

Variables and Readability

A variable is a named container used to store a value.

age = 25
name = "Arun"
price = 99.50
is_active = True
Enter fullscreen mode Exit fullscreen mode

Readability means writing code that another person can easily understand.

# Bad
x = 25

# Good
student_age = 25
Enter fullscreen mode Exit fullscreen mode

Use meaningful names, lowercase words with underscores, and avoid single-letter names except in small loops.

_name vs __name

Python does not have true private variables like Java or C++. Instead, underscores communicate intent.

Syntax Name Meaning
name Public Anyone can use it
_name Protected / internal “Do not use this outside the class”; only a convention
__name Name-mangled Python changes it internally to ClassName_name
name Dunder Reserved for Python’s special methods, such as init
class Student:
    def __init__(self):
        self.name = "Arun"        # public
        self._marks = 90          # internal use
        self.__password = "1234"  # name-mangled

s = Student()
print(s.name)        # Arun
print(s._marks)      # 90
# print(s.__password)  # AttributeError
print(s._Student__password)  # 1234
Enter fullscreen mode Exit fullscreen mode

__name is not ** “strictly private”** in the security sense. Python performs name mangling, making accidental access harder, but the value can still be reached using the changed name.

Reserved Words
Reserved words are words already used by Python for a special meaning. You cannot use them as variable names.

Examples: if, else, while, for, def, class, return, import, True, False, None.

  • if means: run this block only when a condition is true
  • while means: repeat this block while a condition is true
if age >= 18:
    print("Adult")

while count < 5:
    print(count)
    count += 1
Enter fullscreen mode Exit fullscreen mode

Operators

Operators perform operations on values.

Operator Example Result
+ 5 + 2 7
- 5 - 2 3
* 5 * 2 10
/ 5 / 2 2.5
// 5 // 2 2
% 5 % 2 1
** 5 ** 2 25
  • Floor division (//) removes the decimal part.
  • Exponential operator (*) means power: 5 * 2 is =25.
  • Python does not have a separate “concat operator”; + is used to join strings.
print(7 // 2)   # 3
print(7 % 2)    # 1
print(2 ** 3)   # 8
print("Py" + "thon")  # Python
Enter fullscreen mode Exit fullscreen mode

Data Types

Python has built-in data types such as:

age = 25              # int
price = 99.5          # float
name = "Python"       # str
is_active = True      # bool
items = [1, 2, 3]     # list
point = (10, 20)      # tuple
ids = {1, 2, 3}       # set
user = {"name": "Arun"}  # dictionary
Enter fullscreen mode Exit fullscreen mode

Why Python Does Not Use “Primitive” and “Non-Primitive” Like Java

In languages such as Java, int, char, and boolean are primitive types, while objects are non-primitive.

In Python, everything is an object, including numbers and strings. So Python does not separate data into primitive and non-primitive types in the same way as Java.

print(type(10))       # <class 'int'>
print(type("hello"))  # <class 'str'>
Enter fullscreen mode Exit fullscreen mode

Collections: List, Tuple, Set, Dictionary

Collection Syntax Ordered? Mutable? Allows duplicates?
List [1, 2, 3] Yes Yes Yes
Tuple (1, 2, 3) Yes No Yes
Set {1, 2, 3} No Yes No
Dictionary {"a": 1} Insertion order Yes Keys must be unique
fruits = ["apple", "banana", "mango"]
fruits.append("orange")
print(fruits)

coordinates = (10, 20)
# coordinates[0] = 30  # Error: tuple cannot change

unique_ids = {101, 102, 103}
unique_ids.add(104)

student = {"name": "Arun", "age": 21}
print(student["name"])
Enter fullscreen mode Exit fullscreen mode

Useful List Methods

numbers = [10, 20, 30]

numbers.append(40)       # Add at end
numbers.insert(1, 15)    # Add at index 1
numbers.remove(20)       # Remove value 20
numbers.pop()            # Remove last item
numbers.sort()           # Sort ascending
numbers.reverse()        # Reverse order
print(len(numbers))      # Count items
Enter fullscreen mode Exit fullscreen mode

Set pop() and Ordering

A set is unordered, so it does not maintain index positions like a list. pop() removes and returns an arbitrary element; you cannot reliably predict which one it removes.

numbers = {10, 20, 30}
removed = numbers.pop()
print(removed)
print(numbers)
Enter fullscreen mode Exit fullscreen mode

range() Function
range() generates a sequence of numbers. It is commonly used with for loops.

for i in range(5):
    print(i)       # 0 1 2 3 4

for i in range(2, 10, 2):
    print(i)       # 2 4 6 8
Enter fullscreen mode Exit fullscreen mode

range(start, stop, step) starts at start, stops before stop, and increases by step.

Logic: print(0 > -1)
print(0 > -1)
Output:
True

Why? On the number line, 0 is greater than -1. Python compares the values and returns a Boolean result: True or False.

Bitwise Operators

Bitwise operators work directly on the binary representation of integers.

Operator Name Example
& AND 5 & 3
\\ OR
^ XOR 5 ^ 3
~ NOT / complement ~5
<< Left shift 5 << 1
>> Right shift 5 >> 1
print(bin(5))       # 0b101
print(5 & 3)        # 1
print(5 | 3)        # 7
print(5 ^ 3)        # 6
print(5 << 1)       # 10
print(5 >> 1)       # 2
Enter fullscreen mode Exit fullscreen mode

bin() **converts an integer into its binary string form. It is useful when learning bits, masks, permissions, and low-level logic.
**MSB, Signed, and Unsigned Integers

  • MSB means Most Significant Bit.
  • In binary, the leftmost bit is usually the MSB.
  • In signed integers, the MSB can represent the sign: 0 for positive and 1 for negative in fixed-width systems.
  • Unsigned integers use all bits for value, so they cannot represent negative numbers.

Example using 4 bits:

0111 = 7
1111 = 15 in unsigned
1111 = -1 in signed two's complement
Enter fullscreen mode Exit fullscreen mode

Two’s Complement
Two’s complement is the common method computers use to store negative integers.
To get -5 in 8-bit two’s complement:

5       = 00000101
Invert  = 11111010
Add 1   = 11111011
Enter fullscreen mode Exit fullscreen mode

So -5 is stored as 11111011.

User Input and Casting

input() always returns a string. Casting means converting one data type into another.

age = input("Enter your age: ")   # String
age = int(age)                    # Convert to integer

price = float("99.5")
number = str(100)
Enter fullscreen mode Exit fullscreen mode

Casting is needed because you cannot perform mathematical operations directly on string input.

# Wrong
# age = input("Age: ")
# print(age + 1)  # Error

# Correct
age = int(input("Age: "))
print(age + 1)
Enter fullscreen mode Exit fullscreen mode

Conditional Statements

marks = 75

if marks >= 90:
    print("Grade A")
elif marks >= 75:
    print("Grade B")
else:
    print("Need improvement")
Enter fullscreen mode Exit fullscreen mode

Loops: for, while, break, continue, pass
Python has for and while loops. It does not have a traditional do-while loop.

# for loop
for i in range(1, 6):
    print(i)

# while loop
count = 1
while count <= 5:
    print(count)
    count += 1
Enter fullscreen mode Exit fullscreen mode
  • break stops the loop immediately.
  • continue skips the current iteration and moves to the next one.
  • pass does nothing; it is used as a placeholder.
for i in range(1, 6):
    if i == 3:
        continue   # Skip 3
    if i == 5:
        break      # Stop at 5
    print(i)
Enter fullscreen mode Exit fullscreen mode

Even or Odd Logic

number = int(input("Enter a number: "))

if number % 2 == 0:
    print("Even number")
else:
    print("Odd number")
Enter fullscreen mode Exit fullscreen mode

% gives the remainder. If a number divided by 2 has remainder 0, it is even.

Functions: Parameters, Arguments, Return
A parameter is the variable in the function definition. An argument is the actual value passed when calling the function.

def add(a, b):      # a and b are parameters
    return a + b

result = add(5, 3)  # 5 and 3 are arguments
print(result)       # 8
Enter fullscreen mode Exit fullscreen mode

return sends a value back to the caller and ends the function.

Method Overloading vs Method Overriding

Concept Meaning
Method overloading Same method name with different parameter versions
Method overriding Child class replaces a method inherited from the parent class

Python** does not support traditional method overloading** directly. The last defined method with the same name replaces the previous one. You can handle different argument counts using default values.

class Animal:
    def sound(self):
        print("Some sound")

class Dog(Animal):
    def sound(self):   # Overriding
        print("Bark")

Dog().sound()  # Bark
Enter fullscreen mode Exit fullscreen mode

Classes and Objects
A class is a blueprint. An object is a real instance created from that blueprint.

class Student:
    def __init__(self, name, age):
        self.name = name
        self.age = age

    def introduce(self):
        print(f"My name is {self.name} and I am {self.age} years old.")

s1 = Student("Arun", 21)
s1.introduce()
Enter fullscreen mode Exit fullscreen mode

Why self Is Used
self represents the current object. When you call s1.introduce(), Python automatically passes s1 as self.

If you forget self in an instance method, Python will treat the first argument as the object, causing an error when you pass arguments.

# Wrong
# def introduce(name):
#     print(name)

# Correct
def introduce(self):
    print(self.name)
Enter fullscreen mode Exit fullscreen mode

Constructor and Destructor

A constructor is a special method that runs automatically when an object is created. In Python, it is init().

class Student:
    def __init__(self, name):
        print("Constructor called")
        self.name = name

s = Student("Arun")  # Constructor runs here
Enter fullscreen mode Exit fullscreen mode

A destructor is del(). It is called when an object is about to be destroyed, but Python manages object cleanup automatically, so beginners should not depend on it for important work.

class Student:
    def __del__(self):
        print("Object deleted")
Enter fullscreen mode Exit fullscreen mode

Instance Variable vs Class Variable

Type Defined using Belongs to
Instance variable self.variable One object
Class variable Directly inside class All objects of the class
class Student:
    school = "ABC School"   # Class variable

    def __init__(self, name):
        self.name = name    # Instance variable

s1 = Student("Arun")
s2 = Student("Bala")

print(s1.school)  # ABC School
print(s2.school)  # ABC School
print(s1.name)    # Arun
print(s2.name)    # Bala
Enter fullscreen mode Exit fullscreen mode

Types of Class Methods

Python has three common method types:

Method type Decorator First argument Used for
Instance method None self Work with object data
Class method @classmethod cls Work with class-level data
Static method @staticmethod No automatic first argument Utility logic
class Student:
    school = "ABC School"

    def instance_method(self):
        print("Uses object:", self.name)

    @classmethod
    def class_method(cls):
        print("Uses class:", cls.school)

    @staticmethod
    def static_method(a, b):
        return a + b
Enter fullscreen mode Exit fullscreen mode

Exception Handling

Exception handling prevents a program from crashing when an error occurs.

try:
    number = int(input("Enter a number: "))
    print(10 / number)
except ZeroDivisionError:
    print("Cannot divide by zero")
except ValueError:
    print("Please enter a valid number")
finally:
    print("Program finished")
Enter fullscreen mode Exit fullscreen mode
  • try contains risky code.
  • except handles the error.
  • finally always runs.

Top comments (0)