📜  具有相同周长的多边形的边在线测验(1)

📅  最后修改于: 2023-12-03 15:36:47.894000             🧑  作者: Mango

具有相同周长的多边形的边在线测验

本程序可以通过用户输入的多边形周长,来生成一个具有相同周长的多边形的边长测试。

功能
  1. 根据输入的周长生成一个拥有相同周长的多边形。
  2. 随机生成一个它与原多边形边长不同的新多边形,并将其加入测试中。
  3. 随机生成一个它与原多边形边长相同的新多边形,并将其加入测试中。
  4. 展示测试结果,分别为每个多边形的边长和是否正确。
  5. 支持用户指定测试中的多边形数量。
实现
输入

用户需要输入一个多边形的周长,以及测试中的多边形数量。

circumference = float(input("请输入多边形的周长:"))
num_polygons = int(input("请输入需要测试的多边形数量:"))
生成多边形

根据输入的周长,我们可以计算出多边形的边长,然后利用turtle库来绘制一个多边形。我们可以将这个多边形的边长保存下来,以便后续测试。

import turtle

polygon_sides = int(input("请输入多边形的边数:"))

polygon_length = circumference / polygon_sides

turtle.penup()
turtle.goto(-300, 0)
turtle.pendown()

for i in range(polygon_sides):
  turtle.forward(polygon_length)
  turtle.left(360 / polygon_sides)

turtle_screen = turtle.getcanvas()
polygon_coords = turtle_screen.coords(turtle_screen._items[-1])
polygon_edges = []

for i in range(polygon_sides):
  x1, y1 = polygon_coords[i % polygon_sides * 2], polygon_coords[i % polygon_sides * 2 + 1]
  x2, y2 = polygon_coords[(i + 1) % polygon_sides * 2], polygon_coords[(i + 1) % polygon_sides * 2 + 1]
  polygon_edges.append(((x1, y1), (x2, y2)))
生成测试多边形

接下来,我们根据输入的测试数量,生成新的多边形进行测试。我们可以随机生成新的多边形,确保其边长与原多边形不同;或者随机生成一个与原多边形相同的多边形。

import random

all_polygons = [polygon_edges]

while len(all_polygons) < num_polygons:
  new_polygon_edges = []

  if random.choice([True, False]):
    # Generate a new polygon with different side lengths
    for i in range(polygon_sides):
      new_length = polygon_length
      while new_length == polygon_length:
        new_length = random.uniform(polygon_length - 5, polygon_length + 5)

      x1, y1 = polygon_coords[i % polygon_sides * 2], polygon_coords[i % polygon_sides * 2 + 1]
      x2, y2 = polygon_coords[(i + 1) % polygon_sides * 2], polygon_coords[(i + 1) % polygon_sides * 2 + 1]
      new_polygon_edges.append(((x1, y1), (x2, y2), new_length))
  else:
    # Generate a new polygon with the same side lengths
    for i in range(polygon_sides):
      x1, y1 = polygon_coords[i % polygon_sides * 2], polygon_coords[i % polygon_sides * 2 + 1]
      x2, y2 = polygon_coords[(i + 1) % polygon_sides * 2], polygon_coords[(i + 1) % polygon_sides * 2 + 1]
      new_polygon_edges.append(((x1, y1), (x2, y2), polygon_length))

  all_polygons.append(new_polygon_edges)
测试多边形

最后,我们对生成的多边形进行测试,然后展示测试结果。

def test_polygon(polygon_edges):
  polygon_length = polygon_edges[0][2]

  for edge in polygon_edges:
    if edge[2] != polygon_length:
      return False

  return True

for i, polygon_edges in enumerate(all_polygons):
  print("----------------------")
  print("多边形", i + 1)
  print("边长:")

  for edge in polygon_edges:
    print(edge[2])

  is_correct = test_polygon(polygon_edges)

  if is_correct:
    print("测试结果:正确")
  else:
    print("测试结果:错误")
示例
请输入多边形的周长:100
请输入需要测试的多边形数量:5
请输入多边形的边数:6
----------------------
多边形 1
边长:
16.666666666666668
16.666666666666668
16.666666666666668
16.666666666666668
16.666666666666668
16.666666666666668
测试结果:正确
----------------------
多边形 2
边长:
21.201703182647175
21.39822478792599
17.755578810501
13.189636219711953
15.489903438393786
11.96653487481908
测试结果:错误
----------------------
多边形 3
边长:
16.666666666666668
16.666666666666668
16.666666666666668
16.666666666666668
16.666666666666668
16.666666666666668
测试结果:正确
----------------------
多边形 4
边长:
14.470069386735552
12.56495133584517
16.91802004588926
16.105142940250255
14.042267188347233
26.898548103232578
测试结果:错误
----------------------
多边形 5
边长:
17.322889768547605
26.35306744652441
23.86742578747357
11.850468377944283
17.036502585719146
3.5696450331570317
测试结果:错误