0
#for project 2
# division

def divide(a, b):
    return (a / b)
    
# palindrome
 
def isPalindrome(s):
    return s == s[::-1]

print("Select operation.")
print("1. Divide")
print("2. Palindrome")
print("3. Square root")

while True:
    choice = input("Enter choice(1/2/3): ")
    
    if choice == '1':
        num1 = float(input("Enter first number: "))
        num2 = float(input("Enter second number: "))
        print(num1, "/", num2, "=", divide(num1, num2))
    
    elif choice == '2':
        def isPalindrome(s):
            return s == s[::-1]
        
        s = str(input("Enter word:"))
        ans = isPalindrome(s)
        if ans:
                print (s+" "+"is a palindrome.")
        else:
                print (s+" "+"is not a palindrome.")
    
    elif choice == '3':
        threenumber = float(input("Enter a number: "))
        sqrt = threenumber ** 0.5
        print ("The square root of " + str(threenumber) + " is " + "sqrt", sqrt)

    next_calculation = input("Let's do next calculation? (yes/no): ")
    if next_calculation == "no":
        break

else:
    print("Invalid Input")

When testing it myself, in the beginning, if I entered any other input rather than 1, 2, or 3, it would jump to the "next_calculation" function. I want it to say "That's not an option, silly." instead. When I select 1 or 3 if I enter anything other than a number the program will stop. I want it to say "That's not a valid number, silly." How do I do this?

3 Answers3

1

You can do that with continue to ignore the loop and return to the start after checking if the input is in your list of possible values

if choice not in ('1', '2', '3'):
   print("Invalid input")
   continue

Put that after the input

Icenore
  • 96
  • 6
0

I'd add right after choice = input("Enter choice(1/2/3): "), this snippet:

while (choice not in ['1','2','3']):
    print("That's not a valid number, silly.")
    choice = input("Enter choice(1/2/3): ") 

In this way, you won't reach the end of the cycle unless you give a correct number.

lemon
  • 14,875
  • 6
  • 18
  • 38
0

I think you should try to use Switch in this case, instead of if/elses.

Check out this answer.

Otherwise, @Icenore answer seems to be correct. Also, remember to correctly ident your code, your current else: code is being executed after your while True: