Python -- While 循环失败
Python -- While Loop Failure
对 python 很陌生。我创建了一个简单的程序,它使用 while 循环来更好地了解循环。节目:
- 询问用户是否希望计算每加仑英里数
只要用户回答"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 ")))
中的 int
和 float(random.randint(1,1000))
中的 float
- 而不是使用一堆
or
条件,calculate_question == "yes" or calculate_question == "y"
,使用in
,variable 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
您的代码的两个主要问题是:
- 循环体由缩进定义。由于您没有缩进任何内容,因此循环不会执行任何操作。
- 您正在循环语句体的中间定义一个新函数。
从用户体验的角度来看,最好仅在用户回答为肯定时才询问里程,并在循环结束时刷新问题。
所以最少要做的更改是:
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
对 python 很陌生。我创建了一个简单的程序,它使用 while 循环来更好地了解循环。节目:
- 询问用户是否希望计算每加仑英里数
只要用户回答"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 ")))
中的int
和float(random.randint(1,1000))
中的 - 而不是使用一堆
or
条件,calculate_question == "yes" or calculate_question == "y"
,使用in
,variable in [list of values]
float
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
您的代码的两个主要问题是:
- 循环体由缩进定义。由于您没有缩进任何内容,因此循环不会执行任何操作。
- 您正在循环语句体的中间定义一个新函数。
从用户体验的角度来看,最好仅在用户回答为肯定时才询问里程,并在循环结束时刷新问题。
所以最少要做的更改是:
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