Skip to content

Commit bc40005

Browse files
authored
Merge pull request mouredev#1484 from adra-dev/main
#5 - Python
2 parents 125466f + b2df922 commit bc40005

File tree

2 files changed

+184
-22
lines changed

2 files changed

+184
-22
lines changed

Roadmap/04 - CADENAS DE CARACTERES/python/adra-dev.py

+32-22
Original file line numberDiff line numberDiff line change
@@ -201,32 +201,42 @@
201201
Extra
202202
"""
203203

204-
def word_analisis(word1, word2):
204+
def check(word1: str, word2: str):
205205

206-
words = [word1, word2]
206+
# Palíndromos
207+
print(f"¿{word1} es un palíndromo?: {word1 == word1[::-1]}")
208+
print(f"¿{word2} es un palíndromo?: {word2 == word2[::-1]}")
207209

208-
for word in words:
209-
list_word = list(word)
210-
list_word.reverse()
211-
reversed_word ="".join(list_word)
210+
# Anagramas
211+
print(f"¿{word1} es anagrama de {word2}?: {sorted(word1) == sorted(word2)}")
212212

213-
if word == reversed_word:
214-
print(f"La palabra {word} es Palíndroma\n")
215-
print(word, "\n")
216-
elif word != reversed_word:
217-
print(f"La palabra {word} es un Anagrama\n")
218-
print(reversed_word, "\n")
213+
# Isogramas
219214

220-
set_word = set(word)
221-
length = len(word)
215+
def isogram(word: str) -> bool:
222216

223-
if len(set_word) == length:
224-
print(f"La palabra {word} es un Isograma\n")
225-
else:
226-
print(f"La palabra {word} no es un Isograma\n")
217+
word_dict = dict()
218+
for character in word:
219+
word_dict[character] = word_dict.get(character, 0) + 1
220+
221+
isogram = True
222+
values = list(word_dict.values())
223+
isogram_len = values[0]
224+
for word_count in values:
225+
if word_count != isogram_len:
226+
isogram = False
227+
break
228+
229+
return isogram
230+
231+
print(f"¿{word1} es un isograma?: {isogram(word1)}")
232+
print(f"¿{word2} es un isograma?: {isogram(word2)}")
233+
234+
235+
check("radar", "pythonpythonpythonpython")
236+
# check("amor", "roma")
227237

228238

229-
word_analisis("rallar", "seder")
230-
word_analisis("caucasus", "seder")
231-
word_analisis("caucasus", "ambidiestramente")
232-
word_analisis("PUBVEXINGFJORD-SCHMALTZY", "hola")
239+
check("rallar", "seder")
240+
check("caucasus", "seder")
241+
check("caucasus", "ambidiestramente")
242+
check("PUBVEXINGFJORD-SCHMALTZY", "hola")
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,152 @@
1+
"""
2+
EJERCICIO:
3+
- Muestra ejemplos de asignación de variables "por valor" y "por
4+
referencia", según su tipo de dato.
5+
- Muestra ejemplos de funciones con variables que se les pasan "por
6+
valor" y "por referencia", y cómo se comportan en cada caso en el
7+
momento de ser modificadas.
8+
(Entender estos conceptos es algo esencial en la gran mayoría de
9+
lenguajes)
10+
11+
DIFICULTAD EXTRA (opcional):
12+
Crea dos programas que reciban dos parámetros (cada uno) definidos
13+
como variables anteriormente.
14+
15+
- Cada programa recibe, en un caso, dos parámetros por valor, y en
16+
otro caso, por referencia.
17+
18+
Estos parámetros los intercambia entre ellos en su interior, los
19+
retorna, y su retorno se asigna a dos variables diferentes a las
20+
originales.
21+
22+
A continuación, imprime el valor de las variables originales y las
23+
nuevas, comprobando que se ha invertido su valor en las segundas.
24+
25+
Comprueba también que se ha conservado el valor original en las primeras.
26+
27+
by adra-dev.
28+
"""
29+
30+
31+
"""
32+
En un lenguaje de programaicon, una variable es un termnio que
33+
representa un espacio en la memoria del ordenador.
34+
"""
35+
36+
# Paso por valor
37+
38+
a = int(10)
39+
b = float(5)
40+
c = complex(2+5j)
41+
d = str("Hola mundo!")
42+
e = list([1, 2, 3])
43+
f = dict(zip(['a','b','c'],[1, 2, 3]))
44+
g = set([1, 2, 3])
45+
46+
print(a, b, c, d, e, f, g,)
47+
print(a is b)
48+
print(e is f)
49+
print(f is g)
50+
print(g is e)
51+
52+
# Paso por referencia
53+
54+
a = 10
55+
b = a
56+
57+
c = 5.5
58+
d = c
59+
60+
e = 2+5j
61+
f = e
62+
63+
g = "Hola mundo!"
64+
h = g
65+
66+
i = list([1, 2, 3])
67+
j = i
68+
69+
k = dict(zip(['a','b','c'],[1, 2, 3]))
70+
l = k
71+
72+
m = set([1, 2, 3])
73+
n = m
74+
75+
print(a, b, c, d, e, f, g,)
76+
print(a is b)
77+
print(g is h)
78+
print(i is j)
79+
print(k is l)
80+
81+
"""
82+
En python, los argumentos siempre se pasan por referencia, es decir,
83+
los identificadores definidos en la cabecera de la funcion quedan
84+
refernciados a las posiciones de memoria de los valores indicados en
85+
llamada a la funcion. Pero resulta que el objeto pasado como
86+
argumento puede ser mutable o inmutable. Si es inmutable, los
87+
parametors crean, como ya sabemos, un nuevo espacio en memoria, lo
88+
cual seria equivalente a un paso por valor. Por tanto, cuando los
89+
argumentos son objetos inmutables su contenido no se ve alterado por
90+
la llamada a la funcion, pues los parametros guardan su propia copia
91+
del argumento.
92+
"""
93+
94+
# paso por valor
95+
def appellidar(nombre):
96+
nombre += ' Martinez'
97+
print(nombre)
98+
99+
nombre = 'Rosa'
100+
appellidar(nombre)
101+
print(nombre)
102+
103+
"""
104+
En cambio, cuando pasamos como argumentos tipos mutables, la tabla
105+
de simbolos de la funcion tambien contiene sus propios
106+
identificadores, pero estos parametros apuntan a las posiciones de
107+
memoria donde se alojan los datos pasados como argumento.
108+
"""
109+
110+
def ampliar(lista):
111+
lista += [4, 5, 6]
112+
113+
l = [1, 2, 3]
114+
print(l)
115+
ampliar(l)
116+
print(l)
117+
118+
119+
"""
120+
Extra
121+
"""
122+
# Por valor
123+
124+
def value(value_1, value_2):
125+
temp = value_1
126+
value_1 = value_2
127+
value_2 = temp
128+
129+
return value_1, value_2
130+
131+
value_1 ='Hello'
132+
value_2 ='Python'
133+
value_3, value_4 = value(value_1, value_2)
134+
print(f"{value_1}, {value_2}")
135+
print(f"{value_3}, {value_4}")
136+
137+
138+
139+
# Por referencia
140+
def ref(value_1: list, value_2: list) -> tuple:
141+
temp = value_1
142+
value_1 = value_2
143+
value_2 = temp
144+
145+
return value_1, value_2
146+
147+
148+
my_list_a = [10,20]
149+
my_list_b = [30,40]
150+
my_list_c, my_list_d = ref(my_list_a, my_list_b)
151+
print(f"{my_list_a}, {my_list_b}")
152+
print(f"{my_list_c}, {my_list_d}")

0 commit comments

Comments
 (0)