2011-07-20 28 views
8

Soy un principiante total y he estado buscando http://en.wikibooks.org/wiki/Python_Programming/Conditional_Statements pero no puedo entender el problema aquí. Es bastante simple, si el usuario introduce y se debe imprimir esto va a hacer el cálculo, aunque me da un error de sintaxis en la SI respuesta == "y"If instrucción para cadenas en python?

answer = str(input("Is the information correct? Enter Y for yes or N for no")) 
proceed="y" or "Y" 
If answer==proceed: 
print("this will do the calculation"): 
else: 
exit() 
+9

las respuestas a continuación deberían ayudarlo. Pero parece que tal vez necesites empezar desde cero y seguir un tutorial de programación. ¡Lo mejor es aprender los conceptos básicos antes de sumergirse! – samb8s

Respuesta

6

Python es un lenguaje de mayúsculas y minúsculas. Todas las palabras clave de Python son minúsculas. Use if, no If.

Además, no ponga dos puntos después de la llamada a print(). Además, aplique sangría a las llamadas print() y exit(), ya que Python utiliza sangrías en lugar de corchetes para representar bloques de código.

Y también, proceed = "y" or "Y" no hará lo que quiera. Use proceed = "y" y if answer.lower() == proceed:, o algo similar.

También existe el hecho de que su programa saldrá siempre que el valor de entrada no sea el carácter simple "y" o "Y", lo que contradice la indicación de "N" para el caso alternativo. En lugar de su else cláusula allí, utilice , con info_incorrect = "n" en algún lugar de antemano. Luego repita la respuesta o algo así si el valor de entrada era otra cosa.


recomiendo ir por el tutorial en la documentación de Python si va a tener tantos problemas para la forma en que está aprendiendo ahora. http://docs.python.org/tutorial/index.html

+0

y ¿qué tal el o ?! – samb8s

+0

@samb: ¿Qué pasa con el o? Debido a que el valor booleano '" y "' es 'True', el resultado de' proceed = "y" o "Y" 'será la asignación de' "y" 'a' proceed', lo cual no toma en cuenta la mayúscula. El uso de Daniel del operador 'in' es bueno, sin embargo. – JAB

+0

lo siento, agregué eso antes de que editaras tu publicación :) – samb8s

36

Incluso una vez que haya arreglado el if incorrecto y una indentación incorrecta en su código, no funcionará como probablemente esperaba. Para verificar una cadena contra un conjunto de cadenas, use in. Así es cómo lo haría (y tenga en cuenta que if es todo en minúscula y que el código dentro del bloque if tiene sangría de un nivel).

Un enfoque:

if answer in ['y', 'Y', 'yes', 'Yes', 'YES']: 
    print("this will do the calculation") 

Otra:

if answer.lower() in ['y', 'yes']: 
    print("this will do the calculation") 
+0

También ten en cuenta que en el código como el OP lo publicó, la sangría es incorrecta. –

+1

Se perdió el problema de que 'str (input())' no funcionará, 'raw_input()' es correcto. – agf

+2

@agf que depende de qué versión de Python esté usando, aunque si funcionara (es decir, usando Python 3.x) sería redundante. –

2
proceed = "y", "Y" 
if answer in proceed: 

Además, usted no quiere

answer = str(input("Is the information correct? Enter Y for yes or N for no")) 

¿Quieres

answer = raw_input("Is the information correct? Enter Y for yes or N for no") 

input() evalúa lo que se ingrese como una expresión de Python, raw_input() devuelve una cadena.

Editar: Esto sólo es cierto en Python 2. En Python 3, input está muy bien, aunque str() envoltura sigue siendo redundante.

+0

"' input() 'evalúa lo que se ingrese como una expresión de Python,' raw_input() 'devuelve una cadena." Excepto en Python 3, donde 'input()' hace lo que 'raw_input()' usaba, y usted usa 'eval (input())' o algo así si quería que la entrada se evaluara como una expresión de Python. – JAB

7

If debe ser if. Su programa debe tener este aspecto:

answer = raw_input("Is the information correct? Enter Y for yes or N for no") 
if answer.upper() == 'Y': 
    print("this will do the calculation"): 
else: 
    exit() 

Tenga en cuenta también que el sangrado es importante, porque marca un bloque en Python.

+1

Todavía está mal. 'raw_input()', not 'str (input())'. – agf

+0

@agf: tienes razón, arregló eso. –

-1

Python distingue entre mayúsculas y minúsculas y necesita una sangría adecuada.Debes usar "si" en minúsculas, sangrar tus condiciones correctamente y el código tiene un error. proceed evaluará a y

+1

'proceed' no se evaluará como' true', se evaluará como ''y''. –

+0

true, true, true :) – viraptor

5

que desea buscar:

answer = str(raw_input("Is the information correct? Enter Y for yes or N for no")) 
if answer == "y" or answer == "Y": 
    print("this will do the calculation") 
else: 
    exit() 

O

answer = str(raw_input("Is the information correct? Enter Y for yes or N for no")) 
if answer in ["y","Y"]: 
    print("this will do the calculation") 
else: 
    exit() 

Nota:

  1. que es "si", no es "Si". Python es sensible a mayúsculas y minúsculas
  2. La sangría es importante.
  3. No hay dos puntos o un punto y coma al final de los comandos de Python.
  4. Quiere raw_input no input; input evalúa la entrada.
  5. "o" le da el primer resultado si se evalúa como verdadero, y el segundo resultado de lo contrario. Entonces "a" or "b" evalúa a "a", mientras que 0 or "b" evalúa a "b". Ver The Peculiar Nature of and and or.
+2

Tu quinto punto es incorrecto. 'x o y' devolverá el primer valor si se evalúa como' verdadero', y el segundo valor de lo contrario. –

+0

¡Ah sí! ¡Actualizado! – MGwynne