The most common answer for the 3.5.9 Recipe CodeHS is:
# This program asks the user for three ingredients,
# three amounts, and a number of servings,
# then determines how much of each ingredient is needed
# to serve the specified number of servings.
# Get inputs for ingredients and their quantities
ingredient1 = input("Enter ingredient 1: ")
amount1 = float(input("Ounces of " + ingredient1 + ": "))
ingredient2 = input("Enter ingredient 2: ")
amount2 = float(input("Ounces of " + ingredient2 + ": "))
ingredient3 = input("Enter ingredient 3: ")
amount3 = float(input("Ounces of " + ingredient3 + ": "))
# Get the number of servings
num_servings = int(input("Number of servings: "))
# Calculate total ounces needed for each ingredient based on servings
print("Total ounces of " + ingredient1 + ": " + str(amount1 * num_servings))
print("Total ounces of " + ingredient2 + ": " + str(amount2 * num_servings))
print("Total ounces of " + ingredient3 + ": " + str(amount3 * num_servings))
This code calculates the total amount of each ingredient needed based on the number of servings. However, there are a few issues and improvements that can be made to the code:
- A typo in this input prompts for the amounts of ingredients 2 and 3. They incorrectly reference
ia
instead ofja
andka
respectively. - The formula for calculating the total amount of each ingredient is not properly enclosed in parentheses.
- For better readability, it’s good practice to use spaces around operators.
Here is the corrected version of this program:
def get_ingredient_info(ingredient_number):
"""
Prompt the user to enter the name and ounces per serving for a given ingredient.
Includes validation to ensure correct input types and values.
Args:
ingredient_number (int): The number of the ingredient (1, 2, or 3).
Returns:
tuple: A tuple containing the ingredient name (str) and ounces per serving (float).
"""
while True:
name = input(f"Enter ingredient {ingredient_number}: ").strip()
if name:
break
else:
print("Ingredient name cannot be empty. Please try again.")
while True:
try:
ounces = float(input(f"Ounces of {name}: "))
if ounces < 0:
print("Ounces cannot be negative. Please enter a positive number.")
continue
break
except ValueError:
print("Invalid input. Please enter a numeric value for ounces.")
return name, ounces
def main():
"""
Main function to execute the Recipe Calculator.
It collects ingredient information, the number of servings, calculates total ounces,
and displays the results.
"""
ingredients = []
ounces_per_serving = []
# Collect information for 3 ingredients
for i in range(1, 4):
name, ounces = get_ingredient_info(i)
ingredients.append(name)
ounces_per_serving.append(ounces)
# Get the number of servings with validation
while True:
try:
num_servings = int(input("Number of servings: "))
if num_servings <= 0:
print("Number of servings must be a positive integer. Please try again.")
continue
break
except ValueError:
print("Invalid input. Please enter an integer value for the number of servings.")
print() # Add a blank line for better readability
# Calculate and display total ounces for each ingredient
for name, ounces in zip(ingredients, ounces_per_serving):
total = ounces * num_servings
print(f"Total ounces of {name}: {total:.1f}")
if __name__ == "__main__":
main()
Here’s how the program behaves with this input:
Enter ingredient 1: mixed greens
Ounces of mixed greens: 1.7
Enter ingredient 2: blueberries
Ounces of blueberries: 2.0
Enter ingredient 3: walnuts
Ounces of walnuts: 0.2
Number of servings: 3
Total ounces of mixed greens: 5.1
Total ounces of blueberries: 6.0
Total ounces of walnuts: 0.6