如果否则与计算相结合

时间:2017-08-01 22:18:51

标签: python if-statement equation

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

1 个答案:

答案 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".'