未验证 提交 0fc24e86 编写于 作者: A Andrew Grangaard 提交者: GitHub

[mypy] Annotates other/scoring_algorithm (#5621)

* scoring_algorithm: Moves doctest into function docstring so it will be run

* [mypy] annotates other/scoring_algorithm

* [mypy] renames temp var to unique value to work around mypy issue in other/scoring_algorithm

reusing loop variables with the same name and different types gives
this very confusing mypy error response.

pyright correctly infers the types without issue.

    ```
    scoring_algorithm.py:58: error: Incompatible types in assignment
    (expression has type "float", variable has type "List[float]")
    scoring_algorithm.py:60: error: Unsupported operand types for -
    ("List[float]" and "float")
    scoring_algorithm.py:65: error: Incompatible types in assignment
    (expression has type "float", variable has type "List[float]")
    scoring_algorithm.py:67: error: Unsupported operand types for -
    ("List[float]" and "float")
    Found 4 errors in 1 file (checked 1 source file)

```

* scoring_algorithm: uses enumeration instead of manual indexing on loop var

* scoring_algorithm: sometimes we look before we leap.

* clean-up: runs `black` to fix formatting
上级 5c8a6c82
......@@ -20,39 +20,38 @@ We want the vehicle with the lowest price,
lowest mileage but newest registration year.
Thus the weights for each column are as follows:
[0, 0, 1]
>>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1])
[[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]]
"""
def procentual_proximity(source_data: list, weights: list) -> list:
def procentual_proximity(
source_data: list[list[float]], weights: list[int]
) -> list[list[float]]:
"""
weights - int list
possible values - 0 / 1
0 if lower values have higher weight in the data set
1 if higher values have higher weight in the data set
>>> procentual_proximity([[20, 60, 2012],[23, 90, 2015],[22, 50, 2011]], [0, 0, 1])
[[20, 60, 2012, 2.0], [23, 90, 2015, 1.0], [22, 50, 2011, 1.3333333333333335]]
"""
# getting data
data_lists = []
for item in source_data:
for i in range(len(item)):
try:
data_lists[i].append(float(item[i]))
except IndexError:
# generate corresponding number of lists
data_lists: list[list[float]] = []
for data in source_data:
for i, el in enumerate(data):
if len(data_lists) < i + 1:
data_lists.append([])
data_lists[i].append(float(item[i]))
data_lists[i].append(float(el))
score_lists = []
score_lists: list[list[float]] = []
# calculating each score
for dlist, weight in zip(data_lists, weights):
mind = min(dlist)
maxd = max(dlist)
score = []
score: list[float] = []
# for weight 0 score is 1 - actual score
if weight == 0:
for item in dlist:
......@@ -75,7 +74,7 @@ def procentual_proximity(source_data: list, weights: list) -> list:
score_lists.append(score)
# initialize final scores
final_scores = [0 for i in range(len(score_lists[0]))]
final_scores: list[float] = [0 for i in range(len(score_lists[0]))]
# generate final scores
for i, slist in enumerate(score_lists):
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册