3.3. Numeric Recap
Recap information about
int
andfloat
3.3.1. Int
Represents an integer
Could be both signed and unsigned
Default
int
size is 64 bitPython automatically extends
int
when need bigger numberYou can use
_
for easier read especially with big numbersBuiltin function
int()
converts argument toint
Works with strings if they have numbers and
+
,-
,_
(underscore)
Definition:
>>> data = 1
>>> data = +1
>>> data = -1
Thousand separator:
>>> million = 1000000
>>> million = 1_000_000
Conversion:
>>> int(1.0)
1
>>>
>>> int('1')
1
3.3.2. Float
Represents floating point number (vide IEEE-754)
Could be both signed and unsigned
Default
float
size is 64 bitPython automatically extends
float
when need bigger number.1
- notation without leading zero (0.1)1.
- notation without trailing zero (1.0)Engineering notation:
mega = 1e6
,micro = 1e-6
Scientific notation:
1.23e-4
Builtin
float()
converts argument tofloat
Definition:
>>> data = 1.0
>>> data = +1.0
>>> data = -1.0
Leading and trailing zero:
>>> data = .1 # 0.1
>>> data = 1. # 1.0
Engineering and scientific notation:
>>> 1.23e-4
0.000123
Conversion:
>>> float(1)
1.0
>>>
>>> float('1.0')
1.0
Decimal separator:
>>> float('1.0')
1.0
>>>
>>> float('1,0')
Traceback (most recent call last):
ValueError: could not convert string to float: '1,0'
Rounding:
>>> pi = 3.14159265359
>>>
>>>
>>> round(pi, 2)
3.14
>>>
>>> print(f'Pi number is {pi:.2f}')
Pi number is 3.14
3.3.3. Assignments
# %% About
# - Name: Numeric Recap Bits
# - Difficulty: medium
# - Lines: 3
# - Minutes: 2
# %% 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. File size is 1337 megabits [Mb]
# 2. Calculate size in bits [b]
# 3. Calculate size in kilobits [kb]
# 4. Use floordiv (`//`) operator
# 5. Run doctests - all must succeed
# %% Polish
# 1. Wielkość pliku to 1337 megabits [Mb]
# 2. Oblicz wielkość w bitach [b]
# 3. Oblicz wielkość w kilobitach [kb]
# 4. Użyj operatora floordiv (`//`)
# 5. Uruchom doctesty - wszystkie muszą się powieść
# %% Hints
# - `//` - floordiv
# - 1 kb = 1024 b
# - 1 Mb = 1024 Kb
# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
>>> assert size_bits is not Ellipsis, \
'Assign your result to variable `size_bits`'
>>> assert size_kilobits is not Ellipsis, \
'Assign your result to variable `size_kilobits`'
>>> assert size_megabits is not Ellipsis, \
'Assign your result to variable `size_megabits`'
>>> assert type(size_bits) is int, \
'Variable `size_bits` has invalid type, should be int'
>>> assert type(size_kilobits) is int, \
'Variable `size_kilobits` has invalid type, should be int'
>>> assert type(size_megabits) is int, \
'Variable `size_megabits` has invalid type, should be int'
>>> assert size_bits == 1_401_946_112, \
'Invalid value for `size_bits`. Check you calculation'
>>> assert size_kilobits == 1_369_088, \
'Invalid value for `size_kilobits`. Check you calculation'
>>> assert size_megabits == 1337, \
'Invalid value for `size_megabits`. Check you calculation'
"""
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% Imports
# %% Types
size_bits: int
size_kilobits: int
size_megabits: int
# %% Data
b = 1
kb = 1024 * b
Mb = 1024 * kb
SIZE = 1337 * Mb
# %% Result
size_bits = ...
size_kilobits = ...
size_megabits = ...
# %% About
# - Name: Numeric Recap Bytes
# - Difficulty: medium
# - Lines: 2
# - Minutes: 2
# %% 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. File size is 100 megabytes
# 2. Calculate size in kilobytes
# 2. Calculate size in megabits
# 3. Run doctests - all must succeed
# %% Polish
# 1. Wielkość pliku to 100 megabajtów
# 2. Oblicz wielkość w kilobajtach
# 2. Oblicz wielkość w megabitach
# 3. Uruchom doctesty - wszystkie muszą się powieść
# %% Hints
# - `//` - floordiv
# - 1 Kb = 1024 b
# - 1 Mb = 1024 Kb
# - 1 B = 8 b
# - 1 KB = 1024 B
# - 1 MB = 1024 KB
# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
>>> assert size_kilobytes is not Ellipsis, \
'Assign your result to variable `size_kilobytes`'
>>> assert size_megabits is not Ellipsis, \
'Assign your result to variable `size_megabits`'
>>> assert type(size_kilobytes) is int, \
'Variable `size_kilobytes` has invalid type, should be int'
>>> assert type(size_megabits) is int, \
'Variable `size_megabits` has invalid type, should be int'
>>> assert size_kilobytes == 102_400, \
'Invalid value for `size_kilobytes`. Check you calculation'
>>> assert size_megabits == 800, \
'Invalid value for `size_megabits`. Check you calculation'
"""
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% Imports
# %% Types
size_kilobytes: int
size_megabits: int
# %% Data
b = 1
kb = 1024 * b
Mb = 1024 * kb
B = 8 * b
kB = 1024 * B
MB = 1024 * kB
SIZE = 100 * MB
# %% Result
size_kilobytes = ...
size_megabits = ...
# %% About
# - Name: Numeric Recap Bandwidth
# - Difficulty: medium
# - Lines: 3
# - 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. Having internet connection with speed 100 Mb/s
# 2. How long will take to download 100 MB?
# 3. To calculate time divide file size by speed
# 4. Note, that all values must be `int` (type cast if needed)
# 5. Use floordiv (`//`) operator
# 6. Run doctests - all must succeed
# %% Polish
# 1. Mając łącze internetowe 100 Mb/s
# 2. Ile zajmie ściągnięcie pliku 100 MB?
# 3. Aby wyliczyć czas podziel wielkość pliku przez prędkość
# 4. Zwróć uwagę, że wszystkie wartości mają być `int`
# (rzutuj typ jeżeli potrzeba)
# 5. Użyj operatora floordiv (`//`)
# 6. Uruchom doctesty - wszystkie muszą się powieść
# %% Hints
# - `*` - mul operator
# - `//` - floordiv
# - 1 Kb = 1024 b
# - 1 Mb = 1024 Kb
# - 1 B = 8 b
# - 1 KB = 1024 B
# - 1 MB = 1024 KB
# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
>>> assert bandwidth is not Ellipsis, \
'Assign your result to variable `bandwidth`'
>>> assert size is not Ellipsis, \
'Assign your result to variable `size`'
>>> assert duration is not Ellipsis, \
'Assign your result to variable `duration`'
>>> assert type(bandwidth) is int, \
'Variable `bandwidth` has invalid type, should be int'
>>> assert type(size) is int, \
'Variable `size` has invalid type, should be int'
>>> assert type(duration) is int, \
'Variable `duration` has invalid type, should be int'
>>> assert bandwidth == 104_857_600, \
'Invalid value for `bandwidth`. Check you calculation'
>>> assert size == 838_860_800, \
'Invalid value for `size`. Check you calculation'
>>> assert duration == 8, \
'Invalid value for `duration`. Check you calculation'
"""
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% Imports
# %% Types
bandwidth: int
size: int
duration: int
# %% Data
SECOND = 1
b = 1
kb = 1024 * b
Mb = 1024 * kb
B = 8 * b
kB = 1024 * B
MB = 1024 * kB
# %% Result
bandwidth = ...
size = ...
duration = ...

Figure 3.1. EMU and Orlan
# %% About
# - Name: Numeric Recap Pressure
# - Difficulty: medium
# - Lines: 2
# - 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. Operational pressure of EMU spacesuit: 4.3 PSI
# 2. Operational pressure of ORLAN spacesuit: 40 kPa
# 3. Calculate operational pressure in hPa for EMU
# 4. Calculate operational pressure in hPa for Orlan
# 5. Run doctests - all must succeed
# %% Polish
# 1. Ciśnienie operacyjne skafandra kosmicznego EMU (NASA): 4.3 PSI
# 2. Ciśnienie operacyjne skafandra kosmicznego ORLAN (Roscosmos): 40 kPa
# 3. Oblicz ciśnienie operacyjne skafandra EMU w hPa
# 4. Oblicz ciśnienie operacyjne skafandra Orlan w hPa
# 5. Uruchom doctesty - wszystkie muszą się powieść
# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
>>> assert emu is not Ellipsis, \
'Assign your result to variable `emu`'
>>> assert orlan is not Ellipsis, \
'Assign your result to variable `orlan`'
>>> assert type(emu) is float, \
'Variable `emu` has invalid type, should be float'
>>> assert type(orlan) is float, \
'Variable `orlan` has invalid type, should be float'
>>> round(orlan, 1)
400.0
>>> round(emu, 1)
296.5
"""
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% Imports
# %% Types
emu: float
orlan: float
# %% Data
Pa = 1
hPa = 100 * Pa
kPa = 1000 * Pa
psi = 6894.757 * Pa
# %% Result
emu = ...
orlan = ...
# %% About
# - Name: Numeric Recap Percent
# - Difficulty: medium
# - Lines: 2
# - 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. Pressure in International Standard Atmosphere (ISA)
# at sea level is: 1 ata = 1013.25 hPa
# 2. Calculate `pO2` - partial pressure of oxygen at sea level in hPa
# 3. To calculate partial pressure use ratio
# 100% --- 1013.25 hPa
# 20.946% --- ? hPa
# 4. Run doctests - all must succeed
# %% Polish
# 1. Ciśnienie w Międzynarodowej Standardowej Atmosfera (ISA)
# na poziomie morza wynosi: 1 ata = 1013.25 hPa
# 2. Oblicz `pO2` - ciśnienie parcjalne tlenu na poziomie morza w hPa
# 3. Aby policzyć ciśnienie parcjalne skorzystaj z proporcji
# 100% --- 1013.25 hPa
# 20.946% --- ? hPa
# 4. Uruchom doctesty - wszystkie muszą się powieść
# %% Hints
# - 1 hPa = 100 Pa
# - 1 kPa = 1000 Pa
# - 1 ata = 1013.25 hPa
# - ISA - International Standard Atmosphere
# - Nitrogen 78.084%
# - Oxygen 20.946%
# - Argon 0.9340%
# - Carbon Dioxide 0.0407%
# - Others 0.001%
# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
>>> assert ata is not Ellipsis, \
'Assign your result to variable `ata`'
>>> assert type(ata) is float, \
'Variable `ata` has invalid type, should be float'
>>> assert pO2 is not Ellipsis, \
'Assign your result to variable `pO2`'
>>> assert type(pO2) is float, \
'Variable `pO2` has invalid type, should be float'
>>> ata
101325.0
>>> round(pO2, 1)
212.2
"""
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% Imports
# %% Types
ata: float
pO2: float
# %% Data
PERCENT = 100
N2 = 78.084 / PERCENT
O2 = 20.946 / PERCENT
Ar = 0.9340 / PERCENT
CO2 = 0.0407 / PERCENT
Others = 0.001 / PERCENT
Pa = 1
hPa = 100 * Pa
kPa = 1000 * Pa
# %% Result
ata = ...
pO2 = ...
# %% About
# - Name: Numeric Recap Gradient
# - Difficulty: medium
# - Lines: 2
# - 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. At what altitude above sea level, pressure is equal
# to partial pressure of oxygen
# 2. Print result in meters rounding to two decimal places
# 3. To calculate partial pressure use ratio
# (100% is 1013.25 hPa, 20.946% is how many hPa?)
# 4. Calculated altitude is pressure at sea level minus
# oxygen partial pressure divided by gradient
# 5. Mind the operator precedence
# 6. Run doctests - all must succeed
# %% Polish
# 1. Na jakiej wysokości nad poziomem morza panuje ciśnienie
# równe ciśnieniu parcjalnemu tlenu?
# 2. Wypisz rezultat w metrach zaokrąglając do dwóch miejsc po przecinku
# 3. Aby policzyć ciśnienie parcjalne skorzystaj z proporcji
# (100% to 1013.25 hPa, 20.946% to ile hPa?)
# 4. Wyliczona wysokość to ciśnienie atmosferyczne na poziomie morza minus
# ciśnienie parcjalne tlenu podzielone przez gradient
# 5. Zwróć uwagę na kolejność wykonywania działań
# 6. Uruchom doctesty - wszystkie muszą się powieść
# %% Hints
# - pressure gradient (decrease) = 11.3 Pa / 1 m
# - 1 hPa = 100 Pa
# - 1 kPa = 1000 Pa
# - 1 ata = 1013.25 hPa (ISA - International Standard Atmosphere)
# - Nitrogen 78.084%
# - Oxygen 20.946%
# - Argon 0.9340%
# - Carbon Dioxide 0.0407%
# - Others 0.001%
# %% Doctests
"""
>>> import sys; sys.tracebacklimit = 0
>>> assert sys.version_info >= (3, 9), \
'Python 3.9+ required'
>>> assert gradient is not Ellipsis, \
'Assign your result to variable `gradient`'
>>> assert type(gradient) is float, \
'Variable `gradient` has invalid type, should be float'
>>> assert altitude is not Ellipsis, \
'Assign your result to variable `altitude`'
>>> assert type(altitude) is float, \
'Variable `altitude` has invalid type, should be float'
>>> pO2
21223.5345
>>> gradient
11.3
>>> round(altitude/m, 2)
7088.63
"""
# %% Run
# - PyCharm: right-click in the editor and `Run Doctest in ...`
# - PyCharm: keyboard shortcut `Control + Shift + F10`
# - Terminal: `python -m doctest -v myfile.py`
# %% Imports
# %% Types
gradient: float
altitude: float
# %% Data
PERCENT = 100
N2 = 78.084 / PERCENT
O2 = 20.946 / PERCENT
Ar = 0.9340 / PERCENT
CO2 = 0.0407 / PERCENT
Others = 0.001 / PERCENT
m = 1
Pa = 1
hPa = 100 * Pa
ata = 1013.25 * hPa
pO2 = O2 * ata
# %% Result
gradient = ...
altitude = ...