Python -- While 循环失败

Python -- While Loop Failure

对 python 很陌生。我创建了一个简单的程序,它使用 while 循环来更好地了解循环。节目:

  1. 询问用户是否希望计算每加仑英里数

只要用户回答"yes"我希望程序继续执行计算。如果他们拒绝,则循环结束。

我的问题是我似乎无法关闭循环。

calculate_question = input("Would you like to calculate your MPG? ")
miles_driven = float(int(input("How many miles did you drive ")))

while calculate_question == "yes" or calculate_question == "y" or calculate_question == "Yes" or calculate_question == "Y":
def mpg_calc():
    import random
    gallons_used = float(random.randint(1,1000))
    final_mpg = str(miles_driven/gallons_used)
    print("Your MPG is " + final_mpg)
mpg_calc();
calculate_question = input("Would you like to calculate your MPG? ")
miles_driven = float(int(input("How many miles did you drive ")))
else:
print("Then you'll never know!")
  • 保持 运行 与 while True
  • 的循环
  • 通过使用 if-else 检查条件并使用 break
  • 来打破循环
  • 保持函数独立,而不是在循环内。
  • 使用现代 f-Strings: A New and Improved Way to Format Strings in Python(例如 print(f'say something with a {variable}')
  • 删除不必要的 float(int(input("How many miles did you drive "))) 中的 intfloat(random.randint(1,1000))
  • 中的 float
  • 而不是使用一堆or条件,calculate_question == "yes" or calculate_question == "y",使用invariable in [list of values]
def mpg_calc(miles_driven: float):
    gallons_used = random.randint(1, 1000)
    final_mpg = miles_driven / gallons_used
    print(f"Your MPG is {final_mpg}")

while True:
    calculate_question = input("Would you like to calculate your MPG? ").lower()
    if calculate_question in ['yes', 'y']:
        miles_driven = float(input("How many miles did you drive "))
        mpg_calc(miles_driven)
    else:
        print("Then you'll never know!")
        break

您的代码的两个主要问题是:

  1. 循环体由缩进定义。由于您没有缩进任何内容,因此循环不会执行任何操作。
  2. 您正在循环语句体的中间定义一个新函数。

从用户体验的角度来看,最好仅在用户回答为肯定时才询问里程,并在循环结束时刷新问题。

所以最少要做的更改是:

def mpg_calc(miles_driven):
    import random
    gallons_used = float(random.randint(1,1000))
    final_mpg = str(miles_driven/gallons_used)
    print("Your MPG is " + final_mpg)

calculate_question = input("Would you like to calculate your MPG? ")

while calculate_question == "yes" or calculate_question == "y" or calculate_question == "Yes" or calculate_question == "Y":
  miles_driven = float(int(input("How many miles did you drive ")))
  mpg_calc(miles_driven)
  calculate_question = input("Would you like to calculate your MPG? ")
else:
  print("Then you'll never know!")

有很大的改进空间,比如在输入上使用 .lower() 函数来使检查完全不区分大小写,但这基本上是您的代码,只需很少的更改。

有缩进错误

calculate_question = input("Would you like to calculate your MPG? ")
miles_driven = float(int(input("How many miles did you drive ")))
#define function outside the loop
def mpg_calc():
    import random
    gallons_used = float(random.randint(1,1000))
    final_mpg = str(miles_driven/gallons_used)
    print("Your MPG is " + final_mpg)

while calculate_question == "yes" or calculate_question == "y" or calculate_question == "Yes" or calculate_question == "Y":

    mpg_calc();#this statement was not indented well
    calculate_question = input("Would you like to calculate your MPG? ")
    miles_driven = float(int(input("How many miles did you drive ")))
else:
    print("Then you'll never know!")

@Trentom_M 给出了一个很好的工作代码示例,这是原因。

你需要在while循环之前定义mpg_func,还需要在while循环中对要执行的语句进行正确的缩进。由于 python 不使用方括号 {},它会识别遵循正确缩进的语句,例如:

while condition:
    this statement is executed inside the while 
    this statement is executed inside the while
this statement is NOT executed inside the while