Rutas
/
Python
Python
/
Ejercicios
/
El vocabulario de la hermana pequeña
El vocabulario de la hermana pequeña

El vocabulario de la hermana pequeña

Ejercicio de aprendizaje

Introducción

Un str en Python es una secuencia inmutable de puntos de código Unicode. Estos pueden incluir letras, signos diacríticos, caracteres de posicionamiento, números, símbolos de moneda, emoji, signos de puntuación, espacios y caracteres de salto de línea, y mucho más. Como es inmutable, el valor de un objeto str en memoria no cambia; los métodos que parecen modificar una cadena de caracteres devuelven una nueva copia o instancia de ese objeto str.

Un literal str se puede declarar con comillas simples ' o dobles ". El carácter de escape \ está disponible cuando se necesite.


>>> single_quoted = 'These allow "double quoting" without "escape" characters.'

>>> double_quoted = "These allow embedded 'single quoting', so you don't have to use an 'escape' character."

>>> escapes = 'If needed, a \'slash\' can be used as an escape character within a string when switching quote styles won\'t work.'

Los strings multilínea se declaran con ''' o """.

>>> triple_quoted =  '''Three single quotes or "double quotes" in a row allow for multi-line string literals.
  Line break characters, tabs and other whitespace are fully supported.

  You\'ll most often encounter these as "doc strings" or "doc tests" written just below the first line of a function or class definition.
    They\'re often used with auto documentation ✍ tools.
    '''

Los strings se pueden concatenar con el operador +. Conviene usar este método con moderación, ya que no es muy eficiente ni fácil de mantener.

language = "Ukrainian"
number = "nine"
word = "дев'ять"

sentence = word + " " + "means" + " " + number + " in " + language + "."

>>> print(sentence)
...
"дев'ять means nine in Ukrainian."

Si hay que combinar una list, una tuple, un set u otra colección de strings individuales en un único str, <str>.join(<iterable>) es una opción mejor:

# str.join() makes a new string from the iterables elements.
>>> chickens = ["hen", "egg", "rooster"] # Lists are iterable.
>>> ' '.join(chickens)
'hen egg rooster'

# Any string can be used as the joining element.
>>> ' :: '.join(chickens)
'hen :: egg :: rooster'

>>> ' 🌿 '.join(chickens)
'hen 🌿 egg 🌿 rooster'


# Any iterable can be used as input.
>>> flowers = ("rose", "daisy", "carnation")  # Tuples are iterable.
>>> '*-*'.join(flowers)
'rose*-*daisy*-*carnation'

>>> flowers = {"rose", "daisy", "carnation"}  # Sets are iterable, but output order is not guaranteed.
>>> '*-*'.join(flowers)
'rose*-*carnation*-*daisy'

>>> phrase = "This is my string"  # Strings are iterable, but be careful!
>>> '..'.join(phrase)
'T..h..i..s.. ..i..s.. ..m..y.. ..s..t..r..i..n..g'


# Separators are inserted **between** elements, but can be any string (including spaces).
# This can be exploited for interesting effects.
>>> under_words = ['under', 'current', 'sea', 'pin', 'dog', 'lay']
>>> separator = ' ⤴️ under'
>>> separator.join(under_words)
'under ⤴️ undercurrent ⤴️ undersea ⤴️ underpin ⤴️ underdog ⤴️ underlay'

# The separator can be composed different ways, as long as the result is a string.
>>> upper_words = ['upper', 'crust', 'case', 'classmen', 'most', 'cut']
>>> separator = ' 🌟 ' + upper_words[0]
>>> separator.join(upper_words)
 'upper 🌟 uppercrust 🌟 uppercase 🌟 upperclassmen 🌟 uppermost 🌟 uppercut'

Se puede hacer referencia a los puntos de código dentro de un str mediante un número de 0-based index desde la izquierda:

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

La indexación también funciona desde la derecha, empezando por un -1-based index:

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

En Python no hay un tipo «character» o «rune» independiente, así que indexar un string produce un nuevo str de longitud 1:


>>> website = "exercism"
>>> type(website[0])
<class 'str'>

>>> len(website[0])
1

>>> website[0] == website[0:1] == 'e'
True

Las subcadenas se pueden seleccionar mediante la notación de slices, usando <str>[<start>:stop:<step>] para producir un nuevo string. Los resultados excluyen el índice stop. Si no se indica ningún start, el índice inicial será 0. Si no se indica ningún stop, el índice stop será el final del string.

moon_and_stars = '🌟🌟🌙🌟🌟⭐'
sun_and_moon = '🌞🌙🌞🌙🌞🌙🌞🌙🌞'

>>> moon_and_stars[1:4]
'🌟🌙🌟'

>>> moon_and_stars[:3]
'🌟🌟🌙'

>>> moon_and_stars[3:]
'🌟🌟⭐'

>>> moon_and_stars[:-1]
'🌟🌟🌙🌟🌟'

>>> moon_and_stars[:-3]
'🌟🌟🌙'

>>> sun_and_moon[::2]
'🌞🌞🌞🌞🌞'

>>> sun_and_moon[:-2:2]
'🌞🌞🌞🌞'

>>> sun_and_moon[1:-1:2]
'🌙🌙🌙🌙'

Los strings también se pueden dividir en strings más pequeños con <str>.split(<separator>), que devuelve un list de subcadenas. Ese array se puede indexar o dividir aún más si es necesario. Usar <str>.split() sin ningún argumento divide el string por los espacios en blanco.

>>> cat_ipsum = "Destroy house in 5 seconds mock the hooman."
>>> cat_ipsum.split()
...
['Destroy', 'house', 'in', '5', 'seconds', 'mock', 'the', 'hooman.']


>>> cat_ipsum.split()[-1]
'hooman.'


>>> cat_words = "feline, four-footed, ferocious, furry"
>>> cat_words.split(', ')
...
['feline', 'four-footed', 'ferocious', 'furry']

Los separadores de <str>.split() pueden tener más de un carácter. Para la división se usa el string completo como coincidencia.


>>> colors = """red,
orange,
green,
purple,
yellow"""

>>> colors.split(',\n')
['red', 'orange', 'green', 'purple', 'yellow']

Los strings admiten todas las operaciones comunes de secuencia. Se puede iterar por los puntos de código individuales dentro de un bucle con for item in <str>. Se puede iterar por los índices junto con los elementos dentro de un bucle con for index, item in enumerate(<str>).


>>> exercise = 'လေ့ကျင့်'

# Note that there are more code points than perceived glyphs or characters
>>> for code_point in exercise:
...    print(code_point)
...
လ
ေ
့
က
ျ
င
်
့

# Using enumerate will give both the value and index position of each element.
>>> for index, code_point in enumerate(exercise):
...    print(index, ": ", code_point)
...
0 :  လ
1 :  ေ
2 :  ့
3 :  က
4 :  ျ
5 :  င
6 :  ်
7 :  ့

Instrucciones

Estás ayudando a tu hermana pequeña con sus deberes de vocabulario de inglés, que le resultan muy tediosos. Su clase está aprendiendo a crear palabras nuevas añadiendo prefijos y sufijos. Dado un conjunto de palabras, la profesora busca palabras transformadas correctamente y con la ortografía correcta, añadiendo el prefijo al principio o el sufijo al final.

La tarea tiene cuatro actividades, cada una con un conjunto de textos o palabras con las que trabajar.

1. Añadir un prefijo a una palabra

Uno de los prefijos más comunes en inglés es un, que significa «no». En esta actividad, tu hermana tiene que formar palabras negativas, o palabras con el significado «no», añadiéndoles un.

Implementa la función add_prefix_un(<word>), que toma word como parámetro y devuelve una palabra nueva con el prefijo un:

>>> add_prefix_un("happy")
'unhappy'

>>> add_prefix_un("manageable")
'unmanageable'

2. Añadir prefijos a grupos de palabras

Hay otros cuatro prefijos comunes que está estudiando la clase de tu hermana: en (que significa «poner dentro de» o «cubrir con»), pre (que significa «antes» o «adelante»), auto (que significa «uno mismo» o «igual»), y inter (que significa «entre» o «entre varios»).

En este ejercicio, la clase está creando grupos de palabras de vocabulario con estos prefijos, para poder estudiarlas juntas. Cada prefijo viene en una lista con palabras comunes con las que se usa. Los estudiantes tienen que aplicar el prefijo y producir un string que muestre el prefijo aplicado a todas las palabras.

Implementa la función make_word_groups(<vocab_words>), que toma vocab_words como parámetro con el siguiente formato: [<prefix>, <word_1>, <word_2> .... <word_n>], y devuelve un string con el prefijo aplicado a cada palabra que tiene este aspecto: '<prefix> :: <prefix><word_1> :: <prefix><word_2> :: <prefix><word_n>'.

Aquí no hace falta crear un bucle for o while para procesar la entrada. Piensa bien qué métodos de string (y delimitadores) podrías usar en su lugar.

>>> make_word_groups(['en', 'close', 'joy', 'lighten'])
'en :: enclose :: enjoy :: enlighten'

>>> make_word_groups(['pre', 'serve', 'dispose', 'position'])
'pre :: preserve :: predispose :: preposition'

>> make_word_groups(['auto', 'didactic', 'graph', 'mate'])
'auto :: autodidactic :: autograph :: automate'

>>> make_word_groups(['inter', 'twine', 'connected', 'dependent'])
'inter :: intertwine :: interconnected :: interdependent'

3. Quitar un sufijo a una palabra

ness es un sufijo común que significa «estado de ser». En esta actividad, tu hermana tiene que encontrar la palabra raíz original quitando el sufijo ness. Pero, claro, hay reglas ortográficas molestas: si la palabra raíz terminaba originalmente en una consonante seguida de una «y», entonces la «y» se cambiaba por una «i». Al quitar «ness» hay que restaurar la «y» en esas palabras raíz. Por ejemplo: happiness --> happi --> happy.

Implementa la función remove_suffix_ness(<word>), que recibe un word y devuelve la palabra raíz sin el sufijo ness.

>>> remove_suffix_ness("heaviness")
'heavy'

>>> remove_suffix_ness("sadness")
'sad'

4. Extraer y transformar una palabra

Los sufijos se usan a menudo para cambiar la categoría gramatical a la que pertenece una palabra. Una práctica común en inglés es la de «convertir en verbo», es decir, que un adjetivo se convierta en verbo añadiéndole un sufijo en.

En esta tarea, tu hermana va a practicar la conversión de palabras en verbos extrayendo un adjetivo de una frase y convirtiéndolo en verbo. Por suerte, todas las palabras que hay que transformar aquí son «regulares»: no necesitan cambios ortográficos para añadir el sufijo.

Implementa la función adjective_to_verb(<sentence>, <index>), que toma dos parámetros. Una sentence que use la palabra de vocabulario y el index de la palabra, una vez dividida la frase. La función debe devolver el adjetivo extraído en forma de verbo.

>>> adjective_to_verb('I need to make that bright.', -1 )
'brighten'

>>> adjective_to_verb('It got dark as the sun set.', 2)
'darken'
Editar en GitHub El enlace se abre en una ventana o pestaña nueva
Python Exercism

¿Listo para empezar El vocabulario de la hermana pequeña?

Regístrate en Exercism para aprender y dominar Python con 17 conceptos146 ejercicios y mentoría humana real, todo gratis.