Enviar um café pro programador

Como Unir e Separar Strings: join() e split() - Tutorial de Python

Neste Tutorial de Python, vamos aprender como usar os métodos join() e split() para, respectivamente, unir (juntor) e quebrar (separar) strings.

Leia também:

Unir Strings: Método join()

Vamos supor que temos a lista:
lista = ['Curso','Python','Progressivo']

Se usarmos: ','.join(lista)
Ele vai unir cada string da lista, colocando uma vírgula entre as strings.

O resultado é uma string só:
"Curso,Python,Progressivo"

É mais interessante unir essas palavras com espaço em branco.
Então fazemos: ' '.join(lista)

O resultado é a string: "Curso Python Progressivo".

Teste o código:

lista=['Curso','Python','Progressivo']

#Unindo as palavras com vírgula
print( ','.join(lista) )

#Unindo as palavras com espaço
print( ' '.join(lista) )

Ou seja, o comando: ch.join(lista)


Ele vai pegar cada elemento da lista lista e grudar um no outro com o caractere ch unindo eles.

Como Separar e Quebrar Strings: split()

Assim como tempos método para unir, temos para separar.

Por exemplo, para transformar a string: "Curso Python Progressivo)" em palavras separadas, quebrando onde tem um espaço em branco, fazemos:
lista.split()

O resultado é a lista:  ['Curso','Python','Progressivo']



Teste:

texto="Curso Python Progressivo"
print( texto.split() )

Note que ele quebrou automaticamente nos espaços em branco.
Mas podemos quebrar em qualquer caractere.

Por exemplo, vamos supor que o Silvio Santos nos deu a seguinte string:
"123PI567PI9..."

Fazendo: texto.split('PI')
Ele vai arrancar os 'PI' da string e devolve uma lista com elementos separados onde antes era 'PI'.
Teste:

texto="123PI567PI9..."
print( texto.split('PI') )

O resultado é a lista:
['123', '567', '9...']

Strings com Letras, Números e/ou Caracteres Especiais

Neste tutorial de nosso Curso de Python, vamos aprender a detectar a composição de strings, ou seja, se tem letras, números, os dois, tabulação, espaço vazio ou caracteres especiais.

Leia também:

É tudo letra? isalpha()


O método isalpha() retorna True se todas as letras de uma string forem letras.
Ou seja, se tiver algum número ou caractere especial.

Ela também retorna False se estiver vazia.

O código a seguir pede uma string ao usuário e diz se é tudo letra ou misturado:

while True:
 texto = input("Digite uma string: ")

 if texto.isalpha():
  print("Tudo letra")
 else:
  print("Nem tudo é letra")

É tudo número ? isdecimal()

Já a isdecimal() retorna True se tudo for número.

Se tiver alguma letra, caractere especial ou a string for vazia, retorna False.
O código abaixo identifica se é tudo letra, tudo número ou misturado:

while True:
 texto = input("Digite uma string: ")

 if texto.isalpha():
  print("Tudo tudo letra")
 elif texto.isdecimal():
  print("Tudo numero")
 else:
  print("Misturado, vazio ou caractere especial")

Letras e Números ? isalnum()

Essa retorna True se for composta somente por letras e números.




Retorna False se for vazia ou tiver algum caractere especial.
O código abaixo diz se sua string é tudo número, tudo letra, letra e número ou tem caractere especial ou vazia:

while True:
 texto = input("Digite uma string: ")

 if texto.isalpha():
  print("Tudo tudo letra")
 elif texto.isdecimal():
  print("Tudo numero")
 elif texto.isalnum():
  print("Numeros e letras")
 else:
  print("Vazia ou caractere especial")

Só espaço, tabulação ou quebra de linha: isspace()

Já o método isspace() só retorna True se tivermos espaço em branco, tabulação ou quebra de linha.

Retorna False caso contrário ou a string seja vazia.




while True:
 texto = input("Digite uma string: ")

 if texto.isalpha():
  print("Tudo tudo letra")
 elif texto.isdecimal():
  print("Tudo numero")
 elif texto.isalnum():
  print("Numeros e letras")
 elif texto.isspace():
  print("Composto so de espaço, e/ou tabulação e/ou quebra de linha")
 else:
  print("Vazia ou caractere especial")


Certamente você já viu algum formulário ou programa que pede somente determinados tipos de caracteres. Por exemplo, no campo de nome, devemos receber apenas letras.

Já no campo CPF ou data, podemos usar o conhecimento deste tutorial para pedir e detectar se a pessoa digitou apenas números.

Em alguns tipos de cadastro de senha, precisamos fornecer tanto letras como números e de preferência algum caractere especial. Podemos 'tratar' e analisar a entrada do usuário com os métodos vistos hoje.

Strings Maiúsculas e Minúsculas em Python

Neste tutorial de nossa seção de Strings em Python, vamos aprender a transformar uma string maiúscula em minúscula e vice-versa. Também aprenderemos como detectar se um caractere é maiúsculo ou minúsculo.

Leia também:

Transformar string em maiúscula ou minúscula: upper() e lower()

O método upper() recebe o valor de uma string e retorna ela mesma, mas com todos os caracteres em maiúscula.

Esse método faz parte dos objetos do tipo string.
Então para transformar uma string texto em maiúscula, fazemos: texto.upper()

Veja um exemplo:

texto = "Curso Python Progressivo"
print(texto)

texto = texto.upper()
print(texto)

Resultado:

Transformar string maiúscula em minúscula


O mesmo vale para transformar todos os caracteres da string em minúsculos, usando o método lower():

texto = "Curso Python Progressivo"
print(texto)

texto = texto.lower()
print(texto)

Teste e veja o resultado.

String toda em maiúscula ou minúscula: isupper() e islower()

Para detectar se uma string é toda maiúscula ou toda minúscula, usamos o método isupper() que retorna True se todos caracteres forem maiúsculos, e False se não forem.

Vamos testar se a string 'CURSO PYTHON PROGRESSIVO' é toda maiúscula:

Experimente colocar apenas uma letrinha em minúscula, e vai cair no ELSE.
Para saber se toda a string é minúscula, use o método islower(), que é semelhante.

Exercício de String em Python

Crie um script que peça uma string ao usuário e diga se:
Ela é toda maiúscula
Ela é toda minúscula
Tem caracteres maiúsculos e minúsculos

No primeiro teste condicional, verificamos se tudo é maiúsculo.
Se for, ok, avisa isso.


Se não for, cai no ELIF que vai testar se é tudo minúsculo.
Se for, avisa que é.

E por fim, se não for tudo maiúsculo ou tudo minúsculo, é porque ta misturado:

while True:
 texto = input("Digite uma string: ")

 if texto.isupper():
  print("Tudo maiusculo")
 elif texto.islower():
  print("Tudo minusculo")
 else:
  print("Misturado")

Strings - Como usar, Acessar Caracteres e Saber Tamanho de String

Neste tutorial introdutório de nossa seção de Strings em Python, vamos revisar o que é uma string, o que não é, como usar, acessar seus caracteres e descobrir seu tamanho.

Leia também:

Como Usar Strings


Vamos dar uma relembrada nos conceitos principais de string.

Representamos uma string por:
  • 'algo'
  • "algo"

Ou seja, qualquer caractere entre aspas simples ou aspas duplas.
É errado fazer: 'algo" ou "algo'

Se começou com simples, termina com simples. Se começa com dupla, termina em aspas duplas.

É possível também usar as dois, para mostrar aspas simples ou dupla num print, por exemplo:
'Curso "Python" Progressivo'

A saída é: Curso "Python" Progressivo
Isso ocorreu porque o Python entende que tudo dentre as aspas simples, era uma string, incluindo as aspas duplas.

Caracteres Especiais em Python

Para representar coisas diferente de texto, número e acentuação, usamos a barra de escape, que nos permite utilizar os seguintes caracteres especiais:
  • \\ - Exibe uma barra
  • \' - Exibe a aspa simples
  • \" - Exibe a aspa dupla
  • \a - Dá um bipe
  • \b - Retrocesso
  • \f - Avanço
  • \n - Caractere de nova linha (enter)
  • \r - Carriage return
  • \t - Tab horizontal
  • \v - Tab vertical


Acessando caracteres de uma string
Podemos acessar caractere de uma string usando o laço for:

texto = "Curso Python Progressivo"

for caractere in texto:
    print(caractere)

Ou seja, a variável caractere vai assumindo o valor de cada caractere da string texto, um por um e imprimindo.

Para exibir sem a quebra de linha:
texto = "Curso Python Progressivo"

for caractere in texto:
    print(caractere, end='')


Você também pode acessar diretamente caractere por caractere, como se fosse uma lista:
texto[0]='C'
texto[1]='u'
texto[2]='r'
texto[3]='s'
texto[4]='o'
texto[5]=' '
etc

Já o comando:
texto[0:5] imprime 5 caracteres, de posição 0, 1, 2, 3 e 4: 'Curso'

O comando:
texto[:6] - exibe do índice 6 em diante: 'Python Progressivo'

Ou seja: texto[inicio : fim] - é uma string que começa em inicio e termina em fim-1.

Tamanho de uma string: len()

Uma função nativa do Python e bem útil, é a len().
Você chama ela com uma string dentro, e ela te retorna o número de caracteres.

Fazendo:
print( len(texto) ) - retorna o valor 24, pois tem vinte e quatro caracteres.

Concatenar Strings: operador +

Vejam o seguinte código:
texto = "Curso"
print(texto)

texto = texto + " Python Progressivo"
print(texto)

Inserimos a string 'Curso' na variável texto.
Em seguida, fazemos essa variável se igualar com ela mesma MAIS a string " Python Progressivo".

Isso foi feito com sinal de +, é o operador de concatenação, ou seja, vai unir uma string na outra.
O leitor mais atento, vai pensar:

"Mas você disse que strings são imutáveis"

De fato, são.
A variável texto apontava para um endereço de memória que tinha "Curso" lá.
Depois, passou a apontar para outro endereço, que tem a string "Curso Python Progressivo".

A antiga referência vai deixar de ser usada e portanto descartada de imediato pelo Python.

Ler e Escrever num mesmo arquivo em Python (Exercício resolvido)

Neste tutorial de nossa Apostila de Python, vamos te mostrar através de dois exercícios como ler e escrever, em um mesmo arquivo, ao mesmo tempo.

Quer trabalhar e ganhar dinheiro com Python? Obtenha seu certificado
Deseja acessar todo nosso conteúdo em um PDF? Apostila de Python

Exercício: Ler e Escrever num arquivo


"Crie um programa simples que pergunta se a pessoa deseja ler um arquivo ou escrever algo nele."

Nosso script vai funcionar assim:
Aparece um menu de opções (sair, ler ou escrever)
Se digitar ler, lê o conteúdo do arquivo
Se optar por escrever, escreve algo no arquivo

Isso em um looping indefinido, acaba quando o usuário quiser.

Primeiro de tudo, importamos o módulo os.path, isso vai ser necessário pois vamos usar a função isfile() para checar se o arquivo teste.exe existe

Se retornar false, é porque não existe, então cai dentro de um IF que vai criar esse arquivo (usando o modo de abertura de escrita w).

Agora que criamos, vamos abrir o arquivo no modo de leitura e escrita: r+

Arquivo aberto, perguntamos que opção ele deseja fazer.
Se for 0, op fica nulo e termina o laço WHILE.

Se for 1, o usuário quer ler o que tem no arquivo.
Para isto, basta usar a função read() dentro de um print.
Em seguida, fechamos o arquivo, já que terminamos de usar.

Se ele digitar 2, vai cair na opção de escrever.
Então pedimos um número, truncamos o arquivo (retiramos o que tem nele), escrevemos com o método write() e fechamos o arquivo!

E prontinho, é só isso, veja como ficou nosso código Python:

import os.path

op=1
while op:
    if os.path.isfile("teste.txt") is False:
        print("Arquivo teste.txt nao existe. Criando...")
        meuArquivo = open("teste.txt", "w")
    
    meuArquivo = open("teste.txt", "r+")

    op=int(input("0. Sair \n"
                 "1. Ler\n"
                 "2. Escrever\n"))

    if op==1:
        print( meuArquivo.read() )
        meuArquivo.close()
        
    if op==2:
        num = input("Numero:")
        meuArquivo.truncate()
        meuArquivo.write(num)
        meuArquivo.close()

meuArquivo.close()

Exercício de Arquivos em Python

"Ao escrever compare o número que o usuário digitou com o número que está lá armazenado. Só escreva no arquivo se o usuário digitar um número MAIOR do que aquele que está lá".

A única novidade, vai ser a variável num2, ela vai ler o que tem no arquivo, pelo método read().


Em seguida, vamos escrever no arquivo apenas em duas condições:

  1. Se o arquivo estiver vazio, ou seja, num2=''
  2. Se o número do usuário for maior que o armazenado: int(num) > int(num2)


Lembre-se de passar num e num2 para inteiro, pois em arquivos, elas são strings!

Se nenhuma dessas condições for atendida, nada escrevemos no arquivo e dizemos isso dentro de um print no ELSE.

Veja como ficou nosso código:

import os.path


op=1
while op:
    if os.path.isfile("teste.txt") is False:
        print("Arquivo teste.txt nao existe. Criando...")
        meuArquivo = open("teste.txt", "w")

    meuArquivo = open("teste.txt", "r+")

    op=int(input("0. Sair \n"
                 "1. Ler\n"
                 "2. Escrever\n"))

    if op==1:
        print( meuArquivo.read() )
        meuArquivo.close()
            
        
    if op==2:
        num = input("Numero:")
        num2 = meuArquivo.read()
        meuArquivo.seek(0)

        if (num2 is '') or (int(num)>int(num2)):
            meuArquivo.truncate()
            meuArquivo.write(num)
            meuArquivo.close()
        else:
            print(num," menor que ", num2)
meuArquivo.close()
        

Exercício Proposto

No artigo Como criar um jogo em Python, fizemos um game onde o computador sorteia um número de 1 até 100 e você deve adivinhar.

Implemente a função recorde nele.
Ou seja, num arquivo de no recorde.txt você deve armazenar o recorde do número mínimo de tentativas que alguém conseguiu acertar!

Fizemos essa implementação em nossa apostila de Python:
Apostila Python Progressivo

String - O que é ? Como funciona ? Onde se usa ?

Neste tutorial inicial de nossa seção de Strings em Python, vamos ver o que de fato é uma string, como funciona, para que servem e onde diachos vamos usar elas em nosso estudo.

Leia também:

Strings - O que são ?


Esta seção de nosso Curso de Python, poderia muito bem estar na de Sequẽncias, pois é simplesmente isso que uma string é: uma sequência de caracteres.

E por caracteres, entendam:
  • Letras maiúsculas
  • Letras minúsculas
  • Acentos: ' ` ~ ^
  • Caracteres especiais: ! @ # $ % "& * ( )
  • E outros próprios da computação: como quebra de linha '\n' e um tab '\t'

Ou seja, qualquer representaçãozinha de algo que você possa, de algum modo ver ou perceber, é um caractere. O caractere é a maneira do computador, da máquina, se comunicar com a gente. E a string nada mais é que um conjunto ordenado de caracteres, onde podemos acessar individualmente cada elemento dela, como acessávamos nas listas.

A diferença, porém, é que as strings são imutáveis! Uma vez dado o valor para cada caractere, não pode mudar, adicionar ou excluir. Mas, calma! Não quer dizer que não vamos copiar, editar ou excluir strings.

A rigor, strings são sequência imutáveis de caracteres.
Vamos aprender uma porção de métodos que vão nos ajudar a fazer tudo com textos. Tudo mesmo.

Lembre-se: computadores entendem apenas bits (correntes e voltagens elétricas), binário, 1 e 0...a gente 'se dá melhor' com stringsStrings é a maneira na qual nós humanos iremos se comunicar melhor com as máquinas e fazer com que elas se comuniquem melhor com outros seres humanos, os usuários de seus programas e scripts Python.

Strings - Como funciona? O que fazer com elas?

Todo e qualquer trabalho que você possa imaginar, vai usar strings.

Imagine o Google...as pessoas digitam strings, eles devem armazenar trilhões de strings sobre sites, informações, tem que achar dados, bater com o que a pessoa busca, baseado nos gostos de cada um, sugerir outros sites, vídeos...tudo isso é tratamento e trabalho intenso com strings.





Um sistema federal, com nomes, CPF, RG, CNH, lista com ficha criminal, ficha médica...tudo são dados na forma de strings. Achar alguém, bater uma informação com outra, é tudo comparar string.

Vamos estudar coisas como:
  • Saber se um caractere é maiúsculo ou minúsculo
  • Saber se foi digitado um texto ou um número (ex: não pode digitar número no campo de CEP)
  • Passar tudo pra minúsculo (ex: endereço de sites e e-mail, tem que passar tudo pra minúsculo)
  • Localizar e substituir dos editores de texto é fazer procura em strings, apagar trechos, substituir por outros etc
  • Aplicar um corretor ortográfico (comparar suas strings com a de um dicionário, de sua língua)
  • Traduzir um texto entre línguas
  • Acessar o clipboard usando o Python, região que fica armazenado o copiar e colar do seu computador
  • Adicionar ou remover espaço ou quebra de linhas
  • Concatenar, dividir ou extrair partes de uma string
  • Formatar texto e exibição dos mesmos
  • Sistemas de login, senha e banco de dados, usam e abusam de strings

E por ai vai, os usos e possibilidades com strings são simplesmente ilimitados.




No próximo tutorial vamos rever como usar, como criar, acessar seus elementos, exibir alguns caracteres especiais bem como descobrir o tamanho de uma string com a função len.

Lista de Exercícios de Arquivos

Neste tutorial, vamos te propor duas questões bem interessantes de Python usando Arquivos.

Leia também:
Obter certificado do curso (para trabalhar como programador Python)
Obter apostila Python Progressivo (download do PDF)


Lista de Exercícios de Python

1. Faça um programa que leia um arquivo texto contendo uma lista de endereços IP e gere um outro arquivo, contendo um relatório dos endereços IP válidos e inválidos.

O arquivo de entrada possui o seguinte formato:
200.135.80.9
192.168.1.1
8.35.67.74
257.32.4.5
85.345.1.2
1.2.3.4
9.8.234.5
192.168.0.256

O arquivo de saída possui o seguinte formato:
[Endereços válidos:]
200.135.80.9
192.168.1.1
8.35.67.74
1.2.3.4

[Endereços inválidos:]
257.32.4.5
85.345.1.2
9.8.234.5
192.168.0.256




2. A ACME Inc., uma empresa de 500 funcionários, está tendo problemas de espaço em disco no seu servidor de arquivos. Para tentar resolver este problema, o Administrador de Rede precisa saber qual o espaço ocupado pelos usuários, e identificar os usuários com maior espaço ocupado. Através de um programa, baixado da Internet, ele conseguiu gerar o seguinte arquivo, chamado "usuarios.txt":

alexandre       456123789
anderson        1245698456
antonio         123456456
carlos          91257581
cesar           987458
rosemary        789456125

Neste arquivo, o nome do usuário possui 15 caracteres. A partir deste arquivo, você deve criar um programa que gere um relatório, chamado "relatório.txt", no seguinte formato:

ACME Inc.               Uso do espaço em disco pelos usuários
------------------------------------------------------------------------
Nr.  Usuário        Espaço utilizado     % do uso

1    alexandre       434,99 MB             16,85%
2    anderson       1187,99 MB             46,02%
3    antonio         117,73 MB              4,56%
4    carlos           87,03 MB              3,37%
5    cesar             0,94 MB              0,04%
6    rosemary        752,88 MB             29,16%

Espaço total ocupado: 2581,57 MB
Espaço médio ocupado: 430,26 MB

O arquivo de entrada deve ser lido uma única vez, e os dados armazenados em memória, caso sejam necessários, de forma a agilizar a execução do programa. A conversão da espaço ocupado em disco, de bytes para megabytes deverá ser feita através de uma função separada, que será chamada pelo programa principal. O cálculo do percentual de uso também deverá ser feito através de uma função, que será chamada pelo programa principal.


Exercícios de Sequências - Listas, Tuplas e Dicionários

Chegado o fim da nossa seção de Sequências em Python, vamos propor alguns exercícios.

Leia também:
Obter certificado do curso (para trabalhar como programador Python)
Obter apostila Python Progressivo (download do PDF)


Lista de Exercícios de Python


  1. Faça um Programa que leia um vetor de 5 números inteiros e mostre-os.
  2. Faça um Programa que leia um vetor de 10 números reais e mostre-os na ordem inversa.
  3. Faça um Programa que leia 4 notas, mostre as notas e a média na tela.
  4. Faça um Programa que leia um vetor de 10 caracteres, e diga quantas consoantes foram lidas. Imprima as consoantes.
  5. Faça um Programa que leia 20 números inteiros e armazene-os num vetor. Armazene os números pares no vetor PAR e os números IMPARES no vetor impar. Imprima os três vetores.
  6. Faça um Programa que peça as quatro notas de 10 alunos, calcule e armazene num vetor a média de cada aluno, imprima o número de alunos com média maior ou igual a 7.0.
  7. Faça um Programa que leia um vetor de 5 números inteiros, mostre a soma, a multiplicação e os números.
  8. Faça um Programa que peça a idade e a altura de 5 pessoas, armazene cada informação no seu respectivo vetor. Imprima a idade e a altura na ordem inversa a ordem lida.
  9. Faça um Programa que leia um vetor A com 10 números inteiros, calcule e mostre a soma dos quadrados dos elementos do vetor.
  10. Faça um Programa que leia dois vetores com 10 elementos cada. Gere um terceiro vetor de 20 elementos, cujos valores deverão ser compostos pelos elementos intercalados dos dois outros vetores.

  11. Altere o programa anterior, intercalando 3 vetores de 10 elementos cada.
  12. Foram anotadas as idades e alturas de 30 alunos. Faça um Programa que determine quantos alunos com mais de 13 anos possuem altura inferior à média de altura desses alunos.
  13. Faça um programa que receba a temperatura média de cada mês do ano e armazene-as em uma lista. Após isto, calcule a média anual das temperaturas e mostre todas as temperaturas acima da média anual, e em que mês elas ocorreram (mostrar o mês por extenso: 1 – Janeiro, 2 – Fevereiro, . . . ).
  14. Utilizando listas faça um programa que faça 5 perguntas para uma pessoa sobre um crime. As perguntas são:
    "Telefonou para a vítima?"
    "Esteve no local do crime?"
    "Mora perto da vítima?"
    "Devia para a vítima?"
    "Já trabalhou com a vítima?"
    O programa deve no final emitir uma classificação sobre a participação da pessoa no crime. Se a pessoa responder positivamente a 2 questões ela deve ser classificada como "Suspeita", entre 3 e 4 como "Cúmplice" e 5 como "Assassino". Caso contrário, ele será classificado como "Inocente".
  15. Faça um programa que leia um número indeterminado de valores, correspondentes a notas, encerrando a entrada de dados quando for informado um valor igual a -1 (que não deve ser armazenado). Após esta entrada de dados, faça:
    Mostre a quantidade de valores que foram lidos;
    Exiba todos os valores na ordem em que foram informados, um ao lado do outro;
    Exiba todos os valores na ordem inversa à que foram informados, um abaixo do outro;
    Calcule e mostre a soma dos valores;
    Calcule e mostre a média dos valores;
    Calcule e mostre a quantidade de valores acima da média calculada;
    Calcule e mostre a quantidade de valores abaixo de sete;
    Encerre o programa com uma mensagem;

  16. Utilize uma lista para resolver o problema a seguir. Uma empresa paga seus vendedores com base em comissões. O vendedor recebe $200 por semana mais 9 por cento de suas vendas brutas daquela semana. Por exemplo, um vendedor que teve vendas brutas de $3000 em uma semana recebe $200 mais 9 por cento de $3000, ou seja, um total de $470. Escreva um programa (usando um array de contadores) que determine quantos vendedores receberam salários nos seguintes intervalos de valores:
    $200 - $299
    $300 - $399
    $400 - $499
    $500 - $599
    $600 - $699
    $700 - $799
    $800 - $899
    $900 - $999
    $1000 em diante
    Desafio: Crie ma fórmula para chegar na posição da lista a partir do salário, sem fazer vários ifs aninhados.
  17. 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 em 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. A saída do programa deve ser conforme o exemplo abaixo:
    Atleta: Rodrigo Curvêllo
    Primeiro Salto: 6.5 m
    Segundo Salto: 6.1 m
    Terceiro Salto: 6.2 m
    Quarto Salto: 5.4 m
    Quinto Salto: 5.3 m

    Resultado final:
    Atleta: Rodrigo Curvêllo
    Saltos: 6.5 - 6.1 - 6.2 - 5.4 - 5.3
    Média dos saltos: 5.9 m
  18. Uma grande emissora de televisão quer fazer uma enquete entre os seus telespectadores para saber qual o melhor jogador após cada jogo. Para isto, faz-se necessário o desenvolvimento de um programa, que será utilizado pelas telefonistas, para a computação dos votos. Sua equipe foi contratada para desenvolver este programa, utilizando a linguagem de programação C++. Para computar cada voto, a telefonista digitará um número, entre 1 e 23, correspondente ao número da camisa do jogador. Um número de jogador igual zero, indica que a votação foi encerrada. Se um número inválido for digitado, o programa deve ignorá-lo, mostrando uma breve mensagem de aviso, e voltando a pedir outro número. Após o final da votação, o programa deverá exibir:
    O total de votos computados;
    Os númeos e respectivos votos de todos os jogadores que receberam votos;
    O percentual de votos de cada um destes jogadores;
    O número do jogador escolhido como o melhor jogador da partida, juntamente com o número de votos e o percentual de votos dados a ele.
    Observe que os votos inválidos e o zero final não devem ser computados como votos. O resultado aparece ordenado pelo número do jogador. O programa deve fazer uso de arrays. O programa deverá executar o cálculo do percentual de cada jogador através de uma função. Esta função receberá dois parâmetros: o número de votos de um jogador e o total de votos. A função calculará o percentual e retornará o valor calculado. Abaixo segue uma tela de exemplo. O disposição das informações deve ser o mais próxima possível ao exemplo. Os dados são fictícios e podem mudar a cada execução do programa. Ao final, o programa deve ainda gravar os dados referentes ao resultado da votação em um arquivo texto no disco, obedecendo a mesma disposição apresentada na tela.
    Enquete: Quem foi o melhor jogador?

    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 10
    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 10
    Número do jogador (0=fim): 11
    Número do jogador (0=fim): 10
    Número do jogador (0=fim): 50
    Informe um valor entre 1 e 23 ou 0 para sair!
    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 9
    Número do jogador (0=fim): 0

    Resultado da votação:
    Foram computados 8 votos.
    Jogador Votos           %
    9               4               50,0%
    10              3               37,5%
    11              1               12,5%
    O melhor jogador foi o número 9, com 4 votos, correspondendo a 50% do total de votos.
  19. Uma empresa de pesquisas precisa tabular os resultados da seguinte enquete feita a um grande quantidade de organizações:
    "Qual o melhor Sistema Operacional para uso em servidores?"

    As possíveis respostas são:
    1- Windows Server
    2- Unix
    3- Linux
    4- Netware
    5- Mac OS
    6- Outro
    Você foi contratado para desenvolver um programa que leia o resultado da enquete e informe ao final o resultado da mesma. O programa deverá ler os valores até ser informado o valor 0, que encerra a entrada dos dados. Não deverão ser aceitos valores além dos válidos para o programa (0 a 6). Os valores referentes a cada uma das opções devem ser armazenados num vetor. Após os dados terem sido completamente informados, o programa deverá calcular a percentual de cada um dos concorrentes e informar o vencedor da enquete. O formato da saída foi dado pela empresa, e é o seguinte:

    Sistema Operacional     Votos   %
    -------------------     -----   ---
    Windows Server           1500   17%
    Unix                     3500   40%
    Linux                    3000   34%
    Netware                   500    5%
    Mac OS                    150    2%
    Outro                     150    2%
    -------------------     -----
    Total                    8800

    O Sistema Operacional mais votado foi o Unix, com 3500 votos, correspondendo a 40% dos votos.
  20. As Organizações Tabajara resolveram dar um abono aos seus colaboradores em reconhecimento 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.
    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:
    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 salário de cada funcionário, juntamente com o valor do abono;
    O número total de funcionário processados;
    O valor total a ser gasto com o pagamento do abono;
    O número de funcionário que receberá o valor mínimo de 100 reais;
    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: 1000
    Salário: 300
    Salário: 500
    Salário: 100
    Salário: 4500
    Salário: 0

    Salário    - Abono   
    R$ 1000.00 - R$  200.00
    R$  300.00 - R$  100.00
    R$  500.00 - R$  100.00
    R$  100.00 - R$  100.00
    R$ 4500.00 - R$  900.00

    Foram processados 5 colaboradores
    Total gasto com abonos: R$ 1400.00
    Valor mínimo pago a 3 colaboradores
    Maior valor de abono pago: R$ 900.00
  21. Faça um programa que carregue uma lista com os modelos de cinco carros (exemplo de modelos: FUSCA, GOL, VECTRA etc). Carregue uma outra lista com o consumo desses carros, isto é, quantos quilômetros cada um desses carros faz com um litro de combustível. Calcule e mostre:
    O modelo do carro mais econômico;
    Quantos litros de combustível cada um dos carros cadastrados consome para percorrer uma distância de 1000 quilômetros e quanto isto custará, considerando um que a gasolina custe R$ 2,25 o litro. Abaixo segue uma tela de exemplo. O disposição das informações deve ser o mais próxima possível ao exemplo. Os dados são fictícios e podem mudar a cada execução do programa.
    Comparativo de Consumo de Combustível

    Veículo 1
    Nome: fusca
    Km por litro: 7
    Veículo 2
    Nome: gol
    Km por litro: 10
    Veículo 3
    Nome: uno
    Km por litro: 12.5
    Veículo 4
    Nome: Vectra
    Km por litro: 9
    Veículo 5
    Nome: Peugeout
    Km por litro: 14.5

    Relatório Final
     1 - fusca           -    7.0 -  142.9 litros - R$ 321.43
     2 - gol             -   10.0 -  100.0 litros - R$ 225.00
     3 - uno             -   12.5 -   80.0 litros - R$ 180.00
     4 - vectra          -    9.0 -  111.1 litros - R$ 250.00
     5 - peugeout        -   14.5 -   69.0 litros - R$ 155.17
    O menor consumo é do peugeout.
  22. Sua organização acaba de contratar um estagiário para trabalhar no Suporte de Informática, com a intenção de fazer um levantamento nas sucatas encontradas nesta área. A primeira tarefa dele é testar todos os cerca de 200 mouses que se encontram lá, testando e anotando o estado de cada um deles, para verificar o que se pode aproveitar deles.
    Foi requisitado que você desenvolva um programa para registrar este levantamento. O programa deverá receber um número indeterminado de entradas, cada uma contendo: um número de identificação do mouse o tipo de defeito:
    necessita da esfera;
    necessita de limpeza; a.necessita troca do cabo ou conector; a.quebrado ou inutilizado Uma identificação igual a zero encerra o programa. Ao final o programa deverá emitir o seguinte relatório:
    Quantidade de mouses: 100

    Situação                        Quantidade              Percentual
    1- necessita da esfera                  40                     40%
    2- necessita de limpeza                 30                     30%
    3- necessita troca do cabo ou conector  15                     15%
    4- quebrado ou inutilizado              15                     15%
  23. A ACME Inc., uma empresa de 500 funcionários, está tendo problemas de espaço em disco no seu servidor de arquivos. Para tentar resolver este problema, o Administrador de Rede precisa saber qual o espaço ocupado pelos usuários, e identificar os usuários com maior espaço ocupado. Através de um programa, baixado da Internet, ele conseguiu gerar o seguinte arquivo, chamado "usuarios.txt":
    alexandre       456123789
    anderson        1245698456
    antonio         123456456
    carlos          91257581
    cesar           987458
    rosemary        789456125
    Neste arquivo, o nome do usuário possui 15 caracteres. A partir deste arquivo, você deve criar um programa que gere um relatório, chamado "relatório.txt", no seguinte formato:

    ACME Inc.               Uso do espaço em disco pelos usuários
    ------------------------------------------------------------------------
    Nr.  Usuário        Espaço utilizado     % do uso

    1    alexandre       434,99 MB             16,85%
    2    anderson       1187,99 MB             46,02%
    3    antonio         117,73 MB              4,56%
    4    carlos           87,03 MB              3,37%
    5    cesar             0,94 MB              0,04%
    6    rosemary        752,88 MB             29,16%

    Espaço total ocupado: 2581,57 MB
    Espaço médio ocupado: 430,26 MB
    O arquivo de entrada deve ser lido uma única vez, e os dados armazenados em memória, caso sejam necessários, de forma a agilizar a execução do programa. A conversão da espaço ocupado em disco, de bytes para megabytes deverá ser feita através de uma função separada, que será chamada pelo programa principal. O cálculo do percentual de uso também deverá ser feito através de uma função, que será chamada pelo programa principal.
  24. Faça um programa que simule um lançamento de dados. Lance o dado 100 vezes e armazene os resultados em um vetor . Depois, mostre quantas vezes cada valor foi conseguido. Dica: use um vetor de contadores(1-6) e uma função para gerar numeros aleatórios, simulando os lançamentos dos dados.

Módulo os : Caminhos, Endereços, Pastas e Diretórios

Neste Tutorial de Python, vamos te ensinar melhor como trabalhar com os endereços (ou seja, os caminhos, a localização) de arquivos em um sistema operacional, vamos aprender a navegar por pastas, criar diretórios, ver o tamanho dos arquivos, conteúdo de pastas e muito mais.

Tudo isso através do módulo os

Apostila de Python
Certificado do Curso

Acessando Outros Locais: path


Durante nossa seção de Arquivos em Python, sempre que abrimos nossos arquivos, fornecemos apenas o nome do arquivo de texto, para a função open()

Por exemplo, para ler um arquivo cujo nome é teste.txt, fazemos:
  • meuArquivo = open('teste.txt', 'r')

Ok, isso é certo e bonitinho se seu script Python estiver na mesma pasta ou diretório do arquivo de texto. Mas geralmente não é assim que se trabalha com arquivos.

As vezes nosso script está em:
C:\Python\scripts

E você quer hacker seu Windows lendo um arquivo:
C:\System32\teste.txt

E aí, como faz, José?

Simples, ao invoes de 'teste.txt', use o endereço completo (path) do arquivo:
  • meuArquivo = open('C:\\System32\\teste.txt', 'r')
Note que usamos duas barras.
Tente imprimir no Python: print('\')
Vai dar erro.

O motivo é que, para imprimir uma barra \ precisamos fazer \\ (lembra do caractere '\n', pois é, o caractere \ é representado por '\\').

Exercício de Arquivos
Crie um script que crie um arquivo de nome 'virus.txt' em sua área de trabalho, e ao abrir, esteja escrito o texto: "Você foi hackeado. Curso Python Progressivo"

Endereços nos Windows, Linux e Mac

Temos um pequeno 'problema' em relação aos endereços de arquivos e pastas, no que se refere a Linux/Mac e sistemas Windows.

Uma pasta do Windows: C:\Windows\Jose\Python
Um diretório no Linux : /home/user/Maria/Python
Ou seja, as barras são invertidas!

Se tentar acessar um endereço que não existe (como um C: no Linux ou /home no Windows) vai dar erro sim em seus scripts!

Assim, como bons programadores (afinal estudamos pelo curso Python Progressivo), temos que nos preparar para os dois sistemas, pois o Python por si só já tem um conceito de portabilidade e multiplataforma muito fortes, e devemos sempre ter isso em mente: nossos scripts devem rodar em qualquer sistema, até em Android se possível.

Vamos ver um 'truque' pra nos ajudar com isso, é a função os.path.join() do módulo os, que recebe várias strings, com os nomes das pastas e retorna uma string do endereço correto no sistema operacional de cada pessoa.

Por exemplo, se digitar: os.path.join('home', 'user','Maria')
Se estiver no Windows, a função retorna a string: 'home\\user\\Maria'
Se estiver no Linux, retorna a string: 'home//user//Maria'


Caminhos Absolutos e Relativos

Quando você instala um jogo, e quando você for criar seus games e softwares, a primeira coisa que vai pedir ao usuário, é o local no sistema dele onde vai instalar.

Se ele disser: C:\Jogos selecionando lá as janelinhas do explorer, você guarda numa variável:
path = 'C:\\Jogos" e pronto.

Vai criar a pasta de fases como? Assim: os.path.join(path, 'level')
Pronto, te retorna a string com o endereço absoluto completo (desde C:\ atéééé 'level')
E a pasta de personagens? Assim: os.path.join(path,'characters')

E a pasta do personagem 'Geddy'? os.path.join(path,'characters','Geddy')
E assim vai indo.


Note que não importa o que está na variável path, foi o usuário que escreveu.
Ela pode ser desde nada, vazia, até C:\usuario\secreto\porn\virus\nao_mexa'

Não importa, ok?
É por isso que te pedem pra navegar e escolher a pasta que vai querer instalar, pra você fornecer ao programa ou jogo, uma string com o caminho onde vão ficar as pastas e arquivos do soft.

Pasta atual: getcwd()

Rode o seguinte script em Python:

import os
print( os.getcwd() )

O resultado vai ser um endereço de sua máquina.
Qual? O endereço em que você está rodando seu script.

O comando getcwd(), do módulo os (de sistema operacional) retorna o diretório de trabalho atual (current working directory, cwd).

Como mudar de pasta: chdir()

Já o chdir recebe uma string, com um endereço pra onde você deseja ir.
Escolha um local, como sua área de trabalho (não sei que sistema você usa, nem suas pastas internas).

Como eu rodo Linux, vou dar uma passeada na minha pasta onde guardo meus scripts de Python.
Primeiro vou pra lá com chdir, depois printo o endereço de lá com getcwd, vejam meu código:

import os
os.chdir('//home//user//Python')
print( os.getcwd() )

Como ficou o de vocês, pra ir até sua pasta de scripts?

Como criar uma nova pasta: makedirs()

E que tal criar uma pasta, dentro do diretório atual?

Basta fornecer o endereço na formada de string, para a função makedirs()
Vamos criar uma pasta chamada 'arquivos', dentro da minha pasta de scripts Python, lá onde vou guardar meus scripts sobre arquivos, faço assim:

import os
os.makedirs('//home//user//Python//arquivos')

Crie uma sua também.
Depois vá lé e veja sua pasta criada.

Se não tivesse, por exemplo, a pasta 'Python', ele ia criar a 'Python' e depois a 'arquivos'.
Ele vai criando tudo, até criar a pasta existente que você deseja.

Basename e dirname

Se tiver uma string com endereço de um arquivo:
path = 'C:\\Estudo\\Python\\script.py'

E usar a função: os.path.basename(path)
Ele retorna: 'script.py', que é o nome de base.

Já se usar: os.path.dirname(path)
Ele retorna: "C:\\Estudo\\Python' , que é o nome do diretório do arquivo da base.

Se quiser os dois, use a função: os.path.split(path)
Que ela re torna uma tupla com os dois caminhos: ('C:\\Estudo\\Python', 'script.py'), prontinho pra você usar as duas informações.

Como Calcular o tamanho de um arquivo: getsize()

Tem uma função bem bacana no módulo os, chamada getsize, que como o nome diz, pega o tamanho do arquivo.

Se o nome do script que você está programando é arquivos.py, o código abaixo vai printar o tamanho em bytes desse arquivo, em seu sistema operacional:

import os
print( os.path.getsize('arquivos.py') )


Aqui deu 50, e aí?

Exibindo conteúdo de uma pasta ou diretório: listdir()
Se ao invés do endereço de um arquivo, você passar o caminho de uma pasta ou diretório, dessa vez pra função listdir, ele printar na sua tela todo o conteúdo daquela pasta.

Se usar Windows, teste o seguinte código:

import os
print( os.listdir('C:\\Windows\\System32') )

Se usar Linux, teste o seguinte código:

import os
print( os.listdir('//') )

Interessante e simples, não é?
São os arquivos mais importantes de seu sistema operacional, e agora estão sob seu poder...Mwahahahaha.

Não se assuste, programador é assim, tem poderes que os outros não tem.
Tem acesso, tem conhecimento e possibilidades que mais ninguém tem.

Exercício de Arquivos em Python
Crie um script em Python que liste todos os arquivos e diretórios de um determinado caminho, e calcule a soma de todos os arquivos em bytes.

Vamos armazenar os bytes na variável tamanho.
A função listdir  uma lista de nomes de arquivos.

Então, podemos usar um laço for, com uma variável temporária filename, que vai assumir o nome de cada arquivo desses, dessa lista. Usamos a função os.path.join() para obter o endereço completo de cada arquivo e usamos a getsize para obter o tamanho de cada um e somar na variável tamanho.

Veja como ficou nosso código Python


import os

tamanho = 0
for filename in os.listdir('C:\\Windows\\System32'):
    tamanho += os.path.getsize(os.path.join('C:\\Windows\\System32', filename))


print(tamanho)

Módulo OS

Existe ainda, uma série de outras funções e possibilidades, para se trabalhar com pastas e arquivos, pelo fantástico módulo os.

Recomendamos que, sempre que tiver alguma dúvida, consulte a documentação oficial da linguagem de programação Python:
https://docs.python.org/3/library/os.html

Como Processar Arquivos com Laço FOR (looping)

Neste tutorial de Python, vamos aprender como processarcom arquivos usando laços e loopings, nos permitindo trabalhar com grandes quantidades de informação.

Se desejar viver de programação, acesse:
Curso de Python com certificado

Para estudar por este e outros tutoriais offline, veja:
Apostila Python Progressivo

Arquivos e Laço FOR

Até o momento, em nossa seção de Arquivos em Python, trabalhamos com pequenos arquivos de textos, geralmente de duas ou três linhas, até para simplificar e agilizar nossos tutoriais de explicações.

Porém, o normal é termos arquivos grandes, com centenas ou milhares de linhas.

Quando você se tornar um programador Python profissional, vai ter planilhas documentos de texto, PDF e outros tipos de listas (como de funcionários e alunos), de milhares e milhares de linhas.

Então, vamos te mostrar como trabalhar com um arquivo usando o laço FOR.

Primeiro, entre no seguinte link e copie toda a lista:

Salve em um arquivo de texto de nome linguagens.txt

Vamos criar um script que pergunta ao usuário quantos nomes de linguagens de programação ele deseja ver.

Primeiro, criamos um objeto do tipo FILE de nome arquivo, para abrir linguagens.txt
Vamos pegar todo o conteúdo de texto e colocar numa lista de nome linguas, através do método readlines()

Usamos a função len() para contar quantos elementos tem a lista linguas, cujo número de elementos é o número de linhas do arquivo de texto, logo, mostrando o total de linguagens de programação que tem no texto.

Perguntamos ao usuário quantas linguagens ele deseja ver o nome e armazenamos na variável inteira num.

Por fim, entramos no laço FOR.
Vamos percorrer um total de num elementos, onde imprimimos o número de vezes que o usuário escolheu, imprimindo os elementos da lista linguas (usamos o método rstrip() para retirar o caractere de quebra de linha '\n\).

Veja como ficou nosso código:

arquivo = open('linguagens.txt', 'r')
linguas = arquivo.readlines()

print("Existem", len(linguas), "linguagens. Quantas deseja ver?")
num = int(input())

for count in range(num):
    print(str(count+1),":",linguas[count].rstrip('\n'))
    
arquivo.close()

Detectando o final de um arquivo: End of file ''

Tem um probleminha no código anterior.
Experimente digitar 717.

Aguarde tooooda a lista de linguagens de programação ser printada em sua tela e...erro:

Arquivos e loopings - Tutorial de Python - Curso com certificado

Deu erro de list index out of range, ou seja, você tentou acessar um índice da lista que não existe.
A lista tem 716 linguagens/linhas, e você tentou acessar mais que isso.

Poderíamos evitar esse erro fazendo uma coisa bem simples: detectando o final do arquivo.
Agora, ao invés de criar uma lista, vamos imprimir linha por linha do arquivo, através do método readline(), que lê uma linha por vez e retorna essa string, e armazena na variável linha que criamos.

Vamos usar o mesmo laço FOR pra imprimir o número de linguagens que o usuário quis ver.
Ao final, quando chega no fim do arquivo, o método readline() retorna uma string vazia.

Uma string vazia é simboliza, simplesmente, por: ''

Ou seja, a cada iteração do loop verificamos o conteúdo de linha.
Se for diferente de string vazia, imprimimos mais uma linha.
Se for vazia, dizemos que chegou no fim do arquivo.

Nosso código Python ficou:

arquivo = open('linguagens.txt', 'r')
num = int(input("Numero de linguagens: "))

for linha in arquivo:
    linha = arquivo.readline()

    if linha != '':
        print(linha.rstrip('\n'))
    else:
        print("Fim do arquivo")
    
arquivo.close()

Lendo Arquivos com laço FOR

Os exemplos anteriores foram mais para você aprender como pensa um programador, entender como as coisas funcionam por trás dos panos e te ajudar em lógica, ou seja, de realmente entender o que tá fazendo e o que tá acontecendo quando seu código roda.


Porém, existe uma maneira ainda mais simples de ler um arquivo de texto, sem usar readlines() nem a readline(), simplesmente imprimindo direto da variável do tipo File, e também sem precisar detectar o final de um arquivo.

Sabe onde fizemos:
  • for variavel in range(valor): 

Em vez de range(), basta usar o objeto do tipo File mesmo.
O Python subtende que seu range vai ser as linhas do arquivo.

Fica:
  • for linha in arquivo:

Prontinho.
A cada iteração do loop For o valor de linha é uma linha do arquivo de texto arquivo, que definimos e abrimos anteriormente (com a open()).

Para exibir o número correto de linguagens que o usuário solicitou, vamos usar uma variável para fazer a contagem, a count. O IF imprime uma linha, já quando essa variável passa do valor digitado pelo usuário, cai no ELSE e ele dá um break no laço FOR, terminando a leitura do arquivo.

Veja como ficou nosso código Python:

arquivo = open('linguagens.txt', 'r')
num = int(input("Numero de linguagens: "))
count=0

for linha in arquivo:
    if count<num:
        print(linha.rstrip('\n'))
        count=count+1
    else:
        break

arquivo.close()