【问题标题】:unexpected indent error in Python 3 [duplicate]Python 3中的意外缩进错误[重复]
【发布时间】:2017-11-02 09:13:43
【问题描述】:

我正在尝试创建一个程序来计算一个人的 BMI 作为我的作业。我在第 9 行收到“意外缩进”错误,即 ***print(“您的 BMI 是:”,BMI)。 我已经来回移动缩进以纠正它,但仍然无法正常工作。请帮忙,因为我只是一个初学者。提前谢谢你。

user_input = float(input("Let's calculate your BMI! Please select if you 'K' for kilograms and L for pounds for your weight: ")).upper


if user_input == "K":
    user_input_weight_kgs = float(input("Weight in kgs.:"))
    user_input_height = float(input("Height by inches: "))
    user_input_age = (input("Age:"))
    BMI_for_kgs  = float(user_input_weight / (user_input_height **2))
        print ("Your BMI is: ",BMI)
    if BMI < 18.5 :
        print ("Under Weight")
    elif BMI < 26:
        print ("Normal Weight")
    else:
        print ("Over Weight")

elif user_input == "L":
    user_input_weight_lbs = float(input("Weight in lbs.: "))  
    user_input_height = float(input("Height by inches: "))
    user_input_age = (input("Age:"))
    BMI_for_lbs  = float((user_input_weight * 703) / (user_input_height **2))
        print ("Your BMI is: ",BMI)
    if BMI < 18.5 :
        print ("Under Weight")
    elif BMI < 26:
        print ("Normal Weight")
    else:
        print ("Over Weight")       

elif guess.isnumeric():
    print ("Please select an alphabet only! Letter 'K' or 'L'")
elif len(guess) > 1:
    print ("Please choose a single alphabet only! Letter 'K' or 'L'")
elif len(guess) == 0:
    print ("You need to enter a letter! Letter 'K' or 'L'")
else:
    break

【问题讨论】:

  • 因为这一行没有正确缩进 - 把它放回一个制表符!
  • 您的代码甚至不会检查第一个 if user_input == "K",因为您正在将输入转换为 float 并且您正在调用 .upper() 方法。
  • 这两行print ("Your BMI is: ",BMI) 都缩进太多了。它们应该与上面的线对齐。
  • 就用这个user_input = input("Let's calculate your BMI! Please select if you 'K' for kilograms and L for pounds for your weight: ").upper()。您只需要字母“K”或“L”,因此无法将字母转换为数字。
  • 缩进在 Python 中很重要。你会得到它的窍门。以后密切关注“Traceback”底部的错误信息。它通常会将您指向错误所在的行或至少附近的一个。

标签: python python-3.x


【解决方案1】:

问题是第 9 行(打印行)没有正确缩进,这里是修复:

if user_input == "K":
    user_input_weight_kgs = float(input("Weight in kgs.:"))
    user_input_height = float(input("Height by inches: "))
    user_input_age = (input("Age:"))
    BMI_for_kgs  = float(user_input_weight / (user_input_height **2))
    print ("Your BMI is: ",BMI)
    if BMI < 18.5 :
        print ("Under Weight")
    elif BMI < 26:
        print ("Normal Weight")
    else:
        print ("Over Weight")

elif user_input == "L":
    user_input_weight_lbs = float(input("Weight in lbs.: "))  
    user_input_height = float(input("Height by inches: "))
    user_input_age = (input("Age:"))
    BMI_for_lbs  = float((user_input_weight * 703) / (user_input_height **2))
    print ("Your BMI is: ",BMI)
    if BMI < 18.5 :
        print ("Under Weight")
    elif BMI < 26:
        print ("Normal Weight")
    else:
        print ("Over Weight")       

elif guess.isnumeric():
    print ("Please select an alphabet only! Letter 'K' or 'L'")
elif len(guess) > 1:
    print ("Please choose a single alphabet only! Letter 'K' or 'L'")
elif len(guess) == 0:
    print ("You need to enter a letter! Letter 'K' or 'L'")
else:
    break

您应该只在代码块内缩进代码。缩进开始一个块,取消缩进结束它。 Python 中没有显式的大括号、方括号或关键字来结束代码块。

编辑

回答附加问题(在 cmets 中):

您的问题是您期望字符串看起来是“K”或“L”,但您正在尝试将该字符串转换为浮点数。这应该表明有问题。此外,您实际上并没有调用upper(),这是另一个问题(除非您的意图是调用user_input() 来获取字符串的大写值,我认为这里没有必要)。解决:

user_input = input("Let's calculate your BMI! Please select if you 'K' for kilograms and L for pounds for your weight: ").upper()

【讨论】:

  • 啊哈!!谢谢我已经把一个标签移回来了,它起作用了!正如@kstullich 刚刚评论的那样,现在的一个问题是,在输入 K 后,我收到一条错误消息,提示无法将字符串转换为浮点数:'k'。但是不应该不是在得到K之后,它应该要求用户以kgs输入他们的体重吗?
  • @kstullich 的意思是 user_input == "K" 将始终为 false,因为您将浮点数与字符串进行比较。同样在您的第一行,您将字符串转换为浮点数。这仅在您的字符串表示数字时才有效(ei:"1.5""22" 等...)。如果唯一有效的选项是“K”和“L”,那么不要将输入转换为浮点数,只要确保它是大写的,你应该很高兴
  • 好的,我会更新我的答案,以包括你的这个额外问题
  • 哈!我现在明白了!哈哈,是的,字母不会转换为浮点数,问题一开始就谢谢你!
猜你喜欢
  • 2020-12-17
  • 2011-05-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-25
  • 2022-06-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多