This commit is contained in:
Inex Code 2022-10-09 21:58:14 +03:00
commit 2fe278f91c
3 changed files with 72 additions and 0 deletions

6
.vscode/settings.json vendored Normal file
View file

@ -0,0 +1,6 @@
{
"python.analysis.typeCheckingMode": "strict",
"python.formatting.provider": "black",
"python.linting.enabled": true,
"python.linting.pylintEnabled": true
}

25
shell.nix Normal file
View file

@ -0,0 +1,25 @@
{ pkgs ? import <nixpkgs> { } }:
let
its-python = pkgs.python310.withPackages (p: with p; [
setuptools
portalocker
pytz
pytest
pytest-mock
pytest-datadir
coverage
pylint
pydantic
black
]);
in
pkgs.mkShell {
buildInputs = [
its-python
pkgs.black
];
shellHook = ''
PYTHONPATH=${its-python}/${its-python.sitePackages}
# maybe set more env-vars
'';
}

41
task1/__init__.py Normal file
View file

@ -0,0 +1,41 @@
"""
Task for the lecture 1.
1. Write a function to fill a list of 1000000 elements with random numbers from 0 to 999.
2. Write a function to count histogram of the list with 10 bins.
i.e. the function should return a list of 10 elements, where the first element
is the number of elements in the list that are in the range [0, 99],
the second element is the number of elements in the list that are in the range [100, 199],
and so on.
3. Determine the time of execution of the functions. Perfrorm the `calcHist` function 100 times and'
determine the max, min and average time of execution.
"""
import random
import timeit
def fill_list() -> list[int]:
"""Fill a list with random numbers."""
return [random.randint(0, 999) for _ in range(1000000)]
def count_histogram(lst: list[int]) -> list[int]:
"""Count histogram of the list."""
hist = [0] * 10
for number in lst:
hist[number // 100] += 1
return hist
def main():
"""Main function."""
lst = fill_list()
times = [timeit.timeit(lambda: count_histogram(lst), number=1) for _ in range(100)]
print(f"Max time: {max(times)}")
print(f"Min time: {min(times)}")
print(f"Average time: {sum(times) / len(times)}")
if __name__ == "__main__":
main()