·

Engenharia Mecânica ·

Introdução à Lógica e Programação

Send your question to AI and receive an answer instantly

Ask Question

Preview text

Motivação Suponha que você precisa ler 5 números e escrevêlos na ordem inversa Lê 5 números a b c d e mapfloat inputsplit Imprime na ordem inversa printe printd printc printb printa E se fossem 10 mil números Problema Listas Listas Uma lista é um tipo de dados que armazena diversos valores elementos da lista Uma lista pode conter 0 1 ou mais elementos Uma lista com 0 elementos é chamada de lista vazia É possível adicionar ou remover elementos a uma lista Uma lista pode misturar elementos de diferentes tipos Por exemplo uma lista pode conter uma string e um número inteiro Inicialização Uma lista é representada por colchetes contendo elementos separados por vírgulas Exemplos vazia notas 98 75 83 nomes Fulano Sicrana Beltrana x notas nomes usuarios usuario senha admin 123 Use o operador para criar uma lista maior a partir da repetição dos elementos de uma lista menor x 0 4 printx y a b 2 printy Saída 0 0 0 0 a b a b Inicialização lista com elementos repetidos Use a função lenx para obter o comprimento de uma lista x numeros 2 2 2 2 printlennumeros Comprimento de uma lista Cada elemento da lista possui um índice ou posição que é o primeiro elemento possui índice 0 o segundo elemento possui índice 1 o terceiro elemento possui índice 2 e assim por diante Uma lista L possui tamanho lenL e os índices variam de 0 até lenL 1 Acessando um elemento da lista índices Para acessar um determinado elemento de uma lista use variávelíndice Exemplo x a b c printx0 printx1 printx2 printx3 IndexError list index out of range Acessando um elemento da lista Acessando um elemento da lista atribuição múltipla Se você souber o número de elementos de uma lista você também pode usar uma atribuição com diversas variáveis Exemplo lista 2 4 6 x y z lista Se o número de variáveis do lado esquerdo do símbolo não coincidir com o número de elementos da lista você verá um dos seguintes erros ValueError too many values to unpack ValueError not enough values to unpack Você pode alterar um elemento da lista realizando uma atribuição x a b c x0 Z printx0 printx1 printx2 x3 W IndexError list assignment index out of range Acessando um elemento da lista alterando A função split retorna uma lista de strings Considere a seguinte entrada a b c letras inputsplit printletras printletras0 Funções que retornam lista split O retorno da função map não é uma lista mas pode ser convertido para uma lista através da função list Considere a seguinte entrada 1 2 3 numeros listmapint inputsplit printnumeros printnumeros0 Convertendo map para list O retorno da função range não é uma lista mas pode ser convertido para uma lista através da função list numeros listrange0 10 2 numeros0 99 printnumeros Convertendo range para list Operações sobre listas L1 10 20 L2 30 40 L2append50 Insere 50 no final da lista del L22 Remove elemento no índice 2 L2insert1 10 Insere 10 no índice 1 empurrando os elementos para a frente del L21 Remove elemento no índice 1 puxando os próximos para frente L3 L1 L2 Cria uma nova lista com os elementos de L1 e L2 Sugestão visualize o código rodando no httpspythontutorcom Operações sobre listas Vale a pena estudar outras funções clear extend reverse pop remove Outras operações Há dois tipos de operações Operações que modificam uma lista Operações que criam uma nova lista a partir de listas existentes L1 10 20 L2 30 40 L1extendL2 Modifica L1 inserindo os elementos de L2 no final printL1 x L1 L2 Cria uma nova lista L1 e L2 não são modificadas printx Outras operações Transformando elementos lista 1 2 3 4 5 l2 n 2 for n in lista entrada 4 8 3 l3 intn for n in entrada Filtrando elementos lista 1 4 2 3 4 positivos n for n in lista if n 0 Filtrando e transformando pares n 10 for n in lista if n 2 0 List comprehensions List comprehensions são uma forma compacta de transformar e filtrar elementos de listas Na matemática frequentemente escrevemos conjuntos assim S x X x 0 Q n² n N List comprehensions são inspirados nessa notação matemática Algoritmos usando listas Listas são frequentemente usadas em conjunto com estruturas de repetição sobretudo o for Algoritmos com listas numeros 5 3 8 1 for n in numeros printn Dada uma lista de números imprime um número em cada linha Lê palavras e imprime uma em cada linha com índice itens inputsplit for i in rangelenitens printi 1 itensi Entrada Saída a b c 1 a 2 b 3 c itens inputsplit for i item in enumerateitens printi 1 item Lê palavras e imprime uma em cada linha com índice alternativa Entrada Saída a b c 1 a 2 b 3 c enumerate retorna uma lista de pares índicevalor Lê palavras e imprime uma sim uma não itens inputsplit for i in range0 lenitens 2 printitensi Entrada Saída a b c d e f a c e Lê palavras e imprime na ordem inversa itens inputsplit for i in rangelenitens 1 1 1 printitensi Entrada Saída a b c c b a Lê palavras e imprime na ordem inversa alternativa itens inputsplit for item in reverseditens printitem Entrada Saída a b c c b a Criar uma sublista somente com números pares todos mapint inputsplit pares for n in todos if n 2 0 paresappendn printpares Criar uma sublista somente com números pares list comprehension todos intx for x in inputsplit pares n for n in todos if n 2 0 printpares qtdavaliacoespornota 0 6 notas mapint inputsplit for nota in notas qtdavaliacoespornotanota 1 for nota in range1 6 qtd qtdavaliacoespornotanota printNota nota qtd Contagem de avaliações Em uma loja de livros usuários podem avaliar um livro com 1 2 3 4 ou 5 estrelas nota Entrada notas dadas a um livro separadas por espaço Saída número de avaliações recebidas com 1 estrela 2 estrelas etc Entrada Saída 1 5 4 3 3 4 2 Nota 1 1 Nota 2 1 Nota 3 2 Nota 4 2 Nota 5 1 Note que neste problema a nota é usada por índice da lista os valores da lista são a contagem N intinput nomes inputsplit notas floatx for x in inputsplit for i in rangeN printnomesi notasi Duas listas Considere uma turma com N alunos cada um com um nome e uma nota Entrada 1ª linha quantidade N de alunos 2ª linha nomes dos alunos separados por espaço somente primeiro nome 3ª linha notas dos alunos separadas por espaço Saída em cada linha nome do aluno e sua nota separados por espaço Entrada Saída 2 Fulano Sicrana 80 90 Fulano 80 Sicrana 90 nota floatinput if nota 90 printA elif nota 70 printB elif nota 50 printC elif nota 45 printD else printF Simplificando programas com múltiplos ifs Considere o seguinte programa que converte uma nota entre 00 e 100 em um conceito A B C D F nota floatinput limites 90 70 50 45 00 conceitos A B C D F for i in rangelenlimites if nota limitesi printconceitosi break Simplificando programas com múltiplos ifs Considere o seguinte programa que converte uma nota entre 00 e 100 em um conceito A B C D F Podemos substituir essa sequência de ifelifelse por um for em uma duas listas como visto no código ao lado Em Busca da Esmeralda Sonic perdeu uma das Esmeraldas do Caos Se essa jóia cair nas mãos do Dr Eggman ninguém sabe do que ele seria capaz Sonic sabe que a esmeralda está dentro de uma caixa que tem um determinado número Sua tarefa é dada uma sequência de caixas e o número da Esmeralda do Caos determinar se Sonic pode recuperar a Esmeralda Entrada A entrada possui três linhas A primeira linha contém um inteiros N 1 N 1000 representando o número de caixas onde pode estar a Esmeralda do Caos A segunda linha contém uma sequencia de N inteiros n1 n2 nn representando os números das esmeraldas que estão nas caixas sendo 1 ni 1000 Por fim na terceira linha será dado um inteiro C 1 N 1000 que é o número da Esmeralda do Caos Saída A saída consiste em uma única linha contendo um número inteiro O número da Esmeralda do Caos caso ela se encontre na sequência de caixas dada ou 1 caso contrário Entrada Saída 8 1 2 4 3 5 6 7 8 4 4 10 12 1 4 7 9 8 1 2 3 90 6 1 Dr Strange e as Multidimensões Não é novidade para ninguém que o Dr Strange o famoso mago da Marvel tem a incrível habilidade de viajar entre dimensões Mas poucos sabem que realizar tal feito não é tão fácil quanto parece Primeiro Dr Strange precisa pensar na dimensão que ele quer chegar Para isso ele pensa em um número inteiro N 2 indicando o número da dimensão de destino Por exemplo se Dr Strange deseja viajar para a sexta dimensão N 6 significa que cada ponto dessa dimensão pode ser especificado por uma sequência de seis números s n1n2n3n4n5n6 Assim se Dr Strange deseja viajar para a Nésima dimensão cada ponto dessa dimensão pode ser especificado por uma sequência de N números s n1 n2 nn onde ni é um número real qualquer para 1 i n O próximo passo é mais complicado Escolhida a dimensão Dr Strange escolhe o ponto dessa dimensão para onde ele deseja viajar denotado D A questão é que Dr Strange não pode viajar diretamente para D primeiro ele deve viajar para um ponto intermediário e de lá viajar para D Essa operação de viajar para um ponto e depois para o seu destino pode ser especificada como uma soma de sequências na mesma dimensão ou seja dado o destino D e duas sequências u e v todos na dimensão N sua tarefa é descobrir se a soma das duas sequências irá levar Dr Strange para o ponto D A soma de duas sequências é definida da seguinte forma seja u a1 a2 an e v b1 b2 bn u v a1b1 a2b2 an bn Entrada A primeira linha da entrada contém um inteiro N 1 N 1000 Indicando a dimensão para a qual Dr Strange deseja viajar As próximas três linhas indicam respectivamente os N números inteiros de cada uma das sequências u v e do ponto D Saída A saída é composta de uma única linha com as possíveis respostas sem aspas OK se Dr Strange consegue viajar para D dadas as sequências u e v e NOPE caso contrário Entrada Saída 4 1 2 3 4 4 7 9 1 5 9 12 5 OK 3 1 2 4 1 56 22 1 2 4 NOPE Treino CSGO Thiago decidiu treinar em um mapa do jogo de CSGO Neste mapa o objetivo é estourar balões para obter pontos Cada cor de balão tem uma pontuação aleatória única durante o treino ou seja os balões verdes podem ter a pontuação 2 os azuis 4 Porém uma cor aleatória retira pontos ao invés de acumular Como Thiago não sabe a cor a princípio ele deseja saber qual foi sua pontuação ao final do treino Entrada A entrada possui três linhas A primeira linha contém um inteiro N 1 N 1000 representando o número de balões que Thiago estourou A segunda linha contém uma sequência de N inteiros P 1 P 100 representando a pontuação de cada balão estourado Na última linha será dado um inteiro C 1 C 100 que representa a cor pontuação do balão que retira pontos ou seja a pontuação a ser retirada toda vez que um balão daquela cor for estourado Lembrese que os balões de uma mesma cor tem sempre a mesma pontuação Saída A saída consiste em uma única linha contendo a pontuação final Entrada Saída 4 1 3 2 4 2 6 6 1 1 3 1 3 4 3 1 5 1 1 2 2 1 2 1 Ori and the Blind Forest Ori And The Blind Forest conta a história de Ori um espírito materializado que foi adotado por Naru uma espécie de urso que há muito tempo vivia em uma floresta encantada Mas infelizmente ocorre a morte de Naru Ori se vê sozinho na imensidão verde e assume a responsabilidade de explorar a floresta para sobreviver Uma nova versão do jogo está quase completa faltando apenas implementar uma verificação dos valores de XP obtidos por Ori para saber se ele consegue subir de nível Sua tarefa será dizer se Ori conseguiu passar de nível sendo que para isso lhe será dado o XP obtido por ele em cada missão que ele cumpriu e além disso será dada uma pontuação bônus para cada missão onde cada bônus será multiplicado pela pontuação obtida naquela missão Entrada A primeira linha contém um inteiro M 1 M 1000 representando o total de XP necessário para subir de nível A linha seguinte contém um inteiro N 1 N 1000 representando a quantidade de missões cumpridas por Ori em determinado mapa de fase Na linha seguinte serão dados N inteiros X 1 X 100 que representam o XP de cada missão Na última linha serão dados N inteiros B 1 B 100 que representam o bônus que deve ser multiplicado pela pontuação da respectiva missão Ou seja o primeiro valor de bônus dado será multiplicado pelo XP da primeira missão o segundo valor de bônus será multiplicado pelo XP da segunda missão e assim sucessivamente Saída Você deverá imprimir Upou de Nivel se o total de XP for maior ou igual a quantidade M necessária para upar de nível ou Nao foi dessa vez caso contrário Entrada Saída 15 5 1 2 3 4 5 1 1 1 1 1 Upou de Nivel 100 4 10 15 10 5 1 2 3 4 Nao foi dessa vez As Infrações do Flash Autor João Pedro Brito O Flash resolveu tirar férias no Brasil e passou a treinar nas nossas belíssimas estradas Durante suas voltas matinais ele quebrou centenas de limites de velocidade informados em placas de trânsito e não consegue se lembrar de todos já que algumas placas estavam mal sinalizadas ou obstruídas e ele não é conhecido por ter uma super memória Entrada A primeira linha da entrada possui dois inteiros N 1 N 10000 e M 1 M N representando respectivamente a quantidade de placas vistas e a quantidade das últimas placas memorizadas por flash A segunda linha possui N inteiros L 20 L 120 representando os limites de velocidade informados nas placas Placas mal sinalizadas ou obstruídas terão valor igual a 0 Saída A saída consiste nas últimas M placas vistas memorizadas desconsiderando as placas obstruídas ou bloqueadas Entrada Saída 5 3 10 20 30 0 50 20 30 50 6 2 80 50 0 0 0 0 80 50 Em Busca das Esferas do Dragão Bulma quer reunir as 7 esferas do dragão para realizar o seu desejo Para isso ela utilizará o radar do dragão para localizar as esferas mas o radar está mostrando esferas que não deveriam existir Sua tarefa é criar um programa que dado a quantidade e o número de estrelas de cada esfera do dragão encontrada imprima quais das 7 esferas foram encontradas e se é possível invocar shenlong Entrada Na primeira linha será dado um inteiro N 1 N 100 que diz a quantidade de esferas que o radar está mostrando A próxima linha terá N inteiros E 1 E 100 que correspondem ao número de estrelas de cada uma das N esferas Não há esferas repetidas com número de estrelas entre 1 e 7 mas acima disso podem se repetir Saída A saída consiste em 2 linhas sendo que na primeira linha você deverá imprimir em ordem crescente as esferas com 1 a 7 estrelas que foram encontradas A segunda linha terá duas possíveis frases se as 7 esferas foram encontradas devese imprimir Saia Shenlong e realize o meu desejo caso falte alguma das 7 esferas deve imprimir Nao encontramos todas Entrada Saída 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 Saia Shenlong e realize o meu desejo 10 1 3 7 9 10 11 6 4 12 15 1 3 4 6 7 Nao encontramos todas 8 13 15 18 13 1 15 4 7 1 4 7 Nao encontramos todas AMONG US Among us é um jogo que foi lançado em 2018 e tem ganhado bastante destaque na internet durante a quarentena Apesar de à primeira vista não ser um jogo que chame muita atenção existem vários fatores que fazem a experiência de jogar ser muito divertida Em Among Us os jogadores são astronautas que devem realizar uma série de atividades em uma nave desde arrumar a fiação até jogar o lixo fora Só que entre eles há um impostor que tem o objetivo de sabotar essas atividades e matar os outros tripulantes Essa é a dinâmica que serve como palco quando o ápice de cada partida acontece de verdade as discussões em grupo para saber quem é o impostor Nelas os jogadores tripulantes podem exercitar suas habilidades investigativas enquanto o jogador impostor sua habilidade de dissimulação e o melhor desfazer amizades Agora chegou a grande hora para aumentar ainda mais a competitividade do jogo um rank de melhor impostor será lançado e será baseado em quantidade de assassinatos durante as partidas desde a criação da conta no jogo até agora Você como programador foi contratado para fazer um código que receba a informação de quantos jogadores possuem uma conta no jogo a quantidade de assassinatos de cada um e imprima de forma crescente a quantidade de assassinatos de cada jogador Entrada A entrada consiste de duas linhas A primeira contém um inteiro N 1 N 100000 representando a quantidade de jogadores no jogo e a segunda contêm N inteiros X1 X2 XN 0 Xi 1000000 i 1 2 N representando a quantidade de assassinatos de cada um dos N jogadores Saída A saída consiste de N inteiros separados por espaço representando a quantidade de assassinatos cometidos pelos jogadores e apresentados de forma crescente Exemplo de entrada Exemplo de saída 8 29 84 26 1 398 42 4 0 0 1 4 26 29 42 84 398 3 1000000 8 1 1 8 1000000 Obs1 Exigese uma solução que não use ordenação apenas vetores e o que foi aprendido na disciplina até o momento Obs2 É garantido que não há jogadores com a mesma quantidade de assassinatos na entrada do programa