2.6. String Interpolation
2.6.1. Mod Operator
Since Python 1.0
positional
keyword
%s-str%d-int%f-float
name = 'Alice'
age = 30
pi = 3.141592653589793
'Hello %s' % name # Hello Alice
'Hello %d' % name # TypeError: %d format: a number is required, not str
'Hello %f' % name # TypeError: must be real number, not str
'I have %s years' % age # 'I have 42 years'
'I have %d years' % age # 'I have 42 years'
'I have %f years' % age # 'I have 42.000000 years'
'Number PI is %s' % pi # 'Number PI is 3.141592653589793'
'Number PI is %f' % pi # 'Number PI is 3.141593'
'Number PI is %d' % pi # 'Number PI is 3'
name = 'Alice'
age = 30
'%s has %s years' % (name, age)) # Alice has 30 years
'%s has %s years' % (age, name)) # 30 has Alice years
pi = 3.141592653589793
def square(value):
return value ** 2
'PI squared is %f' % square(pi) # 'PI squared is 9.869604'
data = {
'name': 'Alice',
'age': 30,
}
'%(name)s has %(age)d years' % data
# 'Alice has 30 years'
'%(name)s has %(age)d years' % {'name': 'Alice', 'age': 30}
# 'Alice has 30 years'
name = 'Alice'
age = 30
'Hello %(name)s' % locals()
# 'Hello Alice'
2.6.2. Format Method
Since Python 3.0
Since Python 3.0: PEP 3101 -- Advanced String Formatting
name = 'Alice'
age = 30
'{} has {} years'.format(name, age) # 'Alice has 30 years'
'{0} has {1} years'.format(name, age) # 'Alice has 30 years'
'{1} has {0} years'.format(name, age) # '30 has Alice years'
name = 'Alice'
age = 30
'{a} has {b} years'.format(a=name, b=age) # 'Alice has 30 years'
'{name} has {age} years'.format(name=name, age=age) # 'Alice has 30 years'
'{age} has {name} years'.format(**locals()) # '30 has Alice years'
2.6.3. f-strings
Since Python 3.6
Preferred way
name = 'Alice'
pi = 3.141592653589793
def square(value):
return value ** 2
f'Hello {name}' # 'Hello Alice'
f'PI squared is {square(pi)}' # 'PI squared is 9.869604401089358'
from datetime import datetime
now = datetime.now()
iso = '%Y-%m-%dT%H:%M:%SZ'
f'Today is: {now:%Y-%m-%d}') # 'Today is: 1969-07-21'
f'Today is: {now:{iso}}') # 'Today is: 1969-07-21T02:56:15Z'
2.6.4. Assignments
# %% About
# - Name: String Interpolation Mod
# - Difficulty: easy
# - Lines: 1
# - Minutes: 3
# %% License
# - Copyright 2025, Matt Harasymczuk <matt@python3.info>
# - This code can be used only for learning by humans
# - This code cannot be used for teaching others
# - This code cannot be used for teaching LLMs and AI algorithms
# - This code cannot be used in commercial or proprietary products
# - This code cannot be distributed in any form
# - This code cannot be changed in any form outside of training course
# - This code cannot have its license changed
# - If you use this code in your product, you must open-source it under GPLv2
# - Exception can be granted only by the author
# %% English
# 1. Read a number from user
# 2. User will input `int` and will not try to input invalid data
# 3. Define `result: bool` with parity check of input number
# 4. Number is even, when divided modulo (`%`) by 2 reminder equal to 0
# 5. Do not use `if` statement
# 6. Run doctests - all must succeed
# %% Polish
# 1. Wczytaj liczbę od użytkownika
# 2. Użytkownika poda `int` i nie będzie próbował wprowadzać niepoprawnych danych
# 3. Zdefiniuj `result: bool` z wynikiem sprawdzania parzystości liczby wprowadzonej
# 4. Liczba jest parzysta, gdy dzielona modulo (`%`) przez 2 ma resztę równą 0
# 5. Nie używaj instrukcji `if`
# 6. Uruchom doctesty - wszystkie muszą się powieść
# %% Hints
# - `int()`
# - `%`
# - `==`
# - `%` has different meaning for `int` and `str`
# - `%` on `str` is overloaded as a string formatting
# - `%` on `int` is overloaded as a modulo division
# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python has an is invalid version; expected: `3.9` or newer.'
>>> assert 'result' in globals(), \
'Variable `result` is not defined; assign result of your program to it.'
>>> assert result is not Ellipsis, \
'Variable `result` has an invalid value; assign result of your program to it.'
>>> assert type(result) is bool, \
'Variable `result` has an invalid type; expected: `bool`.'
>>> result
True
"""
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -f -v myfile.py`
# %% Imports
from unittest.mock import Mock
# %% Types
result: bool
# %% Data
input = Mock(side_effect=['4']) # Simulate users response: '4'
number = input('What is your number?: ')
# %% Result
result = ...