if语句和多个条件出错

时间:2018-04-14 18:16:15

标签: python python-2.7 if-statement

我遇到if语句检查输入是否正确的问题。 当我输入M或F时,它打印出“输入错误”,我不太清楚它。

def check(aw,iw):
    if abs(aw-iw)<5 :
        print "Your weight is normal."
    elif abs(aw-iw)>5 and abs(aw-iw)<15 :
        print "Your weight is about normal."
    else:
        print "Your weight is not normal."
    return

print "Enter your gender (M/F)"
gender=raw_input()
if gender!='M' or gender!='F':
    print "Wrong input."
else:
    if gender=='M':
        w=raw_input("Enter your weight (kg) :")
        h=raw_input("Enter your height (cm) :")
        idw=110-h
        check(w,idw)
    else:
        w = raw_input("Enter your weight (kg) :")
        h = raw_input("Enter your height (cm) :")
        idw = 110 - h
        check(w, idw)

5 个答案:

答案 0 :(得分:1)

每个输入不等于M或不等于F(例如,M不等于F)。相反,您需要检查您的输入是否不等于M 不等于F

if gender != 'M' and gender != 'F':
    # Here ------^
    print "Wrong input."

或者,更优雅地,使用not in运算符:

if gender not in ('M', 'F'):
    print "Wrong input."

答案 1 :(得分:1)

此行不正确:

if gender!='M' or gender!='F':

它始终会解析为False,因为gender永远不会同时为MF

您可以改为使用in

if gender in ('M', 'F'):

可替换地:

if (gender != 'M') and (gender != 'F'):

另外,删除行gender=int(gender):它应该始终失败。

答案 2 :(得分:0)

我希望您在之前的问题答案中已经得到了答案。我想补充一个事实,你欣赏一些你可能面临的简单问题的可视化,但每个初学者都非常精致。

你有这样做 - 当你写作

  

中号

python检查是否

  

M != (不等于)M

但是M等于M.因此它会导致错误,然后检查是否

  

M!= F

并且看到它的真实性。 操作因此执行以下操作 -

  • true + true = true
  • true + false = true
  • false + true = true .......这一个
  • false + false = false

当你的那个类似于第三个时它返回true而python说&#34;错误的输入&#34;。

如果你写,那么它会像 - 是

  

中号!= M

返回false,

  

中号!= F

返回true。

中就像 -

  • true + true = true
  • true + false = false
  • false + true = false
  • false + false = false

因此python为if语句返回false,并在下一行代码中遵循您希望它执行的操作。我希望它非常清楚。

删除gender = int(性别)它不是必需的,因为python可以将M和F识别为char,你不需要将它变成整数值或ascii。

答案 3 :(得分:0)

删除行

gender=int(gender)

并对

进行更改
 if gender!='M' or gender!='F':

作为

if gender!='M' and gender!='F':

答案 4 :(得分:0)

此外,您应该使用<=在评估中包含限制。

def check(aw,iw):
    if abs(aw-iw)<=5 :
        print "Your weight is normal."

您可以缩短elif abs(aw-iw)>5 and abs(aw-iw)<15:,因为if abs(aw-iw)<5不是真的,那么它总是会高于5.

    #Instead of elif abs(aw-iw)>5 and abs(aw-iw)<15:
    elif abs(aw-iw)<=15:
        print "Your weight is about normal."
    else:
        print "Your weight is not normal."
    return

而不是:

print "Enter your gender (M/F)"
gender=raw_input()
gender=int(gender)

您应该使用:

gender = raw_input('Enter yor gender (M/F)')

int(gender)会导致错误,因为gender=raw_input()所需的输入会给出一个字母字符串。

您应该为or更改and,因为如果您使用or,如果您的输入为'M',那么gender != 'F'将会True它将运行if条件。

#Instead of if gender!='M' or gender!='F':
if gender!='M' and gender!='F':
    print "Wrong input."

在这里,您应该使用int(raw_input())将变量计算为整数,并能够对它们进行加或减。由于您使用MF执行相同的代码,因此无需编写另一个if: else:条件。

else:
    w = int(raw_input("Enter your weight (kg) :"))
    h = int(raw_input("Enter your height (cm) :"))
    idw = 110 - h
    check(w, idw)