Как обновить точки из многоугольника, если они исходят от пользователя, внутри цикла? Питон

#arrays #loops #input

Вопрос:

Я создал программу, которая вычисляет площадь и периметр на основе 2D координат (широты и широты), заданных пользователем, спрашивая, хотят ли они включить больше координат из третьей пары, и оценивая площадь и периметр каждый раз, когда добавляется пара координат.

Кроме того, он сравнивает значения площади и периметра из разных регионов, выбирая, сколько регионов пользователь хочет оценить.

 from pyproj import Geod

geod = Geod(ellps='WGS84')

regions = 0
area_list = []
perimeter_list = []
while True:
    regions  = 1
    lats = []
    lons = []
    count = 0
    while True:
        count  = 1
        lat = float(input(f"Enter latitude #{count}: "))
        lon = float(input(f"Enter longitude #{count}: "))
        lats.append(lat)
        lons.append(lon)
    
        if count < 3:
            print("Not enough information to calculate the area.")
            continue
    
        poly_area, poly_perimeter = geod.polygon_area_perimeter(lons, lats)
        print(f"Área #{regions}:", (abs(float(poly_area))) / (1000000), "km^2")
        print(f"Perímetro #{regions}:", (abs(float(poly_perimeter))) / (1000), "km")
        if input('Enter more coordinates? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
            area_list.append(poly_area)
            perimeter_list.append(poly_perimeter)
#            p1 = Polygon([lat lon])
            break 
    if input('More regions? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
        break 

while True:
    dividend = int(input(f"Write what region is the dividend:")) - 1
    area_km_dividend = (abs(area_list[dividend])/1000000)
    perimeter_km_dividend = (abs(perimeter_list[dividend])/1000)
    print(f"Area: {area_km_dividend}")
    print(f"Perimeter: {perimeter_km_dividend}")
    
    divisor = int(input(f"Which region is the divisor?:")) - 1
    area_km_divisor = (abs(area_list[divisor])/1000000)
    perimeter_km_divisor = (abs(perimeter_list[divisor])/1000)
    print(f"Area: {area_km_divisor}")
    print(f"Perimeter: {perimeter_km_divisor}")
    
    area_divid_div = area_km_dividend / area_km_divisor
    area_div_divid = area_km_divisor / area_km_dividend
    
    perimeter_divid_div = perimeter_km_dividend / perimeter_km_divisor
    perimeter_div_divid = perimeter_km_divisor / perimeter_km_dividend
    
    if area_divid_div > 1:
        print(f"nArea of region #{dividend   1} is", area_divid_div*100 - 100, f"% larger than #{divisor   1}")
        if perimeter_divid_div > 1:
            print(f"Perimeter of region #{dividend   1} is", perimeter_divid_div*100 - 100, f"% larger than #{divisor   1}")
        else:
            print(f"Perimeter of region #{divisor   1} es un", perimeter_div_divid*100 - 100, f"% larger than #{dividend   1}")
    else:
        print(f"nArea of region #{divisor   1} is", (area_div_divid*100) - 100, f"% larger than #{dividend   1}")
        if perimeter_divid_div > 1:
            print(f"Perimeter of region #{dividend   1} is", perimeter_divid_div*100 - 100, f"% larger than #{divisor   1}")
        else:
            print(f"Perimeter of region  #{divisor   1} is", perimeter_div_divid*100 - 100, f"% larger than #{dividend   1}")
    
    if input('Do you want to evaluate more regions? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
        break
 

Я хотел бы проверить, перехватывают ли эти области, и какой процент в случае, если они это сделали(сначала мне нужно обновить значения, и именно этого я не знаю, как это сделать).

Я подумал об использовании полигонального объекта из пакета shapely:

 from shapely.geometry import Polygon
 

Но чтобы определить вершину многоугольника, мне нужно сделать это, не зная, сколько их будет, и не записывая их сам, так как пользователь вводит каждую пару координат.

Я думаю, что это должно быть написано между следующими строками:

     poly_area, poly_perimeter = geod.polygon_area_perimeter(lons, lats)
    print(f"Área #{regions}:", (abs(float(poly_area))) / (1000000), "km^2")
    print(f"Perimeter #{regions}:", (abs(float(poly_perimeter))) / (1000), "km")
    if input('Enter more coordinates? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
        area_list.append(poly_area)
        perimeter_list.append(poly_perimeter)
        p1 = Polygon([lat lon])
        break 
if input('More regions? [Y/N] ') in ['n', 'N', 'No', 'no', 'non']:
    break 
 

Заранее большое вам спасибо!