【发布时间】:2015-05-20 04:47:46
【问题描述】:
这是我的代码,它在给定用户输入a, b, c 的情况下求解一个二次方程。但是,我想检查不正确的用户输入。如果用户输入除浮点数之外的任何内容,用户将面临print "Not a valid input. Try again.\n",然后是函数quadratic2() 的循环。然而,这个程序是一个更大程序的一部分,所以我希望用户可以选择输入"next" 来终止这个功能并继续前进。我的问题是我需要 3 个用户输入,但我希望 "next" 输入成为第一个输入 a。这工作得很好,直到用户输入一个随机字符串,导致ValueError。一旦发生这种情况,我的代码就不想循环回来检查输入是否为next。请帮我!我认为这段代码的嵌套方式让我很困惑。
def retest3():
print "Type in another a, b, and c. Or type \"Next\" to move on."
def quadratic1():
print ("This program calculates the zeroes of a quadratic equation."
"\nPlease enter a, b, and c, hitting \"Enter\" after each one: ")
def quadratic2():
while 1 == 1:
a = (raw_input())
if "next" == a.lower():
ontonextthing()
return 1 == 0
else:
try:
a = float(a)
except ValueError:
print "Not a valid input. Try again.\n"
quadratic2()
try:
b = float(raw_input())
except ValueError:
print "Not a valid input. Try again.\n"
quadratic2()
try:
c = float(raw_input())
except ValueError:
print "Not a valid input. Try again.\n"
quadratic2()
if b**2-4*a*c>0:
root1=(-b+math.sqrt(b**2-4*a*c))/(2*a)
root2=(-b-math.sqrt(b**2-4*a*c))/(2*a)
print ("First Root: {0}\nSecond Root: {1}".format(root1,root2))
else:
print ("The discriminant is negative, so your"
" roots will contain \"i\".")
disc1=(b**2-4*a*c)
disc2=-disc1
sqrtdisc2=(math.sqrt(disc2))/(2*a)
b2=(-b)/(2*a)
print ("{0} + {1}i".format(b2, sqrtdisc2))
print ("{0} - {1}i\n".format(b2, sqrtdisc2))
retest3()
quadratic1()
quadratic2()
【问题讨论】:
-
这似乎过于混乱。你看过
argparse吗?挺好的docs.python.org/2.7/library/argparse.html -
This post 显示了一种处理方法,但如果您必须这样做,则例外。
-
感谢您的反馈。我没有检查这些建议,因为下面的答案使它按我的意愿工作。我知道这是非常混乱的代码,我会努力养成写得更整洁的习惯,但是为了我这个小程序的目的,我已经研究了一段时间并且很高兴它可以工作!跨度>
标签: python if-statement while-loop nested try-catch