Variables & Data Types
Master Python variables, primitive data types (int, float, str, bool), type conversion, and naming conventions.
Variables & Data Types
Variables are the foundation of every program. They store data that your program manipulates. In Python, working with variables is intuitive and flexible.
What is a Variable?
A variable is a named location in memory that stores a value. Think of it as a labeled box where you can put different items.
Creating Variables in Python
# Variable assignment
age = 25
name = "Alice"
height = 1.75
is_student = True
# Multiple assignment
x, y, z = 10, 20, 30
a = b = c = 0
# Displaying variables
print(f"Name: {name}")
print(f"Age: {age}")
print(f"Height: {height}m")
print(f"Student: {is_student}")Output:
Name: Alice
Age: 25
Height: 1.75m
Student: True
Unlike languages like C or Java, Python doesn't require you to declare the type of a variable. Python infers the type from the value you assign. This is called "dynamic typing."
Python's Primitive Data Types
Python has several built-in data types. Let's explore the four most fundamental ones.
Overview of Data Types
| Type | Python Name | Example | Description |
|---|---|---|---|
| Integer | int | 42, -7, 0 | Whole numbers (positive, negative, zero) |
| Float | float | 3.14, -0.5, 2.0 | Decimal numbers |
| String | str | "hello", 'world' | Text/characters |
| Boolean | bool | True, False | Truth values |
Integers (int)
Integers represent whole numbers without a decimal point.
Integer Operations
# Creating integers
positive = 100
negative = -50
zero = 0
large_number = 1_000_000 # Underscores for readability
# Arithmetic with integers
a = 15
b = 4
print(f"Addition: {a} + {b} = {a + b}") # 19
print(f"Subtraction: {a} - {b} = {a - b}") # 11
print(f"Multiplication: {a} * {b} = {a * b}") # 60
print(f"Division: {a} / {b} = {a / b}") # 3.75 (returns float!)
print(f"Floor Division: {a} // {b} = {a // b}") # 3
print(f"Modulus: {a} % {b} = {a % b}") # 3
print(f"Exponent: {a} ** {b} = {a ** b}") # 50625Output:
Addition: 15 + 4 = 19
Subtraction: 15 - 4 = 11
Multiplication: 15 * 4 = 60
Division: 15 / 4 = 3.75
Floor Division: 15 // 4 = 3
Modulus: 15 % 4 = 3
Exponent: 15 ** 4 = 50625
Python integers have unlimited precision! You can work with numbers as large as your memory allows:
>>> 2 ** 1000
107150860718626732094842504906000181056140481170553360744375038837...Floats (float)
Floats represent numbers with decimal points.
Float Operations and Precision
# Creating floats
pi = 3.14159
temperature = -5.5
scientific = 6.022e23 # Scientific notation: 6.022 × 10²³
# Float operations
x = 10.5
y = 3.2
print(f"Addition: {x + y}") # 13.7
print(f"Multiplication: {x * y}") # 33.6
# Float precision caveat
print(f"\n0.1 + 0.2 = {0.1 + 0.2}") # 0.30000000000000004 (!)
print(f"0.1 + 0.2 == 0.3: {0.1 + 0.2 == 0.3}") # False!Output:
Addition: 13.7
Multiplication: 33.6
0.1 + 0.2 = 0.30000000000000004
0.1 + 0.2 == 0.3: False
Floating-point arithmetic can have precision issues due to how computers represent decimals in binary. For financial calculations, use the decimal module instead of floats.
# Using decimal for precise calculations
from decimal import Decimal
a = Decimal('0.1')
b = Decimal('0.2')
print(f"Decimal: {a + b}") # 0.3 (exact!)Strings (str)
Strings represent text and are enclosed in quotes.
Creating and Using Strings
# Different ways to create strings
single_quotes = 'Hello'
double_quotes = "World"
triple_quotes = """This is a
multi-line string"""
# String operations
first_name = "Alice"
last_name = "Smith"
# Concatenation
full_name = first_name + " " + last_name
print(f"Full name: {full_name}")
# Repetition
separator = "-" * 30
print(separator)
# String length
message = "Python Programming"
print(f"Length: {len(message)}") # 18
# Accessing characters (indexing)
word = "Python"
print(f"First character: {word[0]}") # P
print(f"Last character: {word[-1]}") # n
print(f"Third character: {word[2]}") # tOutput:
Full name: Alice Smith
------------------------------
Length: 18
First character: P
Last character: n
Third character: t
String Methods
text = " Hello, World! "
print(f"Original: '{text}'")
print(f"Upper: '{text.upper()}'")
print(f"Lower: '{text.lower()}'")
print(f"Title: '{text.title()}'")
print(f"Strip: '{text.strip()}'")
print(f"Replace: '{text.replace('World', 'Python')}'")
print(f"Split: {text.strip().split(',')}")Output:
Original: ' Hello, World! '
Upper: ' HELLO, WORLD! '
Lower: ' hello, world! '
Title: ' Hello, World! '
Strip: 'Hello, World!'
Replace: ' Hello, Python! '
Split: ['Hello', 'World!']
F-Strings (Formatted String Literals)
name = "Alice"
age = 30
score = 95.678
# Basic f-string
print(f"My name is {name} and I am {age} years old.")
# Expressions in f-strings
print(f"Next year I will be {age + 1}.")
# Formatting numbers
print(f"Score: {score:.2f}") # 2 decimal places: 95.68
print(f"Score as percent: {score:.1%}") # Not applicable here, but useful
print(f"Right aligned: {name:>10}") # Right aligned in 10 chars
print(f"Center aligned: {name:^10}") # Center alignedOutput:
My name is Alice and I am 30 years old.
Next year I will be 31.
Score: 95.68
Right aligned: Alice
Center aligned: Alice
Booleans (bool)
Booleans represent truth values: True or False.
Boolean Basics
# Boolean values
is_active = True
is_admin = False
print(f"Active: {is_active}") # True
print(f"Admin: {is_admin}") # False
print(f"Type: {type(is_active)}") # <class 'bool'>
# Boolean from comparisons
x = 10
y = 20
print(f"\n{x} > {y}: {x > y}") # False
print(f"{x} < {y}: {x < y}") # True
print(f"{x} == {y}: {x == y}") # False
print(f"{x} != {y}: {x != y}") # True
print(f"{x} >= 10: {x >= 10}") # TrueTruthiness in Python
# Python evaluates many values as True or False in boolean context
print(f"bool(1): {bool(1)}") # True
print(f"bool(0): {bool(0)}") # False
print(f"bool('hello'): {bool('hello')}") # True
print(f"bool(''): {bool('')}") # False
print(f"bool([]): {bool([])}") # False (empty list)
print(f"bool([1, 2]): {bool([1, 2])}") # True (non-empty list)
print(f"bool(None): {bool(None)}") # FalseIn Python, the following are considered "falsy": False, None, 0, 0.0, "", [], {}, set(). Everything else is "truthy".
Type Conversion (Casting)
You often need to convert between types. Python provides built-in functions for this.
Converting Between Types
# String to int
age_str = "25"
age_int = int(age_str)
print(f"int('25') = {age_int}") # 25
print(f"Type: {type(age_int)}") # <class 'int'>
# String to float
price_str = "19.99"
price_float = float(price_str)
print(f"float('19.99') = {price_float}") # 19.99
# Int/float to string
number = 42
number_str = str(number)
print(f"str(42) = '{number_str}'") # '42'
# Float to int (truncates, doesn't round!)
pi = 3.14159
pi_int = int(pi)
print(f"int(3.14159) = {pi_int}") # 3
# Boolean to int/float
print(f"int(True) = {int(True)}") # 1
print(f"int(False) = {int(False)}") # 0
print(f"float(True) = {float(True)}") # 1.0Practical Example: Input Conversion
# calculator_input.py
# Getting numeric input from user
print("=== Rectangle Area Calculator ===")
# input() always returns a string, so we must convert
width_str = input("Enter width: ")
height_str = input("Enter height: ")
# Convert strings to floats
width = float(width_str)
height = float(height_str)
# Calculate area
area = width * height
print(f"\nRectangle Dimensions:")
print(f" Width: {width}")
print(f" Height: {height}")
print(f" Area: {area}")Sample output:
=== Rectangle Area Calculator ===
Enter width: 5.5
Enter height: 3.2
Rectangle Dimensions:
Width: 5.5
Height: 3.2
Area: 17.6
Variable Naming Conventions
Python has specific rules and conventions for naming variables.
Rules (Must Follow)
| Rule | Valid | Invalid |
|---|---|---|
| Start with letter or underscore | name, _age | 1name, 2nd |
| Only letters, numbers, underscores | user_name, var2 | user-name, var@2 |
| Case-sensitive | age, Age, AGE are different | - |
| Not a reserved keyword | - | if, for, class, def |
Conventions (Should Follow)
# Snake case for variables (recommended)
user_name = "Alice"
total_amount = 100.50
is_active = True
# Constants (all uppercase)
PI = 3.14159
MAX_RETRIES = 3
API_KEY = "secret123"
# Private variables (leading underscore - convention only)
_internal_value = 42
_temp_data = []
# Bad names - avoid these!
x = 10 # Too vague
temp123 = "hi" # Not descriptive
myVariableName = "Alice" # camelCase not standard in PythonChoose descriptive names! student_age is much better than sa or x. Your future self (and other developers) will thank you.
Checking Types with type() and isinstance()
# Using type()
value1 = 42
value2 = 3.14
value3 = "hello"
value4 = True
print(f"type(42) = {type(value1)}") # <class 'int'>
print(f"type(3.14) = {type(value2)}") # <class 'float'>
print(f"type('hello') = {type(value3)}") # <class 'str'>
print(f"type(True) = {type(value4)}") # <class 'bool'>
# Using isinstance() for type checking
print(f"\nisinstance(42, int): {isinstance(42, int)}") # True
print(f"isinstance(3.14, int): {isinstance(3.14, int)}") # False
print(f"isinstance(3.14, float): {isinstance(3.14, float)}") # True
print(f"isinstance(True, int): {isinstance(True, int)}") # True (bool is subclass of int!)Real-World Example: Student Record System
# student_record.py
# A simple student record using different data types
# Student information
student_id = 1001 # int
name = "Maria Santos" # str
age = 22 # int
gpa = 3.85 # float
is_enrolled = True # bool
courses = ["Math", "Physics", "CS"] # list
# Display student record
print("=" * 40)
print(" STUDENT RECORD")
print("=" * 40)
print(f"Student ID: {student_id}")
print(f"Name: {name}")
print(f"Age: {age}")
print(f"GPA: {gpa:.2f}")
print(f"Enrolled: {'Yes' if is_enrolled else 'No'}")
print(f"Courses: {', '.join(courses)}")
print("=" * 40)
# Type summary
print("\nData Types Used:")
print(f" student_id: {type(student_id).__name__}")
print(f" name: {type(name).__name__}")
print(f" age: {type(age).__name__}")
print(f" gpa: {type(gpa).__name__}")
print(f" is_enrolled: {type(is_enrolled).__name__}")Output:
========================================
STUDENT RECORD
========================================
Student ID: 1001
Name: Maria Santos
Age: 22
GPA: 3.85
Enrolled: Yes
Courses: Math, Physics, CS
========================================
Data Types Used:
student_id: int
name: str
age: int
gpa: float
is_enrolled: bool
Practice Exercises
Exercise 1: Type Identification
Identify the type of each value:
42"42"42.0True"True"0
Exercise 2: Variable Creation
Create variables for a product: name (str), price (float), quantity (int), and in_stock (bool). Print a summary.
Exercise 3: Type Conversion
Convert the string "3.14159" to a float, then to an int. What happens to the decimal part?
Exercise 4: String Operations
Given text = "Python Programming", write code to:
- Get the length
- Convert to uppercase
- Replace "Python" with "Java"
- Get the first 6 characters
Exercise 5: F-String Formatting
Create an f-string that displays a price of $19.99 with 2 decimal places, right-aligned in 10 characters.
Exercise 6: Naming Convention Fix
Fix these variable names to follow Python conventions:
myVariableName2ndPlaceuser-emailTOTALTAX
Exercise 7: Temperature Conversion Program
Write a program that converts Celsius to Fahrenheit and Kelvin:
- F = C × 9/5 + 32
- K = C + 273.15
Exercise 8: Type Checker Function
Write a function that takes any value and prints its type and whether it's truthy or falsy.
Summary
In this lesson, you learned:
- How to create and use variables in Python
- The four primitive data types: int, float, str, bool
- Arithmetic operations and their behavior with different types
- String operations, methods, and f-string formatting
- Boolean values and truthiness in Python
- Type conversion between different data types
- Variable naming rules and conventions
- How to check types using
type()andisinstance()
Variables and data types are the building blocks of every Python program. Master these fundamentals before moving on to operators and expressions.