我正在编写一个BMI计算器程序,其中包含公制和英制的选项。我的问题是,当我尝试使用公制时,程序必须通过英制方程运行数字,因为我得到了一个疯狂的答案。 这是我的代码:
var1 = "imperial"
print "Do you use imperial or metric?"
ans = raw_input()
var1 = ans
if var1:
print "What is your weight?"
weighti = float(raw_input())
print "What is your height?"
heighti = float(raw_input())
print "Your body mass index, BMI, is", weighti * 703 / heighti**2
else:
print "What is your weight?"
weightm = float(raw_input())
print "What is your height?"
heightm = float(raw_input())
print "your body mass index, BMI, is", weightm / heightm**2
答案 0 :(得分:2)
您未正确使用if
声明。
if var1:
仅在var1
已经是bool时才有效,但它是一个字符串(" imperial"或" metric")。
尝试以下方法:
var1 = "imperial"
print "Do you use imperial or metric?"
ans = raw_input()
var1 = ans
if var1 == 'imperial':
print "What is your weight?"
weighti = float(raw_input())
print "What is your height?"
heighti = float(raw_input())
print "Your body mass index, BMI, is", weighti * 703 / heighti**2
else:
print "What is your weight?"
weightm = float(raw_input())
print "What is your height?"
heightm = float(raw_input())
print "your body mass index, BMI, is", weightm / heightm**2
此外,您的代码还需要改进一些事项。
第一个是您应该使用更多描述性变量名称。 var1
告诉我关于变量内容的任何信息。 ans
稍微好一些。
第二个是你将var1
定义为"帝国"在开始时,但在将其重新分配给其他内容之前,您不能使用var1
。这是多余的,如果没有var1 = "imperial"
行,它就可以工作。
第三个问题是var1
变量本身也是多余的。如果您正在执行var1 = ans
,那么为什么不自己使用ans
?
第四,如果答案不是"帝国"或" metric",它将始终默认为指标。如果它不是有效值,您可以检查并让用户知道他的条目无效。
所以更好的版本是:
print "Do you use imperial or metric?"
ans = raw_input()
if ans == 'imperial':
print "What is your weight?"
weighti = float(raw_input())
print "What is your height?"
heighti = float(raw_input())
print "Your body mass index, BMI, is", weighti * 703 / heighti**2
elif ans == 'metric':
print "What is your weight?"
weightm = float(raw_input())
print "What is your height?"
heightm = float(raw_input())
print "your body mass index, BMI, is", weightm / heightm**2.
else:
print 'Sorry, but that input is not valid. Please enter either "imperial" or "metric".'