3

I have a Python script which converts a decimal number into a binary one and this obviously uses their input.

I would like to have the script validate that the input is a number and not anything else which will stop the script.

I have tried an if/else statement but I don't really know how to go about it. I have tried if decimal.isint(): and if decimal.isalpha(): but they just throw up errors when I enter a string.

print("Welcome to the Decimal to Binary converter!") while True: print("Type a decimal number you wish to convert:") decimal = int(input()) if decimal.isint(): binary = bin(decimal)[2:] print(binary) else: print("Please enter a number.") 

Without the if/else statement, the code works just fine and does its job.

0

1 Answer 1

8

If the int() call succeeded, decimal is already a number. You can only call .isdigit() (the correct name) on a string:

decimal = input() if decimal.isdigit(): decimal = int(decimal) 

The alternative is to use exception handling; if a ValueError is thrown, the input was not a number:

while True: print("Type a decimal number you wish to convert:") try: decimal = int(input()) except ValueError: print("Please enter a number.") continue binary = bin(decimal)[2:] 

Instead of using the bin() function and removing the starting 0b, you could also use the format() function, using the 'b' format, to format an integer as a binary string, without the leading text:

>>> format(10, 'b') '1010' 

The format() function makes it easy to add leading zeros:

>>> format(10, '08b') '00001010' 
Sign up to request clarification or add additional context in comments.

3 Comments

In Python 2.x, you wouldn't need to call isdigit, infact, that would throw an error
@elssar: this is clearly not Python 2. In Python 2, you'd use raw_input() in this case.
well yes, but I thought it should be worth mentioning that in the answer. In my haste I forgot to mention that bit :/

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.