Reputation: 1615
Very new to python. I've created a simple program that makes use of a while loop to better learn about loops. The program:
As long as the user answers "yes" I want the program to keep performing the calculation. If they say no, the loop ends.
My problem is I cannot seem to get the loop to close.
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!")
Upvotes: 0
Views: 296
Reputation: 442
There was indentation error
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!")
Upvotes: 0
Reputation: 62403
while True
if-else
and use break
print(f'say something with a {variable}')
)int
in float(int(input("How many miles did you drive ")))
and float
in float(random.randint(1,1000))
or
conditions, calculate_question == "yes" or calculate_question == "y"
, use 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
Upvotes: 1
Reputation: 4201
The two major issues with your code are:
User experience-wise it would be better to ask for the miles only when the user has answered positively, and refresh the question at the end of the loop.
So the minimum changes to make are:
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!")
There is a lot of room for improvement like using the .lower()
function on the input to make the check case-insensitive altogether, but that is basically your code with minimal changes.
Upvotes: 0
Reputation: 317
@Trentom_M gave a good example of a working code, here's the why.
You need to define the mpg_func before the while loop, and also need to give the right indentation to the statements you want to execute inside the while. Since python doesn't use brackets {}, it recognises the statements the follow the correct indentation, for example:
while condition:
this statement is executed inside the while
this statement is executed inside the while
this statement is NOT executed inside the while
Upvotes: 0