¿Cómo convertir string a entero en Python?

En Python, una string se puede convertir en un número entero usando los siguientes métodos:

Método 1: Usando la función int() incorporada: 

Si su string contiene un entero decimal y desea convertirlo en un int, en ese caso, pase su string a la función int() y convertirá su string en un entero decimal equivalente.

Sintaxis: int(string, base)

Parámetro: Esta función toma los siguientes parámetros:

  • string: consta de 1, 0 o dígitos hexadecimales, octales, etc.
     
  • base : (valor entero) base del número.

Devoluciones: Devuelve un valor entero, que es equivalente 
a una string en la base dada. 

Código:

Python3

# Initialising a string 
# with decimal value
string = "100"
  
# Show the Data type
print(type(string))
  
# Converting string into int
string_to_int = int(string)
  
# Show the Data type
print(type(string_to_int))

Producción:

<class 'str'>
<class 'int'>

De forma predeterminada, int() espera que el argumento de string represente un entero decimal. Suponiendo, en cualquier caso, que pase una string hexadecimal a int(), entonces mostrará ValueError. En tales casos, puede especificar la base del número en la string.

Código:

Python3

# Initialising a string
# with hexadecimal value
string = "0x12F"
  
# Show the Data type
print(type(string))
  
# Converting hexadecimal 
# string into int
string_to_int = int(string, 
                    base=16)
# Show the Data type
print(type(string_to_int))

Producción:

<class 'str'>
<class 'int'>

Método 2: Usando la función definida por el usuario: 

 También podemos convertir una string en un int creando nuestra propia función definida por el usuario.

Acercarse: 

  • comprobaremos si el número tiene algún signo «-» o no, ya que si es un número negativo, tendrá el signo «-«. Si contiene el signo «-«, comenzaremos nuestra conversión desde la segunda posición que contiene números.
  • Cualquier número, supongamos 321, se puede escribir en la estructura: 10**2 * 3 + 10**1*2 + 10**0*1
  • De manera similar, dividimos cada uno de los números de entrada usando  ord(argumento), ord(‘0’) devolverá 48, ord(‘1’) devolverá 49 y así sucesivamente.
  • La lógica aquí es que ord(‘1’) – ord(‘0) = 1, ord(‘2’) – ord(‘0’) = 2 y así sucesivamente, lo que nos da el número significativo que se va a obtener del dado número de entrada.
  • Finalmente, el resultado que obtenemos de la función es un número integral que cambiamos de la string dada.

Código:

Python3

# User-defined function to 
# convert a string into integer
def string_to_int(input_string):
    
  output_int = 0
    
  # Check if the number contains
  # any minus sign or not, 
  # i.e. is it a negative number or not. 
  # If it contains in the first
  # position in a minus sign,
  # we start our conversion 
  # from the second position which
  # contains numbers.
  if input_string[0] == '-' :
    starting_idx = 1
    check_negative = True
      
  else:
    starting_idx = 0
    check_negative = False
      
  for i in range(starting_idx, len(input_string)):
      
    # calculate the place value for 
    # the respective digit
    place_value = 10**(len(input_string) - (i+1))
      
    # calculate digit value
    # ord() function gives Ascii value
    digit_value = ord(input_string[i]) - ord('0')
      
    # calculating the final integer value
    output_int += place_value * digit_value
      
  # if check_negative is true 
  # then final integer value 
  # is multiplied by -1
  if check_negative :
    return -1 * output_int
  else:
    return output_int
  
# Driver code
if __name__ == "__main__" : 
    
  string = "554"
  
  # function call
  x = string_to_int(string)
  
  # Show the Data type
  print(type(x))
  
  string = "123"
  
  # Show the Data type
  print(type(string_to_int(string))) 
  
  string = "-123"
  
  # Show the Data type
  print(type(string_to_int(string)))

Producción:

<class 'int'>
<class 'int'>
<class 'int'>

Publicación traducida automáticamente

Artículo escrito por ankthon y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *