7.3. String Print
7.3.1. String Module
import string
string.punctuation
# '!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
string.whitespace
# ' \t\n\r\x0b\x0c'
string.ascii_lowercase
# 'abcdefghijklmnopqrstuvwxyz'
string.ascii_uppercase
# 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.ascii_letters
# 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
string.digits
# '0123456789'
string.hexdigits
# '0123456789abcdefABCDEF'
string.octdigits
# '01234567'
string.printable
# '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~ \t\n\r\x0b\x0c'
7.3.2. print
function
7.3.3. Function definition
def print(*values, sep=' ', end='\n', file=sys.stdout, flush=False):
"""
Prints the values to a stream, or to sys.stdout by default.
Optional keyword arguments:
file: a file-like object (stream); defaults to the current sys.stdout.
sep: string inserted between values, default a space.
end: string appended after the last value, default a newline.
flush: whether to forcibly flush the stream.
"""
...
7.3.4. Intuitive implementation
Intuitive implementation of print
function:
def print(*values, sep=' ', end='\n', ...):
return sep.join(values) + end
7.3.5. Printing multiple values
name = 'José Jiménez'
print('My name...', name, '!')
# My name... José Jiménez!
name = 'José Jiménez'
print('My name...', name, '!', sep=';')
# My name...;José Jiménez;!
7.3.6. String concatenation
+
operator (with side effects)str.join()
str.format()
f-string formatting (preferred)
7.3.7. +
Operator
f-string formatting are preferred over
str
additionHow many
str
are in the memory?
name = 'Mark Watney'
'My name... ' + name
# 'My name... José Jiménez'
+
Operator side effect:
name = 'Mark Watney'
age = 42
'My name... ' + name + ' and I am ' + str(age) + ' years old!'
# 'My name... Mark Watney and I am 42 years old!'
7.3.8. str.join()
data = ['Mark Watney', 'Melissa Lewis', 'Rick Martinez']
' '.join(data) # 'Mark Watney Melissa Lewis Rick Martinez'
','.join(data) # 'Mark Watney,Melissa Lewis,Rick Martinez'
', '.join(data) # 'Mark Watney, Melissa Lewis, Rick Martinez'
7.3.9. Use Case - 1
>>>
... from time import sleep
...
...
... def progressbar(percent):
... filled = '=' * percent
... empty = ' ' * (100-percent)
... clear = '\b' * 110
... bar = f'{clear}{percent:4}% |{filled}{empty}|'
... print(bar, end='')
...
...
... for i in range(0,101):
... progressbar(i)
... sleep(0.2)
7.3.10. Assignments
# FIXME: Write tests
# FIXME: Write solution
# %% 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
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% About
# - Name: Powielanie napisów
# - Difficulty: easy
# - Lines: 8
# - Minutes: 5
# %% English
# 1. Given string: `text = 'Lorem Ipsum'`
# 2. Write three functions:
# - `print_1(text)` using `range()`
# - `print_2(text)` using `while` loop
# - `print_3(text)` using string multiplication
# 3. Each function should print 5 copies of this string
# 4. Each string in a separate line
# 5. Write doctest for all functions
# 6. Run doctests - all must succeed
# %% Polish
# 1. Dany jest ciąg znaków: `text = 'Lorem Ipsum'`
# 2. Napisz trzy funkcje:
# - `print_1(text)` wykorzystującą `range()`
# - `print_2(text)` wykorzystującą pętlę `while`
# - `print_3(text)` wykorzystującą mnożenie stringów
# 3. Każda funkcja ma wyświetlić 5 kopii tego ciągu znaków
# 4. Każdy ciąg znaków w osobnej linii
# 5. Napisz doctest do wszystkich funkcji
# 6. Uruchom doctesty - wszystkie muszą się powieść
# %% Tests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
"""
result = ...
# FIXME: Write tests
# FIXME: Write solution
# %% 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
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% About
# - Name: Przeliczanie temperatury
# - Difficulty: easy
# - Lines: 8
# - Minutes: 13
# %% English
# 1. Write a program that will display a table of Celsius to Fahrenheit conversions in the range from -20 to +40 degrees Celsius (every 5 degrees).
# 2. The result must be as shown in the listing below
# 3. The sign must always be displayed
# 4. Pay attention to the text justification
# 5. Pay attention to filling the space not occupied by numbers
# 6. Run doctests - all must succeed
# %% Polish
# 1. Napisz program, który wyświetli tabelę przeliczeń stopni Celsjusza na stopnie Fahrenheita w zakresie od –20 do +40 stopni Celsjusza (co 5 stopni).
# 2. Wynik musi być taki jak na listingu poniżej
# 3. Znak ma być zawsze wyświetlany
# 4. Zwróć uwagę na wyjustowanie tekstu
# 5. Zwróć uwagę na wypełnienie miejsca niezajętego przez cyfry
# 6. Uruchom doctesty - wszystkie muszą się powieść
# %% Hints
# - Fahrenheit to Celsius: (°F - 32) / 1.8 = °C
# - Celsius to Fahrenheit: (°C * 1.8) + 32 = °F
# %% Tests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
>>> result # doctest: +SKIP
-------------------------------------------
| Temperature | - 20°C | ....-4....°F |
-------------------------------------------
| Temperature | - 15°C | ....+5....°F |
-------------------------------------------
| Temperature | - 10°C | ...+14....°F |
-------------------------------------------
| Temperature | - 5°C | ...+23....°F |
-------------------------------------------
| Temperature | + 0°C | ...+32....°F |
-------------------------------------------
| Temperature | + 5°C | ...+41....°F |
-------------------------------------------
| Temperature | + 10°C | ...+50....°F |
-------------------------------------------
| Temperature | + 15°C | ...+59....°F |
-------------------------------------------
| Temperature | + 20°C | ...+68....°F |
-------------------------------------------
| Temperature | + 25°C | ...+77....°F |
-------------------------------------------
| Temperature | + 30°C | ...+86....°F |
-------------------------------------------
| Temperature | + 35°C | ...+95....°F |
-------------------------------------------
| Temperature | + 40°C | ...+104...°F |
-------------------------------------------
"""
def celsius_to_fahrenheit(degree):
return degree*1.8 + 32
result = ...