0

I need to make it so that only numbers can be entered in the input (a and b), and throw an error letters when letters are passed.

Here is my code:

from colorama import init 
init() 
from colorama import Fore, Back, Style
povt = True

print(Fore.GREEN + "\nMAX-calc")

while povt == True:
    

    what = input(Fore.WHITE + "\nAction " + Fore.GREEN + "(+,-, ×, /): " + Fore.YELLOW)
    
    a = input (Fore.WHITE + "First number: " + Fore.YELLOW)
    b = input(Fore.WHITE + "Second number: " + Fore.YELLOW) 
    
    psh = input("Enter y: ")
    if psh == "y":
        if not a:
            a=0
        if not b:
            b=0
   
    if what == "+":
            c=float(a)+float(b)
            print(Back.YELLOW + Fore.BLACK + "Addition result:" + str(c))
    elif what == "-":
        c=float(a)-float(b)
        print(Back.YELLOW + Fore.BLACK +"Subtraction result:" + str(c))
    elif what == "×":
        c=float(a)*float(b)
        print(Back.YELLOW + Fore.BLACK +"Multiplication result:" + str(c))       
    elif what == "/":
        c=float(a)/float(b)
        print(Back.YELLOW + Fore.BLACK +"Division result:" + str(c)) 
    else:
        print(Back.RED + Fore.BLACK + "Sorry, I don't know what a " + what + ", is, but I'll try to figure it out > ͜ 0 ")
        
    povto = input("Retry? (y, n): " + Back.BLACK + Fore.YELLOW)
    
    if povto == "n":
        povt = False
    elif povto == "y":
        povt = True   
    else:
        povt = False
        print(Back.RED + Fore.BLACK + "OK... we will assume that the " + povto + " - means no > ͜ 0```
desertnaut
  • 57,590
  • 26
  • 140
  • 166
Mabuvv
  • 1

2 Answers2

0

A potential way of solving this would be:

keep_asking = True
while keep_asking:
    a = input("Please input a number: ")
    try:
        a = int(a)
    except ValueError:
        pass
    else:
        keep_asking = False

Essentially, this means that the binary variable keep_asking will remain True (and hence the loop will keep asking) as long as the type casting via int() fails, but as soon as it succeeds that variable will flip to False, and the loop will not be executed further.

Schnitte
  • 1,193
  • 4
  • 16
0

You can try to do this inside your input-loop:

while True:
    try:
        a = float(input(Fore.WHITE + "First number: " + Fore.YELLOW))
    except:
        print(Fore.RED + "Please enter a number!")
    else:
        break

This tries to cast the input to float (or any other type you want) and will only move on if you input a number.

Malsesto
  • 55
  • 11