Comprobando para ver si una cadena es un entero o flotante

Así que estoy creando un progtwig para mostrar sistemas numéricos, sin embargo, me he encontrado con problemas en el primer obstáculo. El progtwig tomará un número del usuario y luego lo usará en todo el progtwig para explicar varios conceptos de informática.

Al explicar mi primera sección, sistemas numéricos, el progtwig dirá qué tipo de número es. Estoy haciendo esto convirtiendo la cadena en un número flotante. Si el número flotante solo tiene ‘.0’ después, lo convierte en un entero.

Actualmente estoy usando este código

while CorrectNumber == False: try: Number = float(NumberString) - 0 print (Number) except: print ("Error! Not a number!") 

Esto es útil ya que muestra si el usuario ha ingresado un número o no. Sin embargo, no estoy seguro de cómo verificar el valor después del lugar decimal para verificar si debo convertirlo en un entero o no. ¿Algun consejo?

Si la cadena es convertible a entero, debe ser solo dígitos. Cabe señalar que este enfoque, como dijo @cwallenpoole, NO funciona con entradas negativas debido a que el carácter ‘-‘. Podrías hacerlo:

 if NumberString.isdigit(): Number = int(NumberString) else: Number = float(NumberString) 

Si ya tiene confirmado el número como un flotador, siempre puede usar is_integer (funciona con negativos):

 if Number.is_integer(): Number = int(Number) 

No estoy seguro de seguir la pregunta pero aquí hay una idea:

 test = ['1.1', '2.1', '3.0', '4', '5', '6.12'] for number in test: try: print(int(number)) except ValueError: print(float(number)) 

Devoluciones:

 1.1 2.1 3.0 4 5 6.12 

Esto comprueba si la parte fraccionaria tiene algún dígito distinto de cero.

 def is_int(n): try: float_n = float(n) int_n = int(float_n) except ValueError: return False else: return float_n == int_n def is_float(n): try: float_n = float(n) except ValueError: return False else: return True 

Probando las funciones:

 nums = ['12', '12.3', '12.0', '123.002'] for num in nums: if is_int(num): print(num, 'can be safely converted to an integer.') elif is_float(num): print(num, 'is a float with non-zero digit(s) in the fractional-part.') 

Se imprime:

 12 can be safely converted to an integer. 12.3 is a float with non-zero digit(s) in the fractional-part. 12.0 can be safely converted to an integer. 123.002 is a float with non-zero digit(s) in the fractional-part.