Python 3-graphicalTriangle-字符串格式/函数
我想知道是否有人能指出我在最后一个字符串(区域、周界)中的错误-非常感谢任何帮助。) ####完整代码#####Python 3-graphicalTriangle-字符串格式/函数,python,python-3.x,Python,Python 3.x,我想知道是否有人能指出我在最后一个字符串(区域、周界)中的错误-非常感谢任何帮助。) ####完整代码##### 有几个问题 直接的问题是,您正试图格式化函数“permiture”和未定义的变量“a”。“f”格式说明符需要一个浮点数,所以它可能对此表示不满 另一个大问题是,您没有调用permiture()和area()函数 下一个问题可能还没有出现,因为函数没有被调用,那就是周长函数和面积函数使用的变量是主函数的局部变量 您需要修改周长()和面积()以将p1、p2和p3作为参数,类似于距离()将
有几个问题 直接的问题是,您正试图格式化函数“permiture”和未定义的变量“a”。“f”格式说明符需要一个浮点数,所以它可能对此表示不满 另一个大问题是,您没有调用permiture()和area()函数 下一个问题可能还没有出现,因为函数没有被调用,那就是周长函数和面积函数使用的变量是主函数的局部变量 您需要修改周长()和面积()以将p1、p2和p3作为参数,类似于距离()将p1和p2作为参数的方式。然后需要更新代码和对format()的调用,以便实际调用周长和面积函数。可能是这样的:
p = perimeter(p1,p2,p3)
a = area(p1,p2,p3)
message = Text(Point(5, 0.5),"The perimeter is: {0:0.2f}".format(p))
message.draw(win)
message2 = Text(Point(5, 1),"The area is: {0:0.2f}".format(a))
如果我对问题的理解正确,则面积计算的结果不正确。我看到两个问题 首先,您没有调用
周界
和区域
函数。您需要调用它们,并可能将点集合作为参数传入。(我写这篇文章的时候,耶利米也很清楚地回答了这一部分。)
第二个问题是,我认为你对三角形面积的计算是错误的。您试图应用公式area=base*height/2
,但您在开始时没有基准或高度,并且计算不正确
虽然可以确定您的基础和高度计算,但我建议使用不同的(但数学上等效的)公式,更好地匹配您的数据。下面是一种方法,使用我找到的公式:
另一个选项是使用,因为您也在计算周长。为了有效地执行此操作,您需要在同一个函数中找到周长和面积,因此您只能计算一次边的长度:
def perimeter_and_area(p0, p1, p2):
a = distance(p0, p1)
b = distance(p1, p2)
c = distance(p2, p0)
perimeter = a+b+c
s = perimeter / 2 # semiperimeter
area = math.sqrt(s * (s-a) * (s-b) * (s-c))
return perimeter, area
感谢您的帮助,耶利米: 分配工作代码
谢谢你的帮助,杰里米·哈夫特读了布尔克恩特的帖子(非常感谢)我不确定我的面积函数的准确性。将在我使用该公式后重新发布代码。我想我在不知不觉中做了很多苍鹭的事
p = perimeter(p1,p2,p3)
a = area(p1,p2,p3)
message = Text(Point(5, 0.5),"The perimeter is: {0:0.2f}".format(p))
message.draw(win)
message2 = Text(Point(5, 1),"The area is: {0:0.2f}".format(a))
def area(p0, p1, p2): # This code assumes points are tuples
return abs((p0[0]*(p1[1]-p2[1]) + # but the formula can work with any
p1[0]*(p2[1]-p0[1]) + # sort of point, just replace the
p2[0]*(p0[1]-p1[1])) / 2) # indexing with accessor calls.
def perimeter_and_area(p0, p1, p2):
a = distance(p0, p1)
b = distance(p1, p2)
c = distance(p2, p0)
perimeter = a+b+c
s = perimeter / 2 # semiperimeter
area = math.sqrt(s * (s-a) * (s-b) * (s-c))
return perimeter, area
import math
from graphics import *
def square(x):
return x * x
def distance(p1, p2):
# calculate distance between two points
dist = math.sqrt(square(p2.getX() - p1.getX()) + square(p2.getY() - p1.getY()))
return dist
def perimeter(tri):
# Calculate the perimeter of the triangle
points = tri.getPoints()
p1 = points[0]
p2 = points[1]
p3 = points[2]
perim = distance(p1,p2) + distance(p2,p3) + distance(p3,p1)
return perim
def area(tri):
# Calculate the area of the triangle
points = tri.getPoints()
p1 = points[0]
p2 = points[1]
p3 = points[2]
base = (distance(p3, p1) * (1 / 2))
height = ((base) ** 2) - (distance(p1, p2) ** 2)
h = math.sqrt(square(height))
a = (1/2) * ((base) * (h))
return a
def main():
# Setup graphWin
win = GraphWin("Draw a Triangle")
win.setCoords(0.0, 0.0, 10.0, 10.0)
message = Text(Point(5, 0.5), "Click on three points")
message.draw(win)
# Get and draw three vertices of triangle
p1 = win.getMouse()
p1.draw(win)
p2 = win.getMouse()
p2.draw(win)
p3 = win.getMouse()
p3.draw(win)
# Use Polygon object to draw the triangle
triangle = Polygon(p1,p2,p3)
triangle.setFill("black")
triangle.setOutline("blue")
triangle.draw(win)
p = perimeter(triangle)
a = area(triangle)
# write text to graphWin
message2 = Text(Point(5, 1),"The perimeter is: {0:0.2f}".format(p))
message2.draw(win)
message3 = Text(Point(5, 2),"The area is: {0:0.2f}".format(a))
message3.draw(win)
message.setText("Click again to close")
# Wait for another click to exit
win.getMouse()
win.close()
main()