使用If语句的三角剖分器(Python)

2024-09-29 21:30:48 发布

您现在位置:Python中文网/ 问答频道 /正文

我在我的代码,使这个程序按指示。。。在

要求用户输入三个数字,它们是一个潜在三角形的边。在

如果边不能是三角形的有效边,告诉用户“真遗憾,那不是三角形!“,否则说它是有效的。在

如果三个边都相等,告诉用户“这是一个等边三角形”。在

如果两边相等,告诉用户“这是等腰三角形”。在

提示:要成为三角形,最短的两条边之和必须大于最长的边。如果边是A、B和C,则A+B+C必须大于最长边的两倍。在

这是我到目前为止所拥有的,我认为它应该运行得很好,但是当我试图运行它时,我遇到了一个错误。我能做些什么让它顺利运行吗?谢谢你抽出时间。在

 import math
a = input("Please Enter Side  A ")
b = input("Please Enter Side  B")
c = input("Please Enter Side  C ")
d = a+b+c
if d < (2*c)
     print"Shame on you, that is not a triangle!"
elif d > (2*c):
     print"You Have Two Possible Answers: "
else:
     xone = a=b=c
     xtwo = a=b
print "It's Equilateral:",xone," 
print "It's Isosceles:",xtwo," 

Tags: 代码用户程序input错误it数字side
3条回答

我注意到的几个问题:

  • 您的if语句中缺少冒号。这是我第一次运行它时收到的错误消息:

    if d < (2*c)
                ↑
    line 6, column 13    in tringle.py
    

    这是一个很好的指示问题所在:解释器期望这里有一个冒号。所以我们解决了:

    ^{pr2}$

    转到下一个错误。

  • 悬挂双引号。我第二次运行它,错误如下:

    print "It's Equilateral:",xone,"
                                    ↑
    line 13, column 33   in tringle.py
    

    这一行有三组双引号。前两个将字符串It's Equilateral括起来,第三个开始一个从未闭合的字符串。所以我们去掉了双引号(在第二个打印语句上也一样):

    print "It's Equilateral:", xone
    print "It's Isosceles:", xtwo
    
  • xone并不总是分配的。。程序现在运行成功,但是当我输入26、13和4这三个长度时,我得到了另一个错误:

    Traceback (most recent call last):
      File "/Users/alexwlchan/tmp/tringle.py", line 13, in <module>
        print "It's Equilateral:", xone
    NameError: name 'xone' is not defined
    

    问题是xone只在if语句的一个分支中定义,但它作为等边三角形打印的一部分被调用,无论哪个分支被跟随。您需要重新排列打印语句以解决此问题。

  • 你的三角形检查实际上不起作用。以下是你的提示(强调我的):

    To be a triangle, the two shortest sides combined must be greater than the longest side.

    考虑我上面的例子:26、13和4。我从来没有警告过我这不是三角形,但很明显这样的三角形是不可能的。您任意地决定c是最长的边,但是为什么呢?没有理由相信那是真的。

也许你的程序不会产生你期望的结果,但是这行:

if d < (2*c)

缺少结肠,比如:

^{pr2}$

这里有很多问题。让我们一行一行地看。在

 import math
a = input("Please Enter Side  A ")

这是一个IndentationError,因为第二行是从第一行开始的。在

^{pr2}$

这不是一个错误,但它与另外两个错误不一致,因为它在"之前缺少一个空格,所以看起来不太好。在

c = input("Please Enter Side  C ")
d = a+b+c

这不是一个错误,但是如果您调用有意义的代码,例如,perimeter,而不是{},这会使代码更易于调试。在

if d < (2*c)

您缺少一个:。这是一个语法错误。所有像if这样的复合语句都有冒号。在

而且,这并不意味着“A+B+C必须大于最长边的两倍。”你将A+B+C与最后一条边的两倍进行比较,后者应该是最短的。此外,“小于”不表示“不大于”,“小于或等于”表示“不大于”。所以,你可能想要的是if d <= 2*max(a, b, c)。在

     print"Shame on you, that is not a triangle!"
elif d > (2*c):
     print"You Have Two Possible Answers: "

这不是一个错误,但是…有三个可能的答案:等边、等腰和两个都不是。在

另外,打印出You Have Two Possible Answers:,然后再打印It's Equilateral: True,然后It's Isosceles: False与打印{}不是一回事,这是作业要求的。通常,课堂作业,甚至是现实生活中的程序,都是通过自动测试来测试的,而不是由一个可以说“是的,那是一个90%学分的东西”的人来测试的。所以,即使这不是真的,你也应该习惯于按照规定写你的输出(理想情况下,编写您的自己的测试用例以检查输出)。在

else:

为什么不是两个案子,而是三个案子?它们相等(既不小也不大)的情况有什么特别之处?在

     xone = a=b=c

这是法律法规,但并不代表你的想法。=意味着赋值,所以取c的值,并将其赋给xonea和{}。这里您想要的是==进行等式测试:xone = a == b == c。(下一行也是如此。)

而且,xone和{}又是无意义的名称;为什么is_equilateral和{}?在

     xtwo = a=b

这和上面一样有问题,但也不是正确的测试。^{eem>第一个检验是否相等。如果第一面和第三面相等呢?这里需要的是a==b or b==c or a==c。在

另外,正如所写的,代码会说等边三角形既是等边的也是等腰的。我不确定你给我的定义是否正确。在

print "It's Equilateral:",xone," 

这三个案子都是你干的。但是在第三种情况下,你只给xone赋值,所以你将得到一个NameError,除非d == 2*c。在

另外,最后还有一个杂散的"。这将给您一个语法错误,因为在行尾没有结束的(非三重引号)字符串是非法的。在

print "It's Isosceles:",xtwo," 

这有两个与前一行完全相同的问题。在

除非您修复所有这些问题,否则您的代码将无法运行并执行您的逻辑。(当然,除非你的逻辑是正确的,否则它仍然是不正确的……但是一旦你运行了它,你可以测试它。)

相关问题 更多 >

    热门问题