<jupyter_start><jupyter_text>**Alguns métodos de strings**(para mais informações, ver: https://docs.python.org/3/library/stdtypes.html)* `capitalize()`: retorna uma cópia da string com o primeiro caracter em maiúsculo e o resto em minúsculo. **Mudança versão 3.8**: o primeiro caracter agora é colocado em titlecase, ao invés de uppercase. Isso quer dizeruqe caracteres como dígrafos só terão sua primeira letra capitalizada, ao invés de o caracter completo;* `isalpha()`: retorna `True` se todos os caracteres da string são alfabéticos;* `isnumeric()`: retorna `True` se todos os caracteres da string são numéricos;* `isupper()`: retorna `True` se todos os caracteres da string são maiúsculos;* `islower()`: retorna `True` se há pelo menos um caractere ASCII minúsculo na string e nenhum caractere ASCII maiúsculo;* `split()`: retorna uma lista das palavras da string, usando `sep` como o delimitador da string;* `title()`: retorna uma versão em title case da string, onde palavras começam com um caractere maiúsculo e os demais são minúsculos;* `strip()`: retorna uma cópia da string removendo os caracteres vazios no início e no final da string. Também existem os métodos `lstrip()` e `rstrip()`, que removem caracteres vazios apenas do lado esquerdo ou do direito da string, respectivamente;* `replace()`: retorna uma cópia da string com todas as ocorrências da substring `old` substituída por `new`. Se o argumento opcional `count` for dado, somente as primeiras `count` ocorrências serão substituídas.<jupyter_code>print(f"capitalize: {minha_string.capitalize()}")
print(f"isalpha: {minha_string.isalpha()}")
print(f"isnumeric: {minha_string.isnumeric()}")
print(f"isupper: {minha_string.isupper()}")
print(f"islower: {minha_string.islower()}")
print(f"split: {minha_string.split()}")
print(f"title: {minha_string.title()}")
print(f"strip: {minha_string.strip()}")
print(f"replace: {minha_string.replace('o', 'a')}")
uma_string = "     Meu nome é Fulano    "
print(f"lstrip: {uma_string.lstrip()}")
print(f"rstrip: {uma_string.rstrip()}")
print(f"strip: {uma_string.strip()}")
# Fatiamento de strings
print(minha_string[:8])
print(minha_string[9:])
print(minha_string[::2])<jupyter_output>chapolin
colorado
caoi ooao<jupyter_text>**Exercício 1:** Em uma competição de salto em distância, cada atleta tem direito a cinco saltos. O resultado do atleta será determinado pela média dos cinco valores restantes. Você deve fazer um programa que receba o nome e as cinco distâncias alcançadas pelo atleta e seus saltos e depois informe o nome, os saltos e a média dos saltos. O programa deve ser encerrado quando não for informado o nome do atleta.<jupyter_code>while True:
    atleta = str(input(f"Digite o nome do atleta: "))

    if atleta == "":
        break
    
    saltos_atleta = []
    soma_saltos = 0
    for tentativa in range(5):
        salto = float(input(f"Digite o valor do {tentativa + 1}o. salto de {atleta}: "))
        saltos_atleta.append(salto)
        soma_saltos += salto

    media = soma_saltos / 5

    print(f"\nResultado final:\nAtleta: {atleta}\nSaltos:", end = " ")

    for salto in saltos_atleta[0:4]:
        print(f"{salto} - ", end = "")
            
    print(f"{saltos_atleta[4]}.\nMédia dos saltos: {media:.2f} m.\n")<jupyter_output>Digite o nome do atleta: joão
Digite o valor do 1o. salto de joão: 3.45
Digite o valor do 2o. salto de joão: 5.55
Digite o valor do 3o. salto de joão: 3.24
Digite o valor do 4o. salto de joão: 1.12
Digite o valor do 5o. salto de joão: 6.44

Resultado final:
Atleta: joão
Saltos: 3.45 - 5.55 - 3.24 - 1.12 - 6.44.
Média dos saltos: 3.96 m.

Digite o nome do atleta: josé
Digite o valor do 1o. salto de josé: 1
Digite o valor do 2o. salto de josé: 2
Digite o valor do 3o. salto de josé: 3
Digite o valor do 4o. salto de josé: 4
Digite o valor do 5o. salto de josé: 5

Resultado final:
Atleta: josé
Saltos: 1.0 - 2.0 - 3.0 - 4.0 - 5.0.
Média dos saltos: 3.00 m.

Digite o nome do atleta: jesus
Digite o valor do 1o. salto de jesus: 5
Digite o valor do 2o. salto de jesus: 6
Digite o valor do 3o. salto de jesus: 4.44
Digite o valor do 4o. salto de jesus: 8.82
Digite o valor do 5o. salto de jesus: 7.11

Resultado final:
Atleta: jesus
Saltos: 5.0 - 6.0 - 4.44 - 8.82 - 7.11.
Média dos saltos: 6.27 m.

D[...]<jupyter_text>**Exercício 2:** Faça um programa que calcule o fatorial de um número inteiro fornecido pelousuario. Ex: 5! = 5 . 4 . 3 . 2 . 1 = 120. A saida deve ser conforme o exemplo abaixo:Fatorial de 5:5! = 5 . 4 . 3 . 2 . 1 = 120<jupyter_code>def fatorial(x):
    '''
    Função recursiva que retorna o fatorial de x.
    '''
    if x == 1 or x == 0:
        return 1
    while x > 1:
        return x * fatorial(x - 1)
    
    

def imprime_fatorial(x):
    '''
    Função que imprime de maneira organizada o passo a passo do cálculo do fatorial de x.
    '''
    
    print(f"Fatorial de: {x}\n{x}! = ", end = "")
    
    for i in range(x, 1, -1):
        print(f"{i} . ", end = "")

    fat = fatorial(x)
    
    print(f"1 = {fat}")


# testando programa com fatoriais de 1 até 10
    
for i in range(1, 11):
    imprime_fatorial(i)
    print()<jupyter_output>Fatorial de: 1
1! = 1 = 1

Fatorial de: 2
2! = 2 . 1 = 2

Fatorial de: 3
3! = 3 . 2 . 1 = 6

Fatorial de: 4
4! = 4 . 3 . 2 . 1 = 24

Fatorial de: 5
5! = 5 . 4 . 3 . 2 . 1 = 120

Fatorial de: 6
6! = 6 . 5 . 4 . 3 . 2 . 1 = 720

Fatorial de: 7
7! = 7 . 6 . 5 . 4 . 3 . 2 . 1 = 5040

Fatorial de: 8
8! = 8 . 7 . 6 . 5 . 4 . 3 . 2 . 1 = 40320

Fatorial de: 9
9! = 9 . 8 . 7 . 6 . 5 . 4 . 3 . 2 . 1 = 362880

Fatorial de: 10
10! = 10 . 9 . 8 . 7 . 6 . 5 . 4 . 3 . 2 . 1 = 3628800<jupyter_text>**Exercício 3:** As Organizações Tabajara resolveram dar um abono aos seus colaboradores emreconhecimento ao bom resultado alcançado durante o ano que passou. Para isto contratou você para desenvolver a aplicação que servirá como uma projeção de quanto será gasto com o pagamento deste abono.o	Após reuniões envolvendo a diretoria executiva, a diretoria financeira e    os representantes do sindicato laboral, chegou-se a seguinte forma de    cálculo:o	a.Cada funcionário receberá o equivalente a 20% do seu salário bruto        de dezembro; a.O piso do abono será de 100 reais, isto é, aqueles        funcionários cujo salário for muito baixo, recebem este valor mínimo;        Neste momento, não se deve ter nenhuma preocupação com colaboradores        com tempo menor de casa, descontos, impostos ou outras particularidades.        Seu programa deverá permitir a digitação do salário de um número        indefinido (desconhecido) de salários. Um valor de salário igual a 0        (zero) encerra a digitação. Após a entrada de todos os dados o programa        deverá calcular o valor do abono concedido a cada colaborador, de acordo        com a regra definida acima. Ao final, o programa deverá apresentar:        o	O salário de cada funcionário, juntamente com o valor do abono;o	O número total de funcionário processados;o	O valor total a ser gasto com o pagamento do abono;o	O número de funcionário que receberá o valor mínimo de 100 reais;o	O maior valor pago como abono; A tela abaixo é um exemplo de execução do        programa, apenas para fins ilustrativos. Os valores podem mudar a cada        execução do programa.Projeção de Gastos com Abono Salário: 1000Salário: 300Salário: 500Salário: 100Salário: 4500Salário: 0Salário    - Abono     RS 1000.00 - RS  200.00RS  300.00 - RS  100.00RS  500.00 - RS  100.00RS  100.00 - RS  100.00RS 4500.00 - RS  900.00 Foram processados 5 colaboradoresTotal gasto com abonos: RS 1400.00Valor mínimo pago a 3 colaboradoresMaior valor de abono pago: RS 900.00<jupyter_code># inicializa variaveis importantes
salarios = []
abonos = []
minimo = maior = 0

# calcula e armazena os salários entrados pelo teclado
while True:
    salario = float(input("Salário: "))

    if salario == 0:
        break

    if salario > maior:
        maior = salario
        
    abono = salario * 0.20
    if abono <= 100:
        abono = 100.0
        minimo += 1
        
    salarios.append(salario)
    abonos.append(abono)


# imprime os resultados da consulta anterior

print(f"Salário    - Abono   ")

soma_abonos = 0

for salario, abono in zip(salarios, abonos):
    soma_abonos += abono

    print(f"R$ {salario:>7.2f} - R$ {abono:>7.2f}")

print(f"Foram processados {len(salarios)} colaboradores.")
print(f"Total gasto com abonos: R$ {soma_abonos:.2f}.")
print(f"Valor mínimo pago a {minimo:.2f} colaboradores.")
print(f"Maior valor de abono pago: R$ {maior:.2f}.")
# padrão ASCII
for i in range(1000):
    print(f"{i} - {chr(i):.3}", end = " ")<jupyter_output>0 -  1 -  2 -  3 -  4 -  5 -  6 -  7 -  8 -  9 - 	 10 - 
 11 -  12 -  13 - 
 14 -  15 -  16 -  17 -  18 -  19 -  20 -  21 -  22 -  23 -  24 -  25 -  26 -  27 -  28 -  29 -  30 -  31 -  32 -   33 - ! 34 - " 35 - # 36 - $ 37 - % 38 - & 39 - ' 40 - ( 41 - ) 42 - * 43 - + 44 - , 45 - - 46 - . 47 - / 48 - 0 49 - 1 50 - 2 51 - 3 52 - 4 53 - 5 54 - 6 55 - 7 56 - 8 57 - 9 58 - : 59 - ; 60 - < 61 - = 62 - > 63 - ? 64 - @ 65 - A 66 - B 67 - C 68 - D 69 - E 70 - F 71 - G 72 - H 73 - I 74 - J 75 - K 76 - L 77 - M 78 - N 79 - O 80 - P 81 - Q 82 - R 83 - S 84 - T 85 - U 86 - V 87 - W 88 - X 89 - Y 90 - Z 91 - [ 92 - \ 93 - ] 94 - ^ 95 - _ 96 - ` 97 - a 98 - b 99 - c 100 - d 101 - e 102 - f 103 - g 104 - h 105 - i 106 - j 107 - k 108 - l 109 - m 110 - n 111 - o 112 - p 113 - q 114 - r 115 - s 116 - t 117 - u 118 - v 119 - w 120 - x 121 - y 122 - z 123 - { 124 - | 125 - } 126 - ~ 127 -  128 -  129 -  130 -  131 -  132 -  133 -  134 -  135 -  136 -  137 -  138 - [...]<jupyter_text>**Exercício 4:** Implemente a cifra de César com os métodos de string e com as outras coisas já aprendidas até aqui. Para entender o que é a cifra de César, consulte a Wikipédia: https://pt.wikipedia.org/wiki/Cifra_de_César<jupyter_code>TAM_MAX_CH = 26 # este é o tamanho máximo da chave

def recebe_modo():
    """
    Função que pergunta se o usuario quer criptografar (True) ou descriptografar (False).
    """
    while True:
        escolha = str(input("Você deseja criptografar (c) ou descriptografar (d)? "))
        if escolha[0].lower() == "c":
            return escolha[0]
        elif escolha[0].lower() == "d":
            return escolha[0]


def recebe_chave():
    """
    Recebe uma chave e retorna o valor, se ele for um valor válido.
    """
    global TAM_MAX_CH
    while True:
        chave = int(input(f"Entre com o número da chave (1-{TAM_MAX_CH}): "))
        if 1 <= chave <= TAM_MAX_CH:
            return chave

def gera_msg_traduzida(modo, mensagem, chave):
    """
    Recebe modo (criptografar ou descriptografar), mensagem e chave e retorna mensagem traduzida.
    """
    global TAM_MAX_CH
    traducao = mensagem
    if modo == "d":
        chave *= - 1

    traduzido = ""

    for simbolo in mensagem:
        if simbolo.isalpha():
            num = ord(simbolo)
            num += chave

            if simbolo.isupper():
                if num > ord("Z"):
                    num -= TAM_MAX_CH
                elif num < ord("A"):
                    num += TAM_MAX_CH
                    
            elif simbolo.islower():
                if num > ord("z"):
                     num -= TAM_MAX_CH
                elif num < ord("a"):
                    num += TAM_MAX_CH

            traduzido += chr(num)

        else:
            traduzido += simbolo

    return traduzido
            

def main():
    modo = recebe_modo()
    mensagem = str(input("Insira a mensagem a ser criptografada: "))
    chave = recebe_chave()
    

    print("Seu texto traduzido é: ")
    print(gera_msg_traduzida(modo, mensagem, chave))
# Criptografando uma mensagem
# mensagem: Vamos criptografar esta mensagem aqui e ver o que ira rolar quando fizermos isso
# chave: 5

main()
# Descriptografando a mensagem
# mensagem: Afrtx hwnuytlwfkfw jxyf rjsxfljr fvzn j ajw t vzj nwf wtqfw vzfsit knejwrtx nxxt
# chave: 5

main()<jupyter_output>Você deseja criptografar (c) ou descriptografar (d)? d
Insira a mensagem a ser criptografada: Afrtx hwnuytlwfkfw jxyf rjsxfljr fvzn j ajw t vzj nwf wtqfw vzfsit knejwrtx nxxt
Entre com o número da chave (1-26): 5
Seu texto traduzido é: 
Vamos criptografar esta mensagem aqui e ver o que ira rolar quando fizermos isso<jupyter_text>**Exercício 5:** Implemente o jogo da forca usando o Python.<jupyter_code>import random

forca_imagem = ["""

  +---+
  |   |
      |
      |
      |
      |
=========""","""

  +---+
  |   |
  o   |
      |
      |
      |
=========""","""

  +---+
  |   |
  o   |
  |   |
      |
      |
=========""","""

  +---+
  |   |
  o   |
 /|   |
      |
      |
=========""","""

  +---+
  |   |
  o   |
 /|\  |
      |
      |
=========""","""
                
  +---+
  |   |
  o   |
 /|\  |
 /    |
      |
=========""","""
                
  +---+
  |   |
  o   |
 /|\  |
 / \  |
      |
========="""]


palavras = "formiga babuino encefalo elefante girafa hamburguer chocolate giroscopio".split()

def main():
    """
    Função principal do programa.
    """
    global forca_imagem

    print("F O R C A")
    letras_erradas = ""
    letras_acertadas = ""
    palavra_secreta = gera_palavra_aleatória().upper()
    jogando = True

    while jogando:
        imprime_jogo(letras_erradas, letras_acertadas, palavra_secreta)

        palpite = recebe_palpite(letras_erradas + letras_acertadas)

        if palpite in palavra_secreta:
            letras_acertadas += palpite

            if verifica_se_ganhou(palavra_secreta, letras_acertadas):
                print(f"Exato! A palavra secreta e {palavra_secreta}! Você ganhou!")
                jogando = False

        else:
            letras_erradas += palpite

            if len(letras_erradas) == len(forca_imagem) - 1:
                imprime_jogo(letras_erradas, letras_acertadas, palavra_secreta)

                print("GAME OVER! Você excedeu o seu limite de palpites!")
                print(f"Depois de {len(letras_erradas)} letras erradas e {len(letras_acertadas)} palpites corretos,", end = " ")
                print(f"a palavra correta era {palavra_secreta}.")

                jogando = False

            if not jogando:
                if jogar_novamente():
                    letras_erradas = ""
                    letras_acertadas = ""
                    jogando = True
                    palavra_secreta = gera_palavra_secreta().upper() 

            
    

def gera_palavra_aleatória():
    """
    Função que retorna uma string a partir da lista de palavras global.
    """
    global palavras
    return random.choice(palavras)

def imprime_com_espaços(palavra):
    """
    Recebe uma string palavra ou lista e imprime essa palavra com espaço entre suas letras ou strings.
    """
    for letra in palavra:
        print(letra, end = " ")

    print()

def recebe_palpite(palpites_feitos):
    """
    Função feita para garantir que o usuario coloque uma entrada válida, ou seja, que seja uma única letra que
    ele ainda não tenha chutado.
    """
    while True:
        palpite = input("Adivinhe uma letra.\n").upper()

        if len(palpite) != 1:
            print("Coloque uma única letra.")
        elif palpite in palpites_feitos:
            print("Você já chutou esta letra. Escolha novamente.")
        elif not "A" <= palpite <= "Z":
            print("Por favor, escolha apenas letras.")
        else:
            return palpite

def imprime_jogo(letras_erradas, letras_acertadas, palavra_secreta):
    """
    Feito a partir da variavel global que contém as imagens do jogo em ASCII art, e também as letras chutadas de
    maneira correta e as letras erradas e a palavra secreta."""
    global forca_imagem
    print(forca_imagem[len(letras_erradas)] + "\n")

    print("Letras erradas:", end = " ")
    imprime_com_espaços(letras_erradas)

    vazio = "_" * len(palavra_secreta)

    for i in range(len(palavra_secreta)):

        if palavra_secreta[i] in letras_acertadas:
            vazio = vazio[:i] + palavra_secreta[i] + vazio[i + 1:]

    imprime_com_espaços(vazio)

def jogar_novamente():
    """
    Função que pede para o usuario decidir se ele quer jogar novamente e retorna um booleano representando a resposta.
    """
    return input("Você quer jogar novamente? (S - Sim; N - Não):\n").upper().startswith("S")

def verifica_se_ganhou(palavra_secreta, letras_acertadas):
    """
    Função verifica se o usuário acertou todas as letras da palavra secreta."""
    ganhou = True
    for letra in palavra_secreta:
        if letra not in letras_acertadas:
            ganhou = False
            break

    return ganhou
# rodando o jogo
main()<jupyter_output>F O R C A


  +---+
  |   |
      |
      |
      |
      |
=========

Letras erradas: 
_ _ _ _ _ _ _ 
Adivinhe uma letra.
a


  +---+
  |   |
      |
      |
      |
      |
=========

Letras erradas: 
_ A _ _ _ _ _ 
Adivinhe uma letra.
e


  +---+
  |   |
  o   |
      |
      |
      |
=========

Letras erradas: E 
_ A _ _ _ _ _ 
Adivinhe uma letra.
i


  +---+
  |   |
  o   |
      |
      |
      |
=========

Letras erradas: E 
_ A _ _ I _ _ 
Adivinhe uma letra.
o


  +---+
  |   |
  o   |
      |
      |
      |
=========

Letras erradas: E 
_ A _ _ I _ O 
Adivinhe uma letra.
u


  +---+
  |   |
  o   |
      |
      |
      |
=========

Letras erradas: E 
_ A _ U I _ O 
Adivinhe uma letra.
b


  +---+
  |   |
  o   |
      |
      |
      |
=========

Letras erradas: E 
B A B U I _ O 
Adivinhe uma letra.
n
Exato! A palavra secreta e BABUINO! Você ganhou!
{'fraction_non_alphanumeric': 0.1152249331740886, 'fraction_numerical': 0.04032303929932321, 'mean_word_length': 2.358288770053476, 'pattern_counts': {'":': 5, '<': 27, '<?xml version=': 0, '>': 26, 'https://': 2, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 27, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '6', 'dir': 'jupyter-structured-clean-dedup', 'id': '548313', 'license': 'CC0-1.0', 'n_tokens_mistral': 7374, 'n_tokens_neox': 6639, 'n_words': 2103, 'path': '014 - Strings/.ipynb_checkpoints/014 - Strings-checkpoint.ipynb', 'repo_name': 'limapiraju/python-geral', 'size': '17583'}