Tracks
/
Python
Python
/
Ejercicios
/
El vocabulario de la hermanita
El vocabulario de la hermanita

El vocabulario de la hermanita

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 más. Como es inmutable, el valor de un objeto str en memoria no cambia; los métodos que parecen modificar un string devuelven una copia nueva, o una instancia nueva, de ese objeto str.

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


>>> 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 de varias líneas 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 necesitas combinar una list, una tuple, un set u otra colección de strings individuales en un solo str, <str>.join(<iterable>) es una mejor opción:

# 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'

Los puntos de código dentro de un str se pueden referenciar desde la izquierda con un 0-based index:

creative = '창의적인'

>>> creative[0]
'창'

>>> creative[2]
'적'

>>> creative[3]
'인'

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

creative = '창의적인'

>>> creative[-4]
'창'

>>> creative[-2]
'적'

>>> creative[-1]
'인'

En Python no existe un tipo «carácter» ni «rune» aparte, así que indexar un string produce un str nuevo 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 rebanadas, usando <str>[<start>:stop:<step>] para producir un string nuevo. Los resultados excluyen el índice stop. Si no se da un start, el índice inicial será 0. Si no se da un 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 partir en strings más pequeños con <str>.split(<separator>), que devuelve una list de subcadenas. Luego esa lista se puede indexar o dividir más, si hace falta. Usar <str>.split() sin argumentos 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 encontrar la división se usa el string completo.


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

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

Los strings admiten todas las operaciones comunes de secuencias. Los puntos de código individuales se pueden recorrer en un bucle con for item in <str>. Los índices junto con sus elementos se pueden recorrer en 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 menor con su tarea de vocabulario de inglés, que le está resultando muy tediosa. Su clase está aprendiendo a crear palabras nuevas agregando prefijos y sufijos. Dado un conjunto de palabras, la maestra busca palabras transformadas correctamente y con la ortografía correcta, agregando el prefijo al principio o el sufijo al final.

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

1. Agrega 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 necesita formar palabras negativas, o «no», agregá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. Agrega prefijos a grupos de palabras

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

En este ejercicio, la clase está creando grupos de palabras de vocabulario usando estos prefijos, para poder estudiarlas juntas. Cada prefijo viene en una lista con palabras comunes con las que se usa. Los estudiantes necesitan 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 la siguiente forma: [<prefix>, <word_1>, <word_2> .... <word_n>], y devuelve un string con el prefijo aplicado a cada palabra que se ve así: '<prefix> :: <prefix><word_1> :: <prefix><word_2> :: <prefix><word_n>'.

No es necesario crear un bucle for o while para procesar los argumentos aquí. 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. Quita un sufijo de una palabra

ness es un sufijo común que significa «estado de ser». En esta actividad, tu hermana necesita encontrar la palabra raíz original quitando el sufijo ness. Pero, por supuesto, hay reglas de ortografía molestas: si la palabra raíz originalmente terminaba en una consonante seguida de una «y», entonces la «y» se cambió a «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 una word y devuelve la palabra raíz sin el sufijo ness.

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

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

4. Extrae y transforma una palabra

Los sufijos suelen usarse para cambiar la categoría gramatical a la que pertenece una palabra. Una práctica común en inglés es la «verbalización», donde un adjetivo se convierte en un verbo agregando un sufijo en.

En esta tarea, tu hermana va a practicar la «verbalización» de palabras extrayendo un adjetivo de una oración y convirtiéndolo en un verbo. Por suerte, todas las palabras que hay que transformar aquí son «regulares»: no necesitan cambios de ortografía para agregar el sufijo.

Implementa la función adjective_to_verb(<sentence>, <index>) que toma dos parámetros. Una sentence que usa la palabra de vocabulario, y el index de la palabra, una vez que esa oración se separa. La función debe devolver el adjetivo extraído como un 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 una pestaña nuevas
Python Exercism

¿Todo listo para empezar El vocabulario de la hermanita?

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