mirror of
https://github.com/TheAlgorithms/Python.git
synced 2024-12-05 02:40:16 +00:00
fdf095f69f
* Update annotations to Python 3.10 #4052 * Add floats doctest * Copy list to avoid changing input unpredictably * Refactor code to make it readable * updating DIRECTORY.md * Improve raised ValueErrors and add doctest * Split doctest in multiples lines * Change ValueError to Monogons and Digons are not poly * Correct doctest refering number of sides Co-authored-by: github-actions <${GITHUB_ACTOR}@users.noreply.github.com>
45 lines
1.3 KiB
Python
45 lines
1.3 KiB
Python
from __future__ import annotations
|
|
|
|
|
|
def check_polygon(nums: list[float]) -> bool:
|
|
"""
|
|
Takes list of possible side lengths and determines whether a
|
|
two-dimensional polygon with such side lengths can exist.
|
|
|
|
Returns a boolean value for the < comparison
|
|
of the largest side length with sum of the rest.
|
|
Wiki: https://en.wikipedia.org/wiki/Triangle_inequality
|
|
|
|
>>> check_polygon([6, 10, 5])
|
|
True
|
|
>>> check_polygon([3, 7, 13, 2])
|
|
False
|
|
>>> check_polygon([1, 4.3, 5.2, 12.2])
|
|
False
|
|
>>> nums = [3, 7, 13, 2]
|
|
>>> _ = check_polygon(nums) # Run function, do not show answer in output
|
|
>>> nums # Check numbers are not reordered
|
|
[3, 7, 13, 2]
|
|
>>> check_polygon([])
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: Monogons and Digons are not polygons in the Euclidean space
|
|
>>> check_polygon([-2, 5, 6])
|
|
Traceback (most recent call last):
|
|
...
|
|
ValueError: All values must be greater than 0
|
|
"""
|
|
if len(nums) < 2:
|
|
raise ValueError("Monogons and Digons are not polygons in the Euclidean space")
|
|
if any(i <= 0 for i in nums):
|
|
raise ValueError("All values must be greater than 0")
|
|
copy_nums = nums.copy()
|
|
copy_nums.sort()
|
|
return copy_nums[-1] < sum(copy_nums[:-1])
|
|
|
|
|
|
if __name__ == "__main__":
|
|
import doctest
|
|
|
|
doctest.testmod()
|