I am new to programming and have gotten stuck on a small project. I am trying to have it where I can iterate through a dictionary and determine if the user wants to make an edit. If the user wants to make an edit I want to update the dictionary, otherwise if they do not want to edit the specified section that the program moves on to the next section. I currently have an if statement inside of a for loop to complete this task. The for loop is iterating through the various pieces of a dictionary and the if statement is determining if the user wants to make an edit to the specified portion of the dictionary ( category, recipe name, cooktime, ingredients, instructions ). Currently even if the user inputs the value to say no it continues as if they said yes. What can I do to correct the logic in my code so when the user enters "n" or "N" that it skips over that section of the for loop and continues forward? Below is a snippet of the code. Thank you.
recipes = {1: {'Category' :'Dessert', 'Recipe Name' :' PB Bannana Nice Cream', 'Cooktime' : '15 minutes', 'Ingredients' : '2 frozen bannanas, 2 tablespoons peanut butter powder',
'Instructions' : 'Place frozen bananas into blender with peanut butter powder. Process until creamy'},
2: {'Category' : 'Lunch' , 'Recipe Name' : 'PBJ', 'Cooktime' : '5 minutes', 'Ingredients' : '2 pieces of bread, 2 tablespoons peanut butter, 1 tablespoon jelly or jam',
'Instrutions' :'Spread PB on bread, spread jelly on PB'}}
for number in recipes:
print(f"\n{number}")
for key, value in recipes[number].items():
print(f"\t{key} : {value}")
edit_selection = input('\nPlease select the number that cooresponds to the recipe that you would like to edit: ')
print("")
for key, value in recipes[int(edit_selection)].items():
print(f"\t{key} : {value}")
for key in recipes[int(edit_selection)]:
change_choice = input(f"\nWould you like to edit the recipies {key}? (Y or N) ")
if change_choice == 'y' or 'Y' or "y" or "Y":
print(change_choice)
new_value =input(f"Please enter the new value for the {key}: ")
recipes[int(edit_selection)].update({f'{key}' : f"{new_value}"})
elif change_choice == 'n' or 'N':
break
print(recipes[int(edit_selection)])
>Solution :
As you might have guessed, the problem is in your if condition. Change it to
if change_choice == 'y' or change_choice == 'Y':
and
elif change_choice == 'n' or change_choice == 'N':
and it should work fine.
If you don’t want to have to repeat the comparison with ==, you can instead check whether your input variable’s value is in a sequence type (tuple or list, for example) containing all the strings you wish to include. This comparison:
if change_choice in ('y', 'Y')
is equivalent to the above.