Skip to main content

Strings, Numbers, and Dates

What You'll Learn​

All the ways to create and manipulate strings and numbers, and how to work with dates and times using Python's standard library.

Strings In Depth​

Creating Strings​

single = 'Hello'
double = "World"
multiline = """Line 1
Line 2
Line 3"""
raw = r"C:\Users\alice\data" # raw string: backslashes are literal

String Indexing and Slicing​

name = "Python"
# 012345 (positive indexes)
# -654321 (negative indexes)

print(name[0]) # P
print(name[-1]) # n
print(name[0:3]) # Pyt (start:stop, stop excluded)
print(name[::2]) # Pto (every 2nd character)
print(name[::-1]) # nohtyP (reversed)

Essential String Methods​

text = " Hello, World! "

print(text.strip()) # "Hello, World!" (remove whitespace)
print(text.lower()) # " hello, world! "
print(text.upper()) # " HELLO, WORLD! "
print(text.replace("World", "Python")) # " Hello, Python! "
print(text.strip().split(", ")) # ['Hello', 'World!']

sentence = "the quick brown fox"
print(sentence.title()) # "The Quick Brown Fox"
print(sentence.count("o")) # 2
print(sentence.startswith("the")) # True
print(sentence.endswith("fox")) # True
print("quick" in sentence) # True

String Formatting​

f-strings (best — use these):

name = "Alice"
score = 95.7

print(f"Player {name} scored {score:.1f}%")
# Player Alice scored 95.7%

# Expressions inside {}
print(f"Next year: {2024 + 1}")
# Next year: 2025

format() method (older style):

print("{} is {} years old".format("Alice", 30))

% formatting (very old — avoid):

print("%s is %d years old" % ("Alice", 30))

String Operations​

# Concatenation
greeting = "Hello" + " " + "World"

# Repetition
line = "-" * 40
print(line) # ----------------------------------------

# Membership
print("ell" in "Hello") # True
print("xyz" not in "Hello") # True

# Length
print(len("Python")) # 6

Numbers In Depth​

Integer Operations​

x = 17
print(x + 3) # 20
print(x - 5) # 12
print(x * 4) # 68
print(x / 4) # 4.25 (always float)
print(x // 4) # 4 (floor division, integer result)
print(x % 4) # 1 (remainder/modulo)
print(x ** 2) # 289 (power)

Float Operations​

import math

pi = 3.14159
print(round(pi, 2)) # 3.14
print(math.floor(pi)) # 3
print(math.ceil(pi)) # 4
print(math.sqrt(16)) # 4.0
print(abs(-42)) # 42

# Floating point caveat
print(0.1 + 0.2) # 0.30000000000000004
print(round(0.1 + 0.2, 1)) # 0.3 (use round() for display)

Useful Math Functions​

import math

math.sqrt(25) # 5.0
math.pow(2, 8) # 256.0
math.log(100, 10) # 2.0
math.pi # 3.141592653589793
math.e # 2.718281828459045

min(3, 1, 4, 1, 5) # 1
max(3, 1, 4, 1, 5) # 5
sum([1, 2, 3, 4, 5]) # 15

Number Formatting for Display​

price = 1234567.89
print(f"{price:,.2f}") # 1,234,567.89
print(f"{price:.0f}") # 1234568
print(f"{0.875:.1%}") # 87.5%
print(f"{255:08b}") # 11111111 (binary, 8 digits)
print(f"{255:x}") # ff (hex)

Dates and Times​

from datetime import datetime, date, timedelta

# Current date and time
now = datetime.now()
print(now) # 2024-01-15 10:30:45.123456

# Just the date
today = date.today()
print(today) # 2024-01-15

# Create a specific date
birthday = date(1995, 8, 20)
print(birthday) # 1995-08-20

# Date arithmetic
tomorrow = today + timedelta(days=1)
next_week = today + timedelta(weeks=1)
in_90_days = today + timedelta(days=90)

# Age calculation
age = (today - birthday).days // 365
print(f"Age: {age} years")

Formatting Dates​

from datetime import datetime

now = datetime.now()

print(now.strftime("%Y-%m-%d")) # 2024-01-15
print(now.strftime("%d/%m/%Y")) # 15/01/2024
print(now.strftime("%B %d, %Y")) # January 15, 2024
print(now.strftime("%Y-%m-%d %H:%M:%S")) # 2024-01-15 10:30:45

Parsing Date Strings​

from datetime import datetime

date_str = "2024-01-15"
dt = datetime.strptime(date_str, "%Y-%m-%d")
print(dt.year, dt.month, dt.day) # 2024 1 15

Common strftime Codes​

CodeMeaningExample
%Y4-digit year2024
%mMonth (01–12)01
%dDay (01–31)15
%HHour (00–23)10
%MMinute (00–59)30
%SSecond (00–59)45
%BFull month nameJanuary
%AFull weekday nameMonday

Common Mistakes​

MistakeFix
"hello"[10] — index too largeCheck len() first
"age: " + 25 — str + intUse f-string or str(25)
Comparing floats exactlyUse round() or math.isclose()
Using %d format in strftime%d is day, not integer — use f"{n}" for integers

Quick Reference​

# String
s.upper() / s.lower() / s.strip()
s.replace(old, new)
s.split(sep)
s.startswith(x) / s.endswith(x)
len(s)
f"{s}" f"{n:.2f}" f"{n:,}"

# Number
abs(n) / round(n, d) / min() / max() / sum()
n // d # floor division
n % d # modulo
n ** e # power

# Date
from datetime import datetime, date, timedelta
datetime.now()
date.today()
date.today() + timedelta(days=7)
dt.strftime("%Y-%m-%d")
datetime.strptime(s, "%Y-%m-%d")

What's Next​

→ Lesson 3: Input, Output, and Formatting