Repaso/resumen
1.
2.
3.
4.
5.
lectura/escritura y asignación
funciones
selección de instrucciones (instrucción if)
repetición de instrucciones (instrucción while)
recursión
Lectura/escritura y asignación
Problema. Calcular el área y perímetro de la figura:
print “Círculo y cuadrado inscrito”
r=input(“radio?“)
a=r*1.41 #lado cuadrado
print“perímetro=“,2*3.14*r+4*a
print“área=“,3.14*r*r-a*a
Nota. Programa lineal o secuencial
(instrucciones se ejecutan en orden de aparición)
%: operador de resto de división
#invertir entero de 3 dígitos
n=input(“Nº 3 dígitos?”)
d1=n/100; d3=n%10
d2=n%100/10 #d2=n/10%10
print“inverso=”,100*d3+10*d2+d1
#cajero automático
d=input(“¿Cuánto dinero necesita?”)
print d/20000,”de $20.000”; d=d%20000
print d/10000,”de $10.000”; d=d%10000
print d/5000,”de $5.000”); d=d%5000
print d/2000,”de $2.000”); d=d%2000
print d/1000,”de $1.000”)
Funciones predefinidas
import math #incluye funciones/constantes matemáticas
print “triángulo:lados a,b,y angulo alfa”
#obtener datos
a=input(“a ? ”)
b=input(“b ? ”)
alfa=input(“alfa ? ”)*math.pi/180
#calcular tercer lado
c=math.sqrt(math.pow(a*math.sin(alfa),2) + \
math.pow(b-a*math.cos(alfa),2))
#calcular y mostrar perimetro y area
print“Perímetro=”,a+b+c
s=(a+b+c)/2 #semi-perimetro
print “Area=“,math.sqrt(s*(s-a)*(s-b)*(s-c)))
Funciones definidas por el programador
#convertir fecha ddmmaaaa a la forma aaaammdd
def aaaammdd(x):
dd=x/1000000; mm=x/10000%100; aaaa=x%10000
return aaaa*10000 + mm*100 + dd
#convertir fecha aaaammdd a la forma ddmmaaaa
def ddmmaaaa(x):
dd=x%100; mm=x%10000/100; aaaa=x/10000
return dd*1000000 + mm*10000 + aaaa
#seleccionar mayor entre dos fechas
f1=input(“fecha1(ddmmaaaa)?”)
f2=input(“fecha2(ddmmaaaa)?”)
print“mayor=“,ddmmaaaa(max(aaaammdd(f1),aaaammdd(f2)))
Selección de instrucciones: Instrucción if
import random
n=random.randint(1,3)#nº al azar entre 1 y 3
if n==1:
print“piedra”
elif n==2:
print “papel”
else:
print “tijeras”
Sintaxis
if cond1:
insts1
elif cond2:
insts2
. . .
else:
insts
Semántica
cond1  insts1 
F
T
cond2  insts2 
F
T
...
F
insts
Instrucción if
print “resolver ecuación axx+bx+c=0”
a=input(“a?”); b=input(“b?”); c=input(“c?”)
print “resultado:”,
if a==0 and b==0:
print “indefinido”
elif a==0:
print”x=“,-c/b
else:
d=b**2-4*a*c
if d==0:
print “x=“,-b/(2*a)
elif d>0
raiz=math.sqrt(d)
print “x=“,(-b+raiz)/(2*a),(-b-raiz)/(2*a)
else:
print “raices complejas”
def diasMes(m,a):
if m==1 or m==3 or m==5 or m==7 \#continua
or m==8 or m==10 or m==12:
return 31
elif m==4 or m==6 or m==9 or m==11:
return 30
elif m==2:
if bisiesto(a):
return 29
else:
return 28
else:
return 0 #mes incorrecto
Funciones de tipo boolean
def bisiesto(x):
if x%400==0:
return True
elif x%100==0:
return False
elif x%4==0:
return True
else:
return False
#si es divisible por 400?
# es bisiesto
#si es divisible por 100
# no es bisiesto
#si es divisible por 4
# es bisiesto
#sino
# no es bisiesto
def bisiesto(x):
return x%400==0 or x%100!=0 and x%4==0
def bisiesto(x):
return x%4==0 and x%100!=0 or x%400==0
Selección de instrucciones: Instrucción while
#cuenta regresiva desde 10
n=10
while n>0:
print n
n=n-1
print “fuera”
Sintaxis
while condición:
instrucciones
Semántica
Mientras condición se cumpla (sea True) ejecutar instrucción(es)
condición
True
instrucciones
False
Instrucción while
#tabla celsius - fahrenheit
g=-20
while g<=40:
print g,”ºC =“,9.0/5.0*g+32,”ºF”
g=g+5
#tabla grados – funcion seno
grados=0
while grados<=360:
radianes=math.pi*grados/180
print grados,radianes,math.sin(radianes)
grados=grados+10
Patrones (esquemas) para proceso de listas
#inicializar
mayor=0;
#leer 1º
n=input(“nº?”)
#repetir mientras
while n!=0:
#procesar
if n>mayor: mayor=n
#leer sgte
n=input(“nº?”)
#finalizar
print“mayor=“,mayor
#inicializar
mayor=0;
#repetir siempre
while True:
#leer
n=input(“nº?”)
#condición de término
if n==0: break
#procesar
mayor=max(mayor,n)
#finalizar
print “mayor=“,mayor
Funciones con while
def digitos(x):
nd=1
while abs(x)>=10
nd=nd+1
x=x/10 #eliminar último dígito
return nd
#numero con más digitos
masLargo=0
n=input(“nº)
while n!=0: #equivale a while n
if digitos(n)>digitos(masLargo): masLargo=n
n=input(“nº)
print “nº de más dígitos =”,masLargo
#numero con más digitos
masLargo=0
while True:
n=input(“nº)
if n==0: break
if digitos(n)>digitos(masLargo): masLargo=n
print “nº de más dígitos =”,masLargo
Funciones con while
def primo(x):
n=2
while n<x:
if x%n==0: return False
n=n+1
return True
#primos entre 1 100
n=1
while n<=100:
if primo(n): print n
n=n+1
#primeros 100 primos
print 2
cp=1 #contador de primos
n=3
while cp<100:
if primo(n):
print n
cp=cp+1
n=n+2 #probar solo impares
Solución 2. probando sólo con impares
def primo(x):
if x==2: return True #2 es primo
if x%2==0: return False #otro par no es primo
i=3
while i<x: #i=3,5,…,x-1 (impares)
if x%i==0: return False
i=i+2
return True
Solución 3. probando hasta raíz (si hay divisor > también hay <)
def primo(x):
if x%2==0: return x==2 #2 es primo
i=3
while i<=int(math.sqrt(x)): #i=3,5,…,x
if x%i==0: return False
i=i+2
return True
Funciones recursivas
def factorial(x):
if x==0:
return 1 #caso base
else:
return x*factorial(x-1) #recursión
def digitos(x):
if x<10: return 1
return 1 + digitos(x/10)
def potencia(x,y):
if y==0: return 1.0
p=potencia(x,y/2)
if y%2==0:
return p * p
else:
return x * p * p
Funciones Recursivas
#suma(x,y): x + (x+1) + … + y
def suma(x,y):
if x>y: return 0
return x + suma(x+1,y)
#suma(x,y): x + (x+1) + … + y
def suma(x,y):
if x>y: return 0
return suma(x,y-1) + y
#números de fibonacci: 0,1,1,2,3,5,8,13,21,…
def fibonacci(i): #i-ésimo n° de fibonacci
if i<=2: return i-1
return fibonacci(i-1)+fibonacci(i-2)
#C(x,y)=C(x-1,y)+C(x-1,y-1); C(x,x)=C(x,0)=1
def combinaciones(x,y):
if x==y or y==0: return 1
return combinaciones(x-1,y) + combinaciones(x-1,y-1)
procedimientos (no devuelven resultado) recursivos
def misterio():
n=input(“nº?”)
if n==0: return
misterio()
print n
¿Qué hace misterio() con los sgtes datos?
nº?6
nº?3
nº?5
nº?0
Descargar

Diapositiva 1