# Strings

## <mark style="color:blue;">1. ¿Qué es un string?</mark>

La sintaxis que debemos utilizar para definir strings en Python consiste en situar los caracteres entre `"` o `'`

```python
var = "Esto es un string"
var2 = 'Esto es un string'
```

La flexibilidad de definir string con el caracter `"` y el caracter `'` nos permite definir cadenas de texto que contienen esos mismos caracteres.

```python
var = "Un string puede definirse con el caracter ''"
print(var)
Un string puede definirse con el caracter ''
```

```python
var = 'Un string puede definirse con el caracter ""'
print(var)
Un string puede definirse con el caracter ""
```

## <mark style="color:blue;">2. Indexación</mark>

En muchos tipos de datos en Python se puede acceder a elementos individuales de un conjunto ordenado de datos directamente mediante un índice numérico o un valor clave. Este proceso se denomina indexación.

En Python, las cadenas son secuencias ordenadas de caracteres, y por lo tanto pueden ser indexadas de esta manera. Se puede acceder a los caracteres individuales de una cadena especificando el nombre de la cadena seguido de un número entre corchetes `[]`.

El primer carácter de la cadena tiene el índice 0, el siguiente tiene el índice 1, y así sucesivamente. El índice del último carácter será la longitud de la cadena menos uno.

```python
nombre = "Alex"
nombre[0]
'A'
nombre[3]
'x'
```

Tambien podemos utilizar números negativos para extraer caracteres por el final de la cadena de texto.

```python
nombre[-1]
'x'
nombre[-4]
'A'
```

## <mark style="color:blue;">3. Slicing</mark>

Python también permite una sintaxis específica de indexación que extrae subcadenas de una cadena de texto, a esto se denomina **slicing**.

La sintaxis que se utiliza para extraer una subcadena de una cadena `s` es de la forma `s[m:n]`, esto devuelve la porción de `s` que comienza en la posición `m`, y termina en la posición `n` (sin ser incluido el último caracter)

```python
nombre = "Alex Fernandez"
nombre[0:5]
'Alex '
nombre[-9:-1]
'Fernande'
```

Si no indicamos uno de los números, lee hasta el final.

```python
nombre[-9:]
'Fernandez'
nombre[5:]
'Fernandez'
nombre[:4]
'Alex'
```

## <mark style="color:blue;">4. Stride</mark>

El stride es otra variante más del slicing. Si se añade un `:` adicional y un tercer índice, se designa una stride, que indica cuantos caracteres saltar hasta obtener el siguiente caracter.

```python
nombre = "Alex Fernandez"
nombre[5:14:2]
'Fradz'
nombre[:5:1]
'Alex '
nombre[5:14:3]
'Fnd'
```

## <mark style="color:blue;">5. Modificación de strings</mark>

Un string es un tipo de dato que Python considera **inmutable**, esto quiere decir que no podemos modificar una parte de un string asociada a una variable

```python
nombre = "Alex"
nombre[0]
'A'
nombre[0] = "O"

---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
Cell In[58], line 1
----> 1 nombre[0] = "O"

TypeError: 'str' object does not support item assignment
```

A pesar de que no pueda modificarse el contenido de un string, si puede asignarse un string diferente a la variable.

```python
nombre = "Antonio"
```

## <mark style="color:blue;">6. Strings de múltiples líneas</mark>

En algunas ocasiones es posible que queramos definir un string que tenga múltiples líneas. Existen varias formas de definir esto en Python.

La forma más sencilla es introducir el caracter  en la posición de la cadena de texto donde queremos que se produzca el salto de línea.

```python
nombre = "Alex\nFernández\nSantos"
print(nombre)
Alex
Fernández
Santos
```

Otra opción interesante es situar nuestra cadena de texto entre los caracteres `"""`.

```python
nombre2 = """Alex
Fernández
Santos"""

print(nombre2)
Alex
Fernández
Santos
```


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://afsh4ck.gitbook.io/desarrollo-con-python/conceptos-basicos/introduccion-a-python/strings.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
