2017-08-01 57 views
-1

我正在写一个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 
+3

你明白'if'做什么? –

+1

你应该放弃'var1 = ans',并使用'if ans == var1:',就像我在这里看到误解 –

+0

,在语句'if var1:'你检查var1是否存在,而不是它的当前值。 – dannyxn

回答

2

你没有正确使用if声明。

if var1:只有在var1已经是bool,但是它是一个字符串(“英制”或“公制”)时才起作用。

尝试以下操作:

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本身?

第四是如果答案不是“英制”或“公制”,它总是默认为公制。您可以检查并让用户知道,如果它的输入不是有效值,那么他的输入无效。

因此,一个更好的版本是:

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".' 
+0

@dannyxn对,补充说,在一个更好的版本,指出了一些其他的事情,也可以做得更好。它仍然不是最高效的,但它应该给初学者一些提示而不完全改变他的代码。 –