Escribir un programa que pregunte al usuario su edad y muestre por pantalla si es mayor de edad o no.
>>print("Inicio de codigo") >>edad = int(input("Por favor ingrese su edad: ")) >>if edad >= 18: >> print("Es mayor de edad") >>else: >> print("Es menor de edad") >>print("Fin de codigo")
Respuesta:
>>>
Inicio de codigo
Por favor ingrese su edad: 17
Es menor de edad
Fin de codigo
>>>
Ejercicio 2
Escribir un programa que almacene la cadena de caracteres contraseña
en una variable, pregunte al usuario por la contraseña e imprima por
pantalla si la contraseña introducida por el usuario coincide con la
guardada en la variable sin tener en cuenta mayúsculas y minúsculas.
print("Inicio de codigo")
clave_guardada = 'contraseña'
clave = input("Por favor ingrese su contraseña: ")
if clave.lower() == clave_guardada.lower():
print("La contraseña es correcta")
else:
print("La contraseña es incorrecta")
print("Fin de codigo")
Respuesta:
Inicio de codigo
Por favor ingrese su contraseña: CONTRASEÑA
La contraseña es correcta
Fin de codigo
Ejercicio 3
Escribir un programa que pida al usuario dos números y muestre por
pantalla su división. Si el divisor es cero el programa debe mostrar un
error.
print('inicio de codigo')
num_1 = int(input('Favor ingresar el primer numero': ))
num_2 = int(input('Favor ingresar el sefungo numero': ))
if num_2 ==0:
print('error, la division por cero no es posible')
else:
division = num_1 /num_2
print(division)
print('Fin de codigo')
Ejercicio 4
Escribir un programa que pida al usuario un número entero y muestre por pantalla
si es par o impar.
print('Inicio de codigo')
num = int(input('Favor ingresar un numero entero: '))
if num % 2 == 0:
print('El numero ingresado es par')
else:
print('El numero ingresado es impar')
print('Fin de codigo')
Respuesta:
Inicio de codigo
Favor ingresar un numero entero: 0
El numero ingresado es par
Fin de codigo
Para escribir programas útiles, casi siempre necesitamos la capacidad de verificar
condiciones y cambiar el comportamiento del programa en consecuencia. Declaraciones de selección, a veces
también conocido como declaraciones condicionales, danos esta habilidad. La forma más simple de selección es la Declaración if .
Esto a veces se conoce comoselección binaria Dado que hay dos posibles caminos de ejecución.
>>x = 15 # PPI: se asigna a la variable x el valor de 15 int
>>if x % 2 == 0: # PPI: si el residuo de dividir x por 2 es equivalente a 0 entonces >> print(x, "is even") # PPI: imprima (15) es par >>else: # PPI: sino >> print(x, "is odd") # PPI: imprima (15) es impar
>>> Es impar
La sintaxis para un if La declaración se ve así:
ifBOOLEANEXPRESSION:STATEMENTS_1# executed if condition evaluates to Trueelse:STATEMENTS_2# executed if condition evaluates to False
La expresión booleana después del if La declaración se llama la condición.
Si es cierto, entonces se ejecutan las declaraciones con sangría inmediatamente siguiente. Si no, entonces las declaraciones
sangrado bajo el else La cláusula se ejecuta.
Como con la definición de función del último capítulo y otro compuesto
declaraciones como for, el ifLa declaración consiste en una línea de encabezado y un cuerpo. El encabezado
La línea comienza con la palabra clave if seguido de una expresión booleanay termina con
un colon (:).
Las declaraciones más sangradas que siguen se llaman bloquear.
Cada una de las declaraciones dentro del primer bloque de declaraciones se ejecuta en orden si el booleano
La expresión evalúa a True. Todo el primer bloque de declaraciones
se omite si la expresión booleana se evalúa False, y en su lugar
Todas las declaraciones bajo el elsese ejecutan la cláusula.
No hay límite en el número de declaraciones que pueden aparecer bajo las dos cláusulas de unifDeclaración, pero tiene que haber al menos una declaración en cada bloque.
Cada declaración compuesta incluye un encabezado y todas las siguientes declaraciones más indentadas en
el bloque después del encabezado. El if - else la declaración es una declaración compuesta inusual porque
tiene más de una parte al mismo nivel de sangría que el if título,
(el else cláusula, con su propio bloque con sangría).
Comprueba tu comprensión
¿Cuántas declaraciones pueden aparecer en cada bloque (el IF y el Else) en una declaración condicional?
Ahora hemos agregado varios
operadores adicionales a los que aprendimos en los capítulos anteriores.
Es importante comprender cómo estos operadores se relacionan con los
demás con respecto a la precedencia del operador. Python siempre
evaluará primero los operadores aritméticos (** es más alto, luego
multiplicación/división, luego suma/resta). Luego vienen los operadores
relacionales. Finalmente, los operadores lógicos se realizan al final.
Esto significa que la expresión x*5>=10andy-6<=20 se evaluará para realizar primero la aritmética y luego verificar las relaciones. El and se hará último. Aunque muchos programadores pueden colocar paréntesis en las dos expresiones relacionales, no es necesario.
La siguiente tabla resume la precedencia discutida hasta ahora de más alta a más baja.
Consulte la tabla de precedencia del operador para todos los operadores introducidos en este libro.
Nivel
Categoría
Operadores
7 (alto)
exponente
**
6
multiplicación
*,/,//,%
5
suma
+,-
4
relacional
== ,! =, <=,> =,>, <
3
lógico
no
2
lógico
y
1 (bajo)
lógico
o
Comprueba tu comprensión
¿Cuál de los siguientes
expresa correctamente la precedencia de los operadores (usando
paréntesis) en la siguiente expresión: 5*3> 10 y 4+6 == 11
Hay tres operadores lógicos: and, or, y not. El
La semántica (significado) de estos operadores es similar a su significado en inglés.
Por ejemplo, x>0andx<10 es cierto solo si x es mayor que 0 y
Al mismo tiempo, X es menos de 10. ¿Cómo describirías esto en palabras? Dirías que
X está entre 0 y 10, sin incluir los puntos finales.
n%2==0orn%3==0 es cierto si alguna de las condiciones es verdad
es decir, si el número es divisible por 2 o divisible por 3. En este caso, uno u otro, o otro
Ambas partes deben ser ciertas para que el resultado sea verdadero.
Finalmente, el not El operador niega una expresión booleana, por lo tanto notx>y
es cierto si x>y es falso, es decir, si x es menor o igual a
y.
>> x = 5 # PPI: Se define la vairable x y se le asigna el valor de 5 >>print(x > 0 and x < 10) # PPI: debe imprimir True porque amabas condiciones lo son
>>n = 25 # PPI: se define una segunda variable n y se le asigna 25 >>print(n % 2 == 0 or n % 3 == 0) #PPI: deberia imprimir false
>>>
True False
Al tratar de mostrar cómo funcionan los operadores lógicos, los informáticos y los matemáticos usarán tanto
Tablas de verdad . Una tabla de verdad es una pequeña tabla que enumera todas las entradas posibles en sus columnas izquierdas y
Luego mostrará la salida de su operador lógico particular en la columna derecha. Tomar la lógica
operador and Por ejemplo:
a
b
a andb
T
T
T
T
F
F
F
T
F
F
F
F
La t en la tabla representa True Mientras la F significa False. Observe que cuando A y B
son ambos True, el operador logcial and salidas True. Así es exactamente como
Normalmente usamos "y" en la conversación diaria. Aquí están el resto de los operadores:
a
b
a andb
a orb
nota
notb
T
T
T
T
F
F
T
F
F
T
F
T
F
T
F
T
T
F
F
F
F
F
T
T
Además, Google ha proporcionado este breve video que muestra diferentes operadores lógicos:
En el video, cada letra es representativa de un operador lógico y solo muestra su color cuando el
correspondiente X o Y se muestra en la segunda g . Si echas un vistazo a Xor, notarás
Solo es colorido cuando X o Y se muestra Esto se llama exclusiveor,
que no estaremos usando.
¡ADVERTENCIA!
Hay un error muy común que
ocurre cuando los programadores intentan escribir expresiones booleanas.
Por ejemplo, ¿qué pasa si tenemos una variable? number
y queremos verificar si su valor es 5,6 o 7. En palabras podríamos
decir: "Número igual a 5 o 6 o 7". Sin embargo, si traducimos esto a
Python, number==5or6or7, no será correcto. El or El operador debe unirse a los resultados de tres controles de igualdad. La forma correcta de escribir esto es number==5ornumber==6ornumber==7. Esto puede parecer una gran cantidad de escritura, pero es absolutamente necesario. No puedes tomar un atajo.
¿Cuál es una expresión de Python correcta para verificar si un número almacenado en una variable x está entre 0 y 5?
Respuesta: C.
Digamos que se está
registrando para las clases del próximo semestre. Tienes la opción A,
que es tu clase de arte y la opción B, que es tu clase de matemáticas.
Necesitas ambos, pero es una carrera entre el tiempo y la suerte.
Si termina registrándose a tiempo para la opción A, pero no obtiene su
elección B, ¿qué operadores lógicos serían verdaderos?
Respuesta: B y D
7.2.1. Opuestos lógicos
Cada uno de los seis
operadores relacionales tiene un opuesto lógico: por ejemplo, supongamos
que podemos obtener una licencia de conducir cuando nuestra edad es
mayor o igual a 17, no obtener la licencia de conducir cuando tenemos menos de 17 años.
Operador
Definición
Opuestos lógicos
==
Igual a
!=
!=
No es igual a
==
<
Menos que
>=
<=
Menos o igual a
>
>
Más que
<=
>=
Mayor o igual a
<
Comprender estos opuestos lógicos nos permite a veces deshacernos not operadores. not
Los operadores a menudo son bastante difíciles de leer en el código de
computadora, y nuestras intenciones generalmente serán más claras si
podemos eliminarlos.
Por ejemplo, si escribimos esta pitón:
>>ifnot(age>=17):
>> print("Hey, you're too young to get a driving licence!")
Probablemente sería más claro usar las leyes de simplificación y escribir en su lugar:
>>ifage<17:
>> print("Hey, you're too young to get a driving licence!")
Dos poderosas leyes de
simplificación (llamadas leyes de De Morgan) que a menudo son útiles
cuando se trata de expresiones booleanas complicadas son:
Por ejemplo, suponga que desea
actualizar su teléfono; Sin embargo, su teléfono solo se actualizará si
tiene al menos un 50% de duración de la batería y el 15% de su
almacenamiento disponible. Mientras miramos el código de Python para
esto, vemos:
ifnot((phone_charge>=0.50)and(phone_storage>=.15)):print("You cannot restart your phone. Battery too low or not enough free space.")else:print("Updating now...Several restarts may be required.")
La aplicación de reglas de
opuestos lógicos nos permitiría reelaborar la condición de una forma
(quizás) más fácil de entender como esta:
if(phone_charge<0.50)or(phone_storage<.15):print("You cannot restart your phone. Battery too low or not enough free space.")else:print("Updating now...Several restarts may be required.")
También podríamos deshacernos del not Al cambiar el theny else partes del condicional. Así que aquí hay una tercera versión, también equivalente:
if(phone_charge>=0.50)and(phone_storage>=.15):print("Updating now...Several restarts may be required.")else:print("You cannot restart your phone. Battery too low or not enough free space.")
Esta versión es probablemente
la mejor de los tres, porque coincide muy bien con la declaración
inicial en inglés. La claridad de nuestro código (para otros humanos), y
facilita ver que el código hace lo que se esperaba siempre debería ser
una alta prioridad.
A medida que se desarrollen
nuestras habilidades de programación, encontraremos que tenemos más de
una forma de resolver cualquier problema. buenos programas diseñan . Tomamos decisiones que favorecen la claridad, la simplicidad y la elegancia. El arquitecto de softwaredice mucho sobre lo que hacemos - somos arquitectos
quienes diseñan nuestros productos para equilibrar la belleza, la
funcionalidad, la simplicidad y la claridad en nuestras creaciones.
Se llama al tipo de Python para almacenar valores verdaderos y falsos bool, nombrado
Después del matemático británico, George Boole. George Boole creó booleano
Álgebra, que es la base de toda la aritmética informática moderna.
Solo hay dos valores booleanos . Ellos son Truey False. Capitalización
es importante, ya que true y false no son valores booleanos (recuerde que Python es el caso
sensible).
Es extremadamente importante darse cuenta de que verdadero y falso no son cadenas. Ellos no son
Rodeados de comillas. Son los únicos dos valores en el tipo de datos bool. Eche un vistazo de cerca a los
tipos que se muestran a continuación.
>>print(type(True)) >>print(type("True"))
>>>
<class 'bool'> <class 'str'>
Una expresión booleanaes una expresión que evalúa a un valor booleano.
El operador de igualdad, ==, compara dos valores y produce un valor booleano relacionado con si los dos valores son iguales entre sí.
>>print(5 == 5)
>>print(5 == 6)
>>j = "hel" >>print(j + "lo" == "hello")
>>>
True False True
En la primera declaración, los dos operandos son iguales, por lo que la expresión evalúa
a True. En la segunda declaración, 5 no es igual a 6, por lo que tenemosFalse.
El == El operador es uno de los seis comunes operadores de comparación; Los otros son:
x!=y# x is not equal to y, x es diferente de y.
x>y# x is greater than y, x es mayor que y.x<y# x is less than y, x es menor que y.x>=y# x is greater than or equal to y, x es mayor o igual que y.x<=y# x is less than or equal to y, x es menor o igual que y.
Aunque estas operaciones probablemente te son familiares, los símbolos de Python son
diferente de los símbolos matemáticos. Un error común es usar un solo
signo igual ( =) en lugar de un signo doble igual ( ==).Recuerda que =
es un operador de asignación y == es un operador de comparación. Además, no hay tal cosa como =<o =>.
Tenga en cuenta también que una prueba de igualdad es simétrica, pero la asignación no lo es. Por ejemplo,
si a==7 entonces 7==a. Pero en Python, la declaración a=7
es legal y 7=a no lo es. (¿Puedes explicar por qué?)
Comentario de PPI:
La asignación (=) en Python se da de derecha a izquierda y no al revés, a = 7, a la variable a, se le lleva o se le asigna el valor de 7. Para hacerlo mas entendible pensemos esto: tenemos una caja de cartón, a la caja le pegamos un rotulo en la cara frontal, dentro de la caja almacenamos el objeto 7 y en el rotulo identificamos la caja como a. a es el nombre de la variable (caja) y 7 es el objeto contenido en ella y no al revés.
Ademas recordemos que en Python las variables se pueden nombrar como letras o combinación de letras y números pero no se pueden nombrar como números solos y el nombre de la variable siempre esta a la izquierda del símbolo de asignación. variable = objeto
Comprueba tu comprensión
¿Cuál de las siguientes es una expresión booleana? Seleccione todo lo que se aplique.
Una función que interactúa con el usuario (usando inputo print) cuando
no debería. Funciones silenciosas que solo convierten sus argumentos de entrada en
Los resultados de su salida suelen ser los más útiles.
composición (de funciones)
Llamar a una función desde el cuerpo de otro, o usar el
Valor de devolución de una función como argumento a la llamada de otro.
Código muerto
Parte de un programa que nunca se puede ejecutar, a menudo porque parece
después de un return declaración.
función fructífera
Una función que produce un valor de retorno en lugar de None.
Desarrollo incremental
Un plan de desarrollo de programas destinado a simplificar la depuración agregando y
Prueba solo una pequeña cantidad de código a la vez.
None
Un valor especial de Python. Un uso en Python es que se devuelve
por funciones que no ejecutan una declaración de devolución con un argumento de retorno.
Valor de retorno
El valor proporcionado como resultado de una llamada de función.
scaffolding
Código que se utiliza durante el desarrollo del programa para ayudar con el desarrollo
y depuración. El código de prueba unitario que agregamos en este capítulo son
Ejemplos de andamio.
variable temporal
Una variable utilizada para almacenar un valor intermedio en un complejo
cálculo.
Recuerde de nuestra discusión de los módulos que había varias cosas que las tortugas pueden hacer.
Aquí hay un par de trucos más (recuerde que todos se describen en la documentación del módulo).
Podemos obtener una tortuga para mostrar texto en el lienzo en la posición actual de la tortuga. Se llama al método write.
Por ejemplo, alex.write("Hello") Escribiría la cadena Hello en la posición actual.
Uno puede llenar una forma (círculo, semicírculo, triángulo, etc.) con un color de relleno. Es un proceso de dos pasos.
Primero llamas al método begin_fill, Por ejemplo alex.begin_fill(). Luego dibujas la forma.
Finalmente, llamas end_fill ( alex.end_fill()).
Anteriormente hemos
establecido el color de nuestra tortuga; ahora también podemos
establecer su color de relleno, que no necesita
ser lo mismo que la tortuga y el color de la pluma. Para hacer esto,
utilizamos un método llamado fillcolor,
Por ejemplo, alex.fillcolor("red").
Ok, entonces, ¿podemos hacer que Tess dibuje un gráfico de barras? Comencemos con algunos datos para ser trazados,
xs=[48,117,200,240,160,260,220]
En correspondencia con cada medición de datos, dibujaremos un rectángulo simple de esa altura, con un ancho fijo.
Aquí hay una versión simplificada de lo que nos gustaría crear.
Podemos ver rápidamente que dibujar una barra será similar a dibujar un rectángulo o un cuadrado. Dado que tendremos que hacerlo
Varias veces, tiene sentido crear una función, drawBar,
que necesitará una tortuga y la altura de la barra. Asumiremos que el
ancho de la barra será de 40 unidades. Una vez que tenemos la función,
podemos usar un bucle básico para procesar la lista de valores de datos.
>>defdrawBar(t,height):""" Get turtle t to draw one bar, of height. """
>> t.left(90)# Point up
>> t.forward(height)# Draw up the left side
>> t.right(90)
>> t.forward(40)# width of bar, along the top
>> t.right(90)
>> t.forward(height)# And down again!
>> t.left(90)# put the turtle facing the way we found it....>>forvinxs:# assume xs and tess are ready
>> drawBar(tess,v)
¡Es un buen comienzo! Lo importante aquí
fue la fusión mental. Para resolver el problema, primero lo dividimos en piezas más pequeñas. En particular,
Nuestro trozo
es dibujar una barra. Luego implementamos ese fragmento con una función. Entonces, para el todo
Gráfico, repetidamente llamamos nuestra función.
A continuación, en la parte superior de cada barra, imprimiremos el valor de los datos.
Haremos esto en el cuerpo de drawBar Al agregar t.write(str(height))
Como la nueva cuarta línea del cuerpo.
Tenga en cuenta que tuvimos que girar el
número en una cadena.
Finalmente, agregaremos los dos métodos necesarios para llenar cada barra.
El único problema restante
está relacionado con el hecho de que nuestra tortuga vive en un mundo
donde la posición (0,0) está en el centro del lienzo de dibujo. En este
problema, ayudaría si (0,0) estuvieran en la esquina inferior izquierda.
Para resolver esto podemos usar nuestro setworldcoordinates
Método para rescalar la ventana. Mientras lo hacemos, debemos hacer que
la ventana se ajuste a los datos. La barra más alta corresponderá al
valor máximo de datos. El ancho de la ventana deberá ser proporcional al
número de barras (el número de valores de datos) donde cada uno tiene
un ancho de 40. Usando esta información, podemos calcular la coordenada
sistema que tiene sentido para el conjunto de datos. Para que se vea
bien, agregaremos un borde de 10 unidades alrededor de las barras.
Aquí está el programa
completo. Pruébelo y luego cambie los datos para ver que puede adaptarse
a los nuevos valores. Tenga en cuenta también que
Hemos almacenado los valores de datos en una lista y utilizamos algunas
funciones de lista. Tendremos mucho más que decir sobre las listas en un
capítulo posterior.
>>import turtle
>>def drawBar(t, height): """ Get turtle t to draw one bar, of height. """ >> t.begin_fill() # start filling this shape >> t.left(90) >> t.forward(height) >> t.write(str(height)) >> t.right(90) >> t.forward(40) >> t.right(90) >> t.forward(height) >> t.left(90) >> t.end_fill() # stop filling this shape
>>xs = [48, 117, 200, 240, 160, 260, 220] # here is the data >>maxheight = max(xs) >>numbars = len(xs) >>border = 10
>>wn = turtle.Screen() # Set up the window and its attributes >>wn.setworldcoordinates(0-border, 0-border, 40*numbars+border, maxheight+border) >>wn.bgcolor("lightgreen")
>>tess = turtle.Turtle() # create tess and set some attributes >>tess.color("blue") >>tess.fillcolor("red") >>tess.pensize(3)
>>for a in xs: >> drawBar(tess, a)
>>wn.exitonclick()
PPI: La salida del código anterior es la siguiente:
Este código es bastante conciso, pero cada etiqueta de altura está parcialmente cubierta por la parte superior
segmento de su bar. ¿Puedes modificar el
drawBar código, moviendo ligeramente la etiqueta
¿Pero no cambiar la barra?
Sugerencia: la etiqueta no se puede dibujar durante la secuencia de relleno de polígono.