¿Qué hay de malo con este código básico de Python?

Estás tratando de comparar valores de string entre sí. Esa es la razón por la cual la salida es inconsistente con el resultado esperado.

Los métodos raw_input() y input() toman la entrada estándar y la almacenan en formato de string .

Veamos si eso es cierto.

[correo electrónico protegido] : ~ $ python3.4
Python 3.4.2 (predeterminado, 19 de junio de 2015, 11:34:49)
[CCG 4.9.1] en Linux
Escriba “ayuda”, “derechos de autor”, “créditos” o “licencia” para obtener más información.
>>> a = input (“a:”)
a: 6
>>> a + 4
Rastreo (llamadas recientes más última):
Archivo “”, línea 1, en
TypeError: no se puede convertir el objeto ‘int’ a str implícitamente
>>> si a> 3:
… print (“Verdadero”)

Rastreo (llamadas recientes más última):
Archivo “”, línea 1, en
TypeError: tipos no ordenados: str ()> int ()
>>> b = int (input (“b:”))
b: 7
>>> b + 10
17
>>> si b> 3:
… print (“Verdadero. B> 3”)

Cierto. b> 3
>>>

Tenga en cuenta que a ser un objeto de string no se puede comparar o agregar a integers

Entonces, después de la corrección, su código debería ser similar a

#! / usr / bin / env python2.7

def main ():
a = int (raw_input (“a:”))
b = int (raw_input (“b:”))

si a> b:
imprimir “a gana:”
más:
imprimir “b gana:”

if __name__ == “__main__”:
principal()

Aquí está la salida para ello

[correo electrónico protegido] : ~ $ python2.7 comp.py
a: 10
b: 3
a gana:
[correo electrónico protegido] : ~ $

Nota : En python3.4 , el método raw_input() fue renombrado como input() . El método input() no funcionará en python2.* Cuando intente tomar información del usuario que está separada por espacios en blanco.


Codifico principalmente en Python. Puedes seguirme en Github (@prodicus) o twitter (@tasdikrahman)

raw_input es una función que devuelve una cadena sin importar lo que el usuario escriba realmente.

Hay otra función en Python 2.x, llamada “input ()” que evalúa la entrada para definir su tipo. En este caso, se debe utilizar para evaluar “20” y “7” como enteros en lugar de cadenas. Pruébalo:

a = input (“ingrese a”)
b = entrada (“enter b”)

si a> b:
imprimir “a gana”
más:
imprime “b gana ahora”

En Python 3.x, la función input () es la misma que raw_input () de Python 2.x, por lo que primero debe convertirlo a un entero:

a = int (input (“ingrese a”))
b = int (entrada (“enter b”))

Etiquetas: ¿Cómo puedo leer entradas como enteros en Python?

Pide que se almacenen 2 números en las variables a y b. Pero, el compilador no lo sabe. Toma la entrada como una cadena. De los documentos:

La comparación utiliza el orden lexicográfico: primero se comparan los dos primeros elementos, y si difieren esto determina el resultado de la comparación; si son iguales, se comparan los siguientes dos elementos, y así sucesivamente, hasta que se agote cualquiera de las secuencias.

Además, el orden lexicográfico para cadenas utiliza el orden ASCII para caracteres individuales.

Suponga que tiene str1 como "Jane" y str2 como "Jake" . Se comparan los dos primeros caracteres de str1 y str2 ( J y J ). Como son iguales, se comparan los segundos dos caracteres. Debido a que también son iguales, se comparan los terceros dos caracteres ( n k ). Y debido a que ‘ k ‘ tiene mayor valor ASCII que ‘ k ‘, str1 es mayor que str2 .

Aquí hay algunos ejemplos más:

>>> “tim” == “empate”
Falso
>>> “gratis”! = “libertad”
Cierto
>>> “flecha”> “aron”
Cierto
>>> “verde”> = “resplandor”
Cierto
>>> “verde” <"resplandor"
Falso
>>> “verde” <= "resplandor"
Falso
>>> “ab” <= "abc"
Cierto
>>>

Debe convertir la entrada en el tipo de datos int y luego verificar.

a = int (raw_input (“Ingrese el primer número:”))
b = int (raw_input (“Ingrese el segundo número:”))
si a> b:
imprimir “A es mayor”
más:
imprimir “B es mayor”

Sí, tiene razón, está comparando el primer carácter (número) de la entrada.
La razón es bastante simple. La entrada proporcionada a la función raw_input () siempre se almacena como una cadena. Y, bueno, algo bueno de Python (o un poco confuso en su caso) es que simplemente puede comparar las cadenas en orden Lexicográfico (O básicamente, Orden de diccionario). y eso es lo que está pasando aquí.

La solución es simple. solo necesita convertir su entrada de cadena a un número entero. y funcionará perfectamente bien.

El código que estás buscando es:

a = raw_input (‘Ingrese a:’)
b = raw_input (‘Ingrese b:’)

a = int (a)
b = int (b)

si a> b:
imprimir ‘a gana’
más:
imprimir ‘b gana ahora’

Este código también se puede acortar. En lugar de convertir la “cadena” ayb en enteros en un paso diferente, puede hacerlo mientras obtiene la entrada en sí, todo gracias a las funciones avanzadas de Python.

Esto es lo que quiero decir

a = int (raw_input (‘Ingrese a:’))
b = int (raw_input (‘Enter b:’))

Ahora, lo que sucede en este caso es que al iniciar la variable a, python toma el valor devuelto por la función raw_input () y lo convierte en enteros directamente y guarda ese valor en a. Lo mismo vale para b.

Este problema se produce porque raw_input() devuelve una cadena, por lo que debe realizar una conversión explícita antes de hacer la comparación.

a = int (raw_input (“Ingrese A:”))
b = int (raw_input (“Enter B:”))

si a> b:
imprimir “A gana!”
más:
imprimir “B gana ahora!”

Para más información: 2. Funciones y variables incorporadas, expresiones y declaraciones

el código debería ser –
a = raw_input (“enter a”) # a = int (raw_input (“enter a”))
b = raw_input (“enter b”) # b = int (raw_input (“enter b”))
a = int (a)
b = int (b)
si a> b:
imprimir “a gana”
más:
imprime “b gana ahora”

Como otros han dicho, el tipo es incorrecto.

El método “raw_input” le permite ingresar un valor. Sin embargo, lo lee como una cadena.

Para solucionarlo, coloque el siguiente código después de las entradas sin formato:

a = int (a)

b = int (b)

Para referencia futura, puede encontrar fácilmente el tipo de cualquier valor con el método type .:

tipo de impresión (a)

tipo de impresión (b)

Primero debe convertirlo en una cadena. Porque python lo maneja como una cadena.

Cómo convertir:

x = int (x) #x es la variable que desea convertir.

More Interesting

¿Necesitamos aprender el algoritmo primero antes de aprender el desarrollo web?

¿Se puede implementar la imaginación usando algoritmos? ¿Hay algo que no podamos explicar a través de un algoritmo, incluso en el futuro?

¿La complejidad de los algoritmos de clasificación está relacionada con la cantidad de suposiciones que hago? ¿Por qué?

¿Trabajar en ciberseguridad implica mucha programación y algoritmos?

¿Por qué la longitud de una matriz siempre es mayor que el índice más grande de la matriz?

Cómo analizar la complejidad del tiempo de ejecución del algoritmo de búsqueda binaria recursiva

Un árbol binario completamente equilibrado tiene 187 hojas. ¿Cuál es la altura del árbol?

¿Qué patrones iterativos y recursivos se pueden expresar como O (1), O (log2n), O (n) u O (n2) en notación O grande?

¿Por qué necesitamos un árbol AVL en informática?

¿Qué significa que el algoritmo TD (en el aprendizaje por refuerzo) hace predicción y no control?

¿Qué son los algoritmos gráficos?

Optimización matemática: ¿Cuáles son las aplicaciones para el problema del vendedor ambulante?

Dada una matriz con 100 elementos (números del 0 al 99), si saco un elemento aleatorio, ¿cómo encontrarías el que saqué? ¿Cómo resolvería esto si 1: la matriz está ordenada o 2: la matriz no está ordenada?

¿Cómo funciona el algoritmo de Clasificación de Señal Múltiple (MUSIC)?

¿Son los algoritmos de big data de caja negra una instancia de historia que se repite? ¿Qué está haciendo la comunidad de código abierto para crear algoritmos de big data transparentes y precisos?