ASIX-M3-UF2-A1.1-Exercicis disseny descendent
1. Càlcul múltiple
Crea un programa que demani a l'usuari, per pantalla dos nombres enters i determineu si algun és múltiple de l'altre. Crea una funció anomenada CalMultiple que rebi i torni els dos números si el primer és múltiple del segon.
# Función CalMultiple: Recibe dos número e indica si el primero el múltiplo del
# segundo. Para ello calculo el resto de la división, si es 0 es múltiplo.
# Parámetros de entrada: dos números
# Dato devuelto: múltiplo: Valor lógico verdadero si el primero es múltiplo
# del segundo, Falso en caso contrario.
def CalMultiple(num1,num2):
if num1 % num2 == 0:
return True
else:
return False
numero1 = int(input("Número 1:"))
numero2 = int(input("Número 2:"))
if CalMultiple(numero1,numero2):
print(numero1,"es múltiplo de",numero2)
else:
print(numero1,"no es múltiplo de",numero2)
2. Càlcul temperatura mitjana
Crear un programa que sol·liciti les temperatures màximes i mínimes de cada dia i mostri la mitjana. El programa demanarà la quantitat de dies que cal introduir, i les temperatures màxima i mínima, calculant per mitjà d'una funció la temperatura mitjana del dia.
# Función calcularTemperaturaMedia: R
def calcularTemperaturaMedia(temp1,temp2):
return (temp1 + temp2)/2
# Crear una función que calcule la temperatura media de un día a partir de la
# temperatura máxima y mínima.
cantidad=int(input("¿Cuántas temperaturas vas a calcular?:"))
for indice in range(cantidad):
tmin = float(input("Introduce temperatura mínima:"))
tmax = float(input("Introduce temperatura máxima:"))
print("Temperatura media:",calcularTemperaturaMedia(tmin,tmax))
3. Cálculo de tiempo
Escribir un programa con dos funciones que permitan calcular:
1ª La cantidad de segundos en un período de tiempo determinado en términos de horas, minutos y segundos.
2º La cantidad de horas, minutos y segundos que componen un período de tiempo determinado en segundos. 2ª
Escribe un programa principal con un menú que permita convertir a segundos, convertir a horas, minutos y segundos o salir.
# Función Convertir_A_Segundos: Recibe una cantidad de horas, minutos y segundos
# y calcula a cuantos segundos corresponde.
# Parámetros de entrada: hora, minutos y segundos
# Dato devuelto: Segundos totales
def Convertir_A_Segundos(h,m,s):
return h * 3600 + m * 60 + s
# Función Convertir_A_HMS: Recibe una cantidad de segundos y debe calcular a
# que hora, minutos y segundos corresponde
# Parámetros de entrada: segundos
# Valores de salida: hora,minutos y segundos
def Convertir_A_HMS(seg):
# Horas = Divisíón entera de los segundos entre 3600
h = seg//3600
# Decremento los segundos que me quedan por convertir
seg = seg - h*3600
# Minutos = División entera de los segundos entre 60
m = seg//60
# Decremento los segundos que me quedan por convertir
seg = seg - m*60
# Lo que me quedan corresponden a los segundos
s = seg
return h,m,s
# Escribe un programa principal con un menú donde se pueda elegir la opción de
# convertir a segundos, convertir a horas,minutos y segundos o salir del programa.
while True:
print("1.- Convertir a segundos")
print("2.- Convertir a horas, minutos y segundos")
print("3.- Salir")
opcion = int(input())
if opcion == 1:
hor = int(input("Horas:"))
minu = int(input("Minutos:"))
seg = int(input("Segundos:"))
print("Corresponde a",Convertir_A_Segundos(hor,minu,seg),"segundos.")
elif opcion == 2:
segund=int(input("Segundos:"))
hor,minu,seg = Convertir_A_HMS(segund)
print("Corresponde a ",hor,":",minu,":",seg)
elif opcion == 3:
break
else:
print("Opción incorrecta")
4. Exercici: construir un joc " 'Guess The number' "
Demanar a l'usuari que introdueixi dos números entre 0 i 100. Fer que l'usuari endevini el nombre, el programa anirà fitant entre els números introduïts, reduint possibilitats, fins a trobar el nombre desitjat.
Exemple de com haurien de funcionar les peticions de dades per pantalla d'aquest programa: (Els números introduïts són teòrics, podrien ser uns altres) El número a buscar puede introducirse manualmente o bien ser aleatorio (Random) Quin és el límit inferior?: 0 Quin és el límit superior?: 100 Introduïu el número a endevinar entre 0 i 100 inclosos: 50 Endevineu el nombre entre 0 i 100 inclosos: 40 Massa petit Endevineu el número entre 41 i 100 inclosos: 60 Massa gran Endevineu el número entre 41 i 59 inclosos: 50 Ha guanyat! Podeu veure que el número a encert ho hem introduït nosaltres, en aquest cas 50, així podreu fer les proves més ràpidament, però en un joc real, el número a introduir hauria de ser a l'atzar. Notas: Utilitzar import sys Aquest programa s'ha de constituir mitjançant funcions: exemple: def pedir_numero, def pedir_numero_limite, def jugar_una_vez def jugar def decidir_limites def pedir_numero_incognita etc..
5º Cobro multa, validar fehca, importe y DNI.
Introducir la fecha y validar si es correcta. Introducir el importe a pagar (150€), que debe existir en el sistema. Pide un DNI y comprueba que es correcto, será correcto si tiene 9 caracteres y la letra es correcta. Para calcular la letra se divide el número entre 23 y el resto indica la posición de la cadena de letras: "TRWAGMYFPDXBNJZSQVHLCKE"
Usar funciones para: Validar la fecha. Validar el importe introducido Validar el DNI y otra que te devuelva la letra del mismo """
== Python avançat ==
22. Regne de Dracs
En aquest joc, el jugador es troba en una terra de dracs. Els dracs viuen en coves i hi ha de dos tipus: els bons que volen compartir els seus tesors amb tu i els dolents molt cobdiciosos i afamats que no dubtaran a menjar-se tot aquell que provi d'accedir a la seva cova. El jugador es troba davant de dues coves, en una el drac amigable i en l'altre el drac dolent. El jugador a d'escollir...
- Mòduls a emprar:
from random import randint # per distribuir els dracs en les coves aleatoriament
from time import sleep # per fer més "emocionant" el final del joc
- El programa principal podria ser semblant a:
# Programa principal
fiJoc = False
while not fiJoc:
mostrarIntroduccio()
numeroDeCova = escollirCova()
explorarCova(numeroDeCova) # sleep(2) # randint(1, 2)
jugarDeNuevo = jugar()
23. Construir un Quadrat màgic. Un quadrat màgic és una matriu quadrada (mateix nombre de files que de columnes), amb un nombre senar de files i columnes on la suma dels elements de totes les seves files i les seves columnes i les dues diagonals val igual. En aquest quadrat no hi ha cap número repetit, i els números que hi ha d'haver han d'anar des de 1 fins a n2 on n és el numero de files i columnes.
Com construir-lo?
- El numero 1 el situarem en el quadrat superior al central (per exemple, per n=5, el quadrat central és (2,2) i el que està per sobre seu el (1,2).
- El següent número el situarem un quadrat a la dreta i un per sobre. Si un numero està a la posició (i,j), el següent el situarem en (i-1,j+1).
- Si resulta que al fer el moviment sortim per la dreta, entendrem que automàticament entrarem per l'esquerra, és a dir, és com si la matriu estigués enganxada la part esquerra amb la part dreta. El mateix passa amb dalt i baix. Si sortim per dalt, entrem per baix.
- A més ens podem trobar que la posició on toca anar un número ja es troba ocupada. Llavors el que farem és tornar a la posició on estàvem i fer el moviment que puja dos posicions (i-2, j ).
- Un exemple de quadrat màgic per a N=5 seria:
23 6 19 2 15 10 18 1 14 22 17 5 13 21 9 4 12 25 8 16 11 24 7 20 3
- El programa tindrà les següents funcions:
- llegirDimensio: Li demanem a l’usuari que ens indiqui la mida N de la matriu. Si el valor és correcte, la funció el retorna.
- inicialitzarQuadrat: Simplement posem tots els valors a 0
- calculaPosicioInicial: Segons la dimensió, calculem la primera posició
- assignaValor: Posa un valor en una posició
- calcularNovaPosicio: Retorna els valors de fila i columna vàlids per a col·locar el proper valor.
- imprimirQuadrat: Treu per pantalla el quadrat màgic,
- El programa serà semblant a aquest :
dim = llegirDimensio()
qm = inicialitzarQuadrat(dim)
pos = calculaPosicioInicial(dim)
limit = dim*dim;
for valor in range(1,limit+1):
assignaValor(qm,pos,valor)
pos = calcularNovaPosicio(qm, dim, pos)
imprimirQuadrat(qm)
24. Mastermind
El Mastermind és un joc que consisteix en, mitjançant pistes, deduir un codi numèric de n xifres ocult (en el nostre cas de quatre xifres i generat aleatòriament). Dinàmica del joc:
- El programa generà aleatòriament un codi numèric de quatre xifres (codi a endevinar).
- El jugador anirà proposant codis (intents) per tal de trobar el codi a endevinar.
- L'objectiu es trobar el codi en el menor número d'intents. Es pot limitar el número d'intents (per ex. a 7).
- Desprès de cada intent el programa donarà pistes que ajudin a deduir el codi:
- Encerts: quants números s'han encertat i es troben en la posició correcta .
- Coincidències: quants números s'han encertat però no es troben en la posició correcta.
- Exemple:
- codi: 7539
- proposta: 2590
- pistes: 1 encert i 1 coincidència.
- El joc finalitzarà quan s'hagi trobat el codi numèric o s'hagin exhaurit els intents.
- El programa permetrà tornar a jugar si així o vol el jugador.
- Diagrama de flux
25. El Penjat
El penjat consisteix en endevinar una paraula generada aleatòriament per l'ordinador. Dinàmica del joc:
- Es presenta una forca i un guio per a cada lletra de la paraula.
- El jugador proposa lletres (d'una en una) i:
- si la lletra es troba a la paraula es substitueixen els guions respectius per la lletra.
- sinó s'actualitza la forca en una part del cos (cap, tronc, braç esquerra, braç dret, cama esquerra i cama dreta).
- El joc finalitza quan es troben totes les lletres o quan ja no queden parts del cos.
- El programa permetre tornar a jugar si així o vol el jugador.
- Diagrama de flux
Podeu utilitzar:
PENJAT = [''' +---+ | | | | | | =========''', ''' +---+ | | O | | | | =========''', ''' +---+ | | O | | | | | =========''', ''' +---+ | | O | /| | | | =========''', ''' +---+ | | O | /|\ | | | =========''', ''' +---+ | | O | /|\ | / | | =========''', ''' +---+ | | O | /|\ | / \ | | ========='''] paraules = 'paraules donatius diccionari malaltia alemany escola impossible variable objectiu disseny reproductor escriptor llibertat revista llengua somni cistell maduixa gresca ignorant carquinyoli xisclar '.split()
26. ==3 en ratlla==
El joc consisteix en posar 3 fitxes en línia en un tauler de 9 caselles abans que ho faci l'ordinador.
- El jugador i l'ordinador alternen les jugades.
- El jugador escollirà el símbol que vol (X o O) i es farà un sorteig de qui comença la partida
- L'ordinador analitzarà la situació del tauler per cercar la millor jugada a fer.
- La partida finalitzarà en el moment que un dels jugadors aconsegueixi fer 3 fitxes en linia o quan el tauler estigui omplert.
- Cal informar del resultat de la partida: Guanya la persona, l'oridnador o hi ha hagut un empat.
- El programa permetrà tornar a jugar si així o vol el jugador.
# "tauler" és una llista de 10 cadenes (obviem la posició 0 de la llista) print(' 3 en ratlla') print() print(' | |') print(' ' + tauler[7] + ' | ' + tauler[8] + ' | ' + tauler[9]) print(' | |') print('-----------') print(' | |') print(' ' + tauler[4] + ' | ' + tauler[5] + ' | ' + tauler[6]) print(' | |') print('-----------') print(' | |') print(' ' + tauler[1] + ' | ' + tauler[2] + ' | ' + tauler[3]) print(' | |')
27.Realitzar un programa que resolgui un tour del cavall per un tauler d'escacs, és a dir, que mostri totes les caselles per on passarà el cavall (que han de ser totes). Utilitzar la recursivitat.
0 59 38 33 30 17 8 63 37 34 31 60 9 62 29 16 58 1 36 39 32 27 18 7 35 48 41 26 61 10 15 28 42 57 2 49 40 23 6 19 47 50 45 54 25 20 11 14 56 43 52 3 22 13 24 5 51 46 55 44 53 4 21 12
Tenir en compte que hi pot haver més d'una solució, aquesta funció imprimeix una de les solucions factibles.
Secció de Repàs --------------------------------------------------------------------------------------------------------
1º Crear un programa al qual s'entren dues quantitat i el signe de les quatre operacions bàsiques. Crear quatre funcion s una per operació, hi realitzareu el càlcul que tornareu al programa, i mostrareu per pantalla.
2ª Crear un programa on es demana un DNI i comprova que és correcte, serà correcte si té 9 caràcters i la lletra és correcta.
Per calcular la lletra es divideix el número entre 23 i la resta indica la posició de la cadena de lletres:
"TRWAGMYFPDXBNJZSQVHLCKE"