2010-10-20 21 views
9

La salida me estoy haciendo para mi pequeña aplicación de ejemplo es el siguiente:¿Cómo puedo convertir una cadena en int en Python?

Welcome to the Calculator! 
Please choose what you'd like to do: 
0: Addition 
1: Subtraction 
2: Multiplication 
3: Division 
4: Quit Application 
0 
Enter your first number: 1 
Enter your second number: 1 
Your result is: 
11 

Esto se debe a que el método de adición() está llevando a la entrada() como cadenas y no números. ¿Cómo puedo usarlos como números?

Aquí es toda mi guión:

def addition(a, b): 
    return a + b 

def subtraction(a, b): 
    return a - b 

def multiplication(a, b): 
    return a * b 

def division(a, b): 
    return a/b 

keepProgramRunning = True 

print "Welcome to the Calculator!" 

while keepProgramRunning:  
    print "Please choose what you'd like to do:" 

    print "0: Addition" 
    print "1: Subtraction" 
    print "2: Multiplication" 
    print "3: Division" 
    print "4: Quit Application" 



    #Capture the menu choice. 
    choice = raw_input()  

    if choice == "0": 
     numberA = raw_input("Enter your first number: ") 
     numberB = raw_input("Enter your second number: ") 
     print "Your result is:" 
     print addition(numberA, numberB) 
    elif choice == "1": 
     numberA = raw_input("Enter your first number: ") 
     numberB = raw_input("Enter your second number: ") 
     print "Your result is:" 
     print subtraction(numberA, numberB) 
    elif choice == "2": 
     numberA = raw_input("Enter your first number: ") 
     numberB = raw_input("Enter your second number: ") 
     print "Your result is:" 
     print multiplication(numberA, numberB) 
    elif choice == "3": 
     numberA = raw_input("Enter your first number: ") 
     numberB = raw_input("Enter your second number: ") 
     print "Your result is:" 
     print division(numberA, numberB) 
    elif choice == "4": 
     print "Bye!" 
     keepProgramRunning = False 
    else: 
     print "Please choose a valid option." 
     print "\n" 
+0

ya que declaró que el sistema registró la pregunta dos veces, comprobar el tiempo posterior. En realidad, no es mi culpa y tampoco puedo eliminar la pregunta. –

+0

El enlace 'close' no está presente para usted? –

+0

Eso no cierra inmediatamente la pregunta. –

Respuesta

15

Puesto que usted está escribiendo una calculadora que presumiblemente también aceptar los flotadores (1.5, 0.03), una Una forma más sólida sería utilizar esta sencilla función de ayuda:

def convertStr(s): 
    """Convert string to either int or float.""" 
    try: 
     ret = int(s) 
    except ValueError: 
     #Try float. 
     ret = float(s) 
    return ret 

De esta forma, si la conversión int no funciona, obtendrá una flotación devuelta.

Editar: Su función division también puede dar lugar a algunas caras tristes si no está al tanto de how python 2.x handles integer division.

En resumen, si quieres 10/2 para igualar 2.5 y no 2, tendrá que hacer from __future__ import division o lanzar uno o ambos de los argumentos para flotar, así:

def division(a, b): 
    return float(a)/float(b) 
+0

¡Oye, esto es muy bonito, gracias! –

+1

'convertStr = float', funciona casi igual. –

11
>>> a = "123" 
>>> int(a) 
123 

Aquí hay un código regalo de promoción:

def getTwoNumbers(): 
    numberA = raw_input("Enter your first number: ") 
    numberB = raw_input("Enter your second number: ") 
    return int(numberA), int(numberB) 
+0

Más funciones incorporadas: http://docs.python.org/library/functions.html –

0

Tal vez la siguiente, a continuación, su calculadora puede utilizar la base número arbitrario (por ejemplo hexadecimal, binario, base 7, etc!): (no probado)

def convert(str): 
    try: 
     base = 10 # default 
     if ':' in str: 
      sstr = str.split(':') 
      base, str = int(sstr[0]), sstr[1] 
     val = int(str, base) 
    except ValueError: 
     val = None 

    return val 

val = convert(raw_input("Enter value:")) 
# 10  : Decimal 
# 16:a : Hex, 10 
# 2:1010 : Binary, 10 
0

fácil!

if option == str(1): 
     numberA = int(raw_input("enter first number. ")) 
     numberB= int(raw_input("enter second number. ")) 
     print " " 
     print addition(numberA, numberB) 
    etc etc etc 
0

Además def (a, b): volver a + b

resta def (a, b): volver a - b

multiplicación def (a, b): volver a * b

división def (a, b): volver a/b

keepProgramRunning = True

print "¡Bienvenido a la calculadora!"

mientras keepProgramRunning:
de impresión "Por favor, elige lo que desea hacer:"

print "0: Addition" 
print "1: Subtraction" 
print "2: Multiplication" 
print "3: Division" 
print "4: Quit Application" 



#Capture the menu choice. 
choice = raw_input()  

if choice == "0": 
    numberA = input("Enter your first number: ") 
    numberB = input("Enter your second number: ") 
    print "Your result is: " + str(addition(numberA, numberB)) + "\n" 
elif choice == "1": 
    numberA = input("Enter your first number: ") 
    numberB = input("Enter your second number: ") 
    print "Your result is: " + str(subtraction(numberA, numberB)) + "\n" 
elif choice == "2": 
    numberA = input("Enter your first number: ") 
    numberB = input("Enter your second number: ") 
    print "Your result is: " + str(multiplication(numberA, numberB)) + "\n" 
elif choice == "3": 
    numberA = input("Enter your first number: ") 
    numberB = input("Enter your second number: ") 
    print "Your result is: " + str(division(numberA, numberB)) + "\n" 
elif choice == "4": 
    print "Bye!" 
    keepProgramRunning = False 
else: 
    print "Please choose a valid option." 
    print "\n" 
+0

¿Qué tal una pequeña explicación? – djv

-1
def addition(a, b): return a + b 

def subtraction(a, b): return a - b 

def multiplication(a, b): return a * b 

def division(a, b): return a/b 

keepProgramRunning = True 

print "Welcome to the Calculator!" 

while keepProgramRunning: 
print "Please choose what you'd like to do:" 
0

Si bien llamar a sus subfunciones de sus funciones principales se pueden convertir en las variables int y luego llamada.Por favor, consulte el código de abajo:

import sys 

print("Welcome to Calculator\n") 
print("Please find the options:\n" + "1. Addition\n" + "2. Subtraction\n" + 
"3. Multiplication\n" + "4. Division\n" + "5. Exponential\n" + "6. Quit\n") 

def calculator(): 
    choice = input("Enter choice\n") 

    if int(choice) == 1: 
     a = input("Enter first number\n") 
     b = input("Enter second number\n") 
     add(int(a), int(b)) 

    if int(choice) == 2: 
     a = input("Enter first number\n") 
     b = input("Enter second number\n") 
     diff(int(a), int(b)) 

    if int(choice) == 3: 
     a = input("Enter first number\n") 
     b = input("Enter second number\n") 
     mult(int(a), int(b)) 

    if int(choice) == 4: 
     a = input("Enter first number\n") 
     b = input("Enter second number\n") 
     div(float(a), float(b)) 

    if int(choice) == 5: 
     a = input("Enter the base number\n") 
     b = input("Enter the exponential\n") 
     exp(int(a), int(b)) 

    if int(choice) == 6: 
     print("Bye") 
     sys.exit(0) 



def add(a, b): 
    c = a+b 
    print("Sum of {} and {} is {}".format(a, b, c)) 

def diff(a,b): 
    c = a-b 
    print("Difference between {} and {} is {}".format(a, b, c)) 

def mult(a, b): 
    c = a*b 
    print("The Product of {} and {} is {}".format(a, b, c)) 

def div(a, b): 
    c = a/b 
    print("The Quotient of {} and {} is {}".format(a, b, c)) 

def exp(a, b): 
    c = a**b 
    print("The result of {} to the power of {} is {}".format(a, b, c)) 

calculator() 

Aquí lo que hice es que llamé cada una de la función mientras que la conversión de los parámetros introducidos a int. Espero que esto haya sido útil.

En su caso, se podría cambiar así:

if choice == "0": 
     numberA = raw_input("Enter your first number: ") 
     numberB = raw_input("Enter your second number: ") 
     print "Your result is:" 
     print addition(int(numberA), int(numberB)) 
Cuestiones relacionadas