Transcrições
1. Introdução: Bem-vindo ao Python. Muitos projetos Matemática Quiz adição jogo neste curso será a criação de um pequeno jogo de console . O teste aos jogadores. Capacidade de massa. Este curso de mini-projeto é dividido em pedaços de tamanho de método. Literalmente. A maioria das lições centram-se em um único método. Você aprenderá a criar perguntas matemáticas aleatórias. Calcule a resposta para essas perguntas. Crie um loop de jogo que dê uma boa experiência ao usuário e, o
mais importante, como usar várias estruturas de tubulação fundamentais. Então, para quem é esse curso? Bem, na verdade, um par de pessoas diferentes Primeiro, se você tem um conhecimento básico de piedade e python e gostaria de ver a linguagem sendo posta em prática, este curso é para você. É uma excelente maneira de ver como os problemas podem ser quebrados e como resolvê-los usando python. Se você não conhece nenhum Piketon, mas você já está familiarizado com outra língua. Script Java Sea Sharp Taps. Isso realmente não importa. Então seu público-alvo número dois. Se você cair nesta categoria, você terá exposição rápida à sintaxe incomum de Patton. Como alguém que teve exposição a mais de 14 linguagens de programação na última década, isso me faz sentir um pouco velho falo por experiência quando digo que olhar para o código de
outra pessoa em sua nova linguagem e modificá-lo para atender às suas necessidades é um dos maneiras mais rápidas de pegar esse idioma. Isso ocorre porque você começa a ver tantos aspectos que o recurso de aprendizagem tradicional é muitas vezes simplesmente não mostrar para iniciantes. Este também é um bom curso para quem já conhece Pathan, mas gostaria de uma
atualização rápida , então deixe a programação começar.
2. Avaliando Equações: neste dedo intra lição tem que criar um jogo de quiz de matemática usando Python. Vamos criar o núcleo, todo
o projeto. Este é um método chamado calcular Resposta, eo que vai fazer é dado um problema. Vai te devolver. A resposta usará esse método durante todo o projeto, e é muito importante que acertemos. Vamos começar criando um método de esqueleto simples, apenas uma demonstração, que nosso ambiente está funcionando. Esperávamos retornar no, pois esse é o valor padrão e python. Ele faz isso, então está pronto para seguir em frente. Próximo. Vamos adicionar parâmetros. Um método como este vai aceitar todos os componentes de uma questão matemática básica. Ah, lado
esquerdo,
lado direito e um operador como mais ou menos, é colocado em uma declaração de retorno fictício. Temos codificado o operador por agora para manter as coisas simples e mostrar que mudar os valores dos
argumentos realmente tem um efeito. A fim de acompanhar o progresso no futuro, essas declarações de impressões nos informarão quais operações estão se comportando como esperado em uma lição
posterior. Trocará estes por casos de teste reais em vez de apenas impressões digitais. Reparem como todos dão a mesma resposta. Por agora. Vamos corrigir isso com uma simples declaração se mais tarde, você poderia adicionar Ellis, mas não é realmente necessário. Uma comparação de cordas simples dentro do forno. Se Operador for suficiente para agora, as 2 primeiras saídas de se comportar como esperado, a mesma lógica pode ser usada todo o caminho para baixo. Preciso lembrar de mudar cada condicional, e cada operador de retorno e a saída parecem estar corretos. Mas o que acontece quando dado algum tipo de entrada inválida? Digamos que um rosto sorridente ou algo igualmente estranho não faça muito sentido. Então vamos dar-lhe a mesma lógica que seus irmãos apenas indo para duplicar este pedaço de código . Isso deixa a questão de qual é a maneira correta de lidar com insumos. Poderíamos simplesmente retornar uma constante como um zero, mas então ninguém saberá que algo deu errado. Quando isso acontece, também
podemos exibir uma mensagem aérea, mas isso torna a saída feia e pode ser ignorada. A melhor maneira de lidar com algo assim é levantar uma exceção que ele força usa para reconhecer que eles têm um bug e corrigi-lo ou manipulá-lo explicitamente com um try catch . Agora queremos executar este código para verificar duas vezes que são exceção está, de fato, sendo levantada onde deveria estar. E aqui está como lição de casa para esta lição. Tente adicionar uma equação extra. Digite, por exemplo, em expoentes ou potência do operador. Também detecte o problema Aled unhand ao redor da divisão e implemente uma mensagem de erro explícita para quando isso acontece. Então isso conclui a primeira lição de criar um jogo de perguntas matemáticas usando Python. Com sorte, não
fomos muito rápidos, e se deixarmos uma mensagem e verei o que podemos fazer para te ajudar. Então, uma revisão rápida do que foi coberto três pontos principais escrevemos um método de retorno de valor que calcula as respostas para uma pergunta matemática. Usamos ifs para decidir o que vários operadores fizeram, e finalmente aprendemos como levantar uma exceção para que comportamentos indesejáveis pudessem ser tratados rapidamente. Então, na próxima lição, estaremos escrevendo o método do sistema para calcular. Responda. Gerar pergunta. Como sempre, sinta-se à vontade para deixar perguntas ou comentários, e eu farei o meu melhor para resolvê-los
3. Nota lateral — entender alternativas: e agora uma tangente rápida antes de passar para a próxima parte do programa de teste, eu queria demonstrar que há quase sempre outra maneira de codificar algo. Embora uma maneira nem sempre seja melhor do que outra, cada versão geralmente tem seus próprios prós e contras distintos. Vou explicar algumas dessas vantagens e desvantagens usando dois exemplos. Outro benefício de barras laterais como esta é que você será capaz de obter exposição a características
da linguagem que você talvez não sabia que existia. Assim, para a alternativa número um revisa a combinação de funções do Lambda e dicionários a
fim de remover o excesso de instruções if. Se não sabe o que são, tudo bem. E se você sabe o que eles são e como combiná-los assim, então por que você está assistindo este vídeo? Você ouviu um nível superior da faculdade. Esta abordagem de função é agradável por várias razões, na minha opinião, porque é fácil de ler, trivial de estender e não restritiva em relação aos operadores personalizados. Por exemplo, você pode usar a letra l ou literalmente qualquer outra string para representar um logaritmo. Se você quiser experimentar esta versão, compartilhei um link na descrição. Alternativa Número 2 é uma besta totalmente diferente. O mal é algo que a maioria das línguas não tem é um recurso integrado. Javascript e Python são as duas únicas exceções que eu consigo pensar. Dar ive out é essencialmente uma chamada para o intérprete parceiro que diz algo assim . Pegue essa corda, finja que é código, e então me devolva o que for. Pass Evil é seguro neste exemplo, mas apenas porque verificamos contra a lista de operadores legais antes de fazer qualquer coisa. Se não tivéssemos essa verificação, então código arbitrariamente complexo poderia ser injetado aqui, que representa um risco real de segurança. Devido a isso, evocar ambientes completamente desativado mal, o que torna algo a evitar quando possível por razões de compatibilidade. Outra limitação com esta abordagem é que o formato da equação é rigidamente conectado com o que o python julgar enviado taticamente legal, modo que o exemplo de log de antes não poderia ser usado aqui. O único grande profissional de usar o mal é o quão muito, muito curto e legível ele é com essa tangente esperançosamente informativa. Fora do caminho, vamos continuar para a próxima parte da lógica dos testes
4. Como criar perguntas: Olá e bem-vindo à segunda redução principal, criando um jogo de teste de matemática patente. Até agora, aprendemos como calcular o resultado de uma determinada pergunta. Mas isso não é realmente muito útil por si só. Afinal, se você fizer suas perguntas minha mão, você realmente não precisaria de uma calculadora porque você poderia apenas trabalhar danças enquanto você vai junto. Nesta lição, vamos cobrir a geração de perguntas aleatórias usando Python Rand in Method e para o final também mostrará brevemente como o método de resposta cálculo existente da última lição e o recém-criado gerar desta lição pode ser feita para se comunicar uns com os outros, tornando-se algo útil onde havia uma vez no caminho da teoria efêmera, mais sobre a segunda parte na próxima lição, vamos começar. Como sempre, a primeira coisa a fazer é criar o esboço do nosso método alvo. No momento, não
há argumentos óbvios, então vamos deixar isso em branco agora. O objetivo principal do método que tem retornos é algo que precisamos discutir mais. Eu mencionei brevemente antes que gerar questão. É o método do sistema para calcular a resposta. Talvez uma comparação mais adequada seja a do cálculo do produtor e do consumidor. Resposta consome as saídas de gerar pergunta. Isso significa que os valores de retorno aqui devem espelhar a estrutura fora. Qual resposta de cálculo está esperando para receber nesta versão específica? Calcular resposta está esperando três argumentos para números e um operador. Como sempre, existem soluções alternativas, como a passagem de objetos de pergunta. Mas isso é bom o suficiente para o nosso caso de uso simples. Esse é o esqueleto do nosso método completo. Agora vamos remover toda essa feiúra codificada. Corrigir os números com algo mais aleatório é o tipo mais fácil de substituição. Então vamos começar por aí. Esta nova importação significa que, em vez de trazer toda a biblioteca aleatória, queremos apenas acesso ao método de geração de entrevista aleatória que contém i e. rand em. Esta é uma boa maneira de reduzir o barulho em programas maiores, como você não precisa mais dizer Random dot correu em cada vez que você deseja criar um novo
número aleatório , Brandon e espera argumentos e limite superior e inferior 0 a 10 soa como um ponto de
partida para estes. Quando estávamos sobre isso, notei que o primeiro valor de retorno agora está mudando cada vez que este era o
comportamento esperado . Então vamos duplicar a lógica para o número do lado direito. Randomizar o operador é onde as coisas o tornam confuso. Lembre-se, um operador é um de um conjunto muito limitado de caracteres
e, portanto, a biblioteca aleatória não terá nada para nos ajudar, pelo
menos não diretamente como ponto de partida. Podemos listar explicitamente são conjunto de operadores conhecidos como uma string. Em seguida, pergunte a si mesmo. Como escolheríamos exatamente um operador desta coleção? A resposta mais simples é que a rua é tratar. A string é uma lista e usar o aviso de indexação de valor se alterarmos esse valor ou indexar as alterações operadas
retornadas com ele. Para tornar as coisas mais aleatórias, vamos substituir o índice constante por algo mais dinâmico. Usando lógica semelhante é antes que agora temos um valor de índice operador aleatório. Antes de executarmos isto, veja se consegue detectar o problema. Pausa. Agora. Se você quiser tentar por si mesmo, a resposta ficará clara. Se rodarmos este código algumas vezes, não caiu. A razão pela qual caiu foi porque não tivemos cuidado com os limites do índice do operador. Ao contrário da maioria das linguagens, python tem um inclusivo abundam em seu gerador de números aleatórios em vez de
um exclusivo . Eu falo disso porque pode levar a bugs sutis que são super difíceis de replicar e Deepak. A solução mais fácil é apenas subtrair um do limite superior. Os possíveis números gerados agora serão 012 ou três, mas nunca por significado nunca sairão dos limites. Vamos dar uma olhada em uma saída de amostra maior do nosso novo método. Está quase tudo bem, mas aqui está outro problema em potencial. Temos um operador de divisão aqui e um valor do lado direito de zero. Este é um problema porque resulta em divisão por zero. Poderíamos resolver isso simplesmente limitando São perguntas para um em vez de zero, no entanto, que limita artificialmente o que nosso programa pode fazer. Em vez disso, vamos colocar um cheque aqui para que possamos resolver o problema em vez de apenas escondê-lo. O caso de uso que queremos olhar para fora é a divisão por zero, que só ocorre se essas duas condições separadas forem atendidas. Identificar onde o problema ocorre é o primeiro passo. Em seguida, precisamos decidir como realmente corrigi-lo. Não podemos simplesmente levantar uma exceção afinal, isso não é realmente uma solução. Poderíamos acrescentar um ao lado direito, mas isso introduz uma ligeira preferência por questões em que o lado direito é um. Poderíamos voltar a rodar o número completamente, e esta é na verdade a melhor resposta. O único problema com a versão que você está vendo agora é que ainda há uma chance depois que este novo se for feito, que nós obtemos zero novamente. Para evitar que isso aconteça irá substituir o if com um loop while usando a mesma condição. Agora podemos garantir que o RHS terá um valor seguro. Impressionante verificar se esse é o caso. Vamos adicionar um verificado nosso loop de saída para divisão potencial por zero. Em vez de fazer uma verificação visual. Você também pode fazer uso dos valores retornados, ignorando-os em nosso método anterior de cálculo. Responda. Se nada acontecer quando calcular resposta usa nossos valores, você sabe que eles devem estar seguros. O benefício
bônus de verificar como este é que podemos ver nossos dois métodos interagindo antes de darmos lição de casa. Vamos recapitular rapidamente linha por linha. Aqui temos nossa coleção de operadores conhecidos nesta versão, uma string simples. Aqui nós geramos um índice aleatório que pode ser usado com segurança na string acima mencionada. Em seguida, combinamos as duas linhas anteriores e recuperamos o valor final dos operadores. Estas duas linhas estão apenas gerando aleatório inter jizz para uso como os componentes numéricos de nossas duas perguntas. Aqui temos o loop que verifica e impede a divisão por questões zero regenerando o número do lado direito. E finalmente devolvemos tudo o que geramos até agora. Pronto para consumo externo. Certo, hora do
dever de casa. Você vai notar. Há um monte de números codificados aqui. Isto significa que apenas uma gama muito limitada de questões pode ser gerada. Eu quero que você adicione dois novos argumentos limite inferior e acima sobre isso. Permitir que quem chamar nosso método especifique um conjunto alternativo de limites. Por exemplo, você pode ter alguns alunos que precisam aprender sobre números negativos. Ter um limite inferior e superior off menos 10 a 10 em vez de 0 a 10 permitiria que eles
fizessem exatamente isso. Lembre-se, há pelo menos três linhas diferentes onde esses novos argumentos legais precisariam ser usados. O próximo trabalho de casa é um pouco mais complicado. Eu quero que você permita operadores de vários caracteres, como Log ou o poder
de dupla estrela de Pathan . Minha mão para este é que a cadeia de operadores atuais deve talvez ser uma coleção de
ervas índice diferente . Eu sei que a demo no final da parte sobre como mostrar e testar a saída foi feito um pouco rápido, mas isso foi por uma boa razão. Eu juro que sim. Em primeiro lugar, não
era realmente o foco desta lição. O foco foi para ser como gerar de forma confiável perguntas aleatórias seguras. Mas, o mais importante, quase toda essa lógica estará presente no próximo vídeo quando juntarmos tudo o que fizemos até agora para criar o loop principal do jogo. Isso significa que as explicações mais detalhadas ainda estão por vir. Há dois aspectos principais desta lição. Como usar o método aleatório para gerar números aleatórios e selecionar operadores aleatoriamente, e como usar loops para evitar que valores indesejáveis se infiltrem e causem problemas mais tarde. Não se esqueça, se você está preso a algo, deixe um comentário ou envie uma mensagem, e eu farei o meu melhor para ajudar a vê-lo na próxima vez
5. O loop do jogo: uma parada ligeiramente diferente do habitual desta vez, como estamos prestes a escrever o loop principal do jogo, não
temos que criar um método dedicado para ele como costumávamos fazer, embora muito do maior pode ser extraído método de ajuda do dedo do pé para lição de casa se Você quer. Em vez de se preocupar com tipos de argumento e retorno e realçar lógica específica método , abordagem
bem tomada mais semelhante a repetidamente perguntando, O que eu gostaria de fazer ou ver a seguir? Se eu fosse o jogador, a primeira coisa que eu gostaria é um jogador é uma pergunta a ser mostrada para mim, a fim de mostrar pergunta, nós temos que gerar um primeiro aqui. Nós invocamos gerar pergunta da última lição e resultado de armazenamento em uma variável de pergunta para uso posterior. Agora temos uma pergunta que precisa ser mostrada ao usuário. Ah, declaração de
impressão com alguma formatação de string para fazer as coisas agradáveis e bonitas é bom o suficiente por enquanto. Quando estávamos sobre isso, vemos a pergunta exibida ordenadamente. Legal. Agora pergunte a si mesmo novamente, o que eu gostaria de fazer ou ver a seguir? Se eu fosse um jogador, diria que a próxima coisa é me deixar responder sua pergunta por isso. O método de entrada é a única opção real para um programa cônsul. Agora nós demos a pergunta do jogador e restauramos sua resposta. Uma tangente rápida aqui. Observe que ambos exibimos a pergunta e, em seguida, solicitamos ao usuário uma segunda vez para sua entrada. Isto parece desajeitado. Não podemos combinar as duas coisas no reboque? Um. E a resposta é absolutamente e você deveria. Então, a fim de fazer isso, podemos simplesmente cortar a string pergunta colada na chamada de entrada. E, em seguida, quando executá-lo Voila, experiência do usuário
Anita sem solicitações de entrada repetidas. O próximo passo em um jogo como este seria dar feedback ao jogador sobre se ele estava certo ou não para dar esse feedback. Precisamos de duas coisas que ainda não temos. Precisamos saber a resposta correta, e precisamos de um meio de comparar a resposta correta com os jogadores. Responda. Que já temos do passo anterior. Hora de chamar nosso outro método de ajuda calcular. Responda. Temos a resposta correta aqui nesta variável. Então agora precisamos de um meio de comparar os dois tipos diferentes de respostas. Vamos começar com a abordagem ingênua de comparar diretamente os dois quando estávamos quando executamos isso apesar de dar uma resposta correta, ele diz que estávamos errados. Por que faria isso? A resposta é, na verdade, bastante simples. A entrada está retornando uma string, mas calcular resposta está retornando um número. Então, mesmo que os dois valores sejam semelhantes, como você pode ver aqui, eles são muito diferentes aos olhos do seu computador. Se custarmos um lado desta comparação a uma corda, de repente voltamos. É verdade que podemos usar a mesma técnica de fundição em nossa comparação anterior, e agora, quando
colocamos uma resposta correta, nos dizem muito. Ainda há um pequeno problema com esta comparação simples. O que acontece quando você dá ao usuário uma pergunta como nove dividido por sete? Quão preciso um jogador tem que ser? Como uma pergunta como esta é um pouco além, o escopo deste projeto simples irá implementar uma solução no final do vídeo. Dessa forma, aqueles de vocês que querem tentar encontrar uma solução para si mesmos contrite sua lição e aqueles de vocês que só querem ver uma resposta não serão deixados com 1/2 projeto de trabalho por enquanto. Quando o jogador está errado, podemos fazer questão de mostrar-lhes a resposta correta completa. Dessa forma, há menos saber se é um problema de precisão ou se eles estavam realmente errados de volta ao jogo principal, o que o jogo iria querer ver a seguir? Bem, uma única pergunta não é muito divertida. Então, se eu estivesse jogando, gostaria de ver outra pergunta. Este é provavelmente o passo mais fácil de todos. Nós apenas embrulhamos tudo o que fizemos até agora em um loop, por enquanto vamos demonstrá-lo, usando apenas para ele orações. E está fazendo mais de uma pergunta. Então está funcionando. A última coisa que quero ver é a minha pontuação. Para isso, precisaremos de duas coisas. Quantas perguntas havia no total? E quantos desses eu recebi? Correto. Total de perguntas é fácil de adicionar ao que já temos. Nós apenas adicionamos uma constante no início e certificamos que ela é usada pelo loop para determinar quantas perguntas são feitas. Notei que, se mudarmos nossa nova variável, o número total de perguntas feitas muda para corresponder ao segundo pedaço de informação para exibir a pontuação. Quantas vezes foi para jogar correto? Requer cebola, um
pouco mais de esforço para começar com o uso. Não tem respostas corretas, então adicionamos uma variável de dúvida zero no topo. Então há apenas uma vez que esse valor muda, e isso está aqui. Quando as duas tias combinarem com essas duas informações,
podemos escrever uma linha deimpressão como esta onde mostramos ao usuário sua escola. Quando as duas tias combinarem com essas duas informações,
podemos escrever uma linha de E então nós também podemos adicionar uma porcentagem no final para que eles não tenham que resolver isso por si mesmos. E é isso. Bem, quase. Vamos adicionar o método mais flexível de comparar respostas que prometi há pouco tempo . Vou acelerar esta secção para que não tenhas de ver tudo a ser escrito. Enquanto isso, uma explicação rápida. Se subtrairmos uma resposta da outra, independentemente de qual é maior ou correta, e então tornarmos o resultado positivo. Temos a diferença absoluta entre esses dois números, mas como saberemos quando essa diferença é muito grande? Bem, tínhamos um termo de tolerância e comparativo. É que aqui algumas saídas de demonstração para mostrar que ele está funcionando como esperado. Observe como a ordem não importa. Os 1º 2 são muito diferentes um do outro para serem considerados corretos, e o segundo a estar dentro desse intervalo de tolerância. Então eles retornaram verdade. Observe como também podemos mudar a tolerância, e de repente você precisa muito mais ou menos precisão. Com isso ajuda um método feito. Só precisamos substituir a comparação antiga. Vamos executá-lo com nossas novas mudanças e dar-lhe para fechar deliberadamente, mas não completamente
resposta certa . E aí está, um jogo de perguntas mais tolerante. Então, hora do dever de casa. Vamos começar com as coisas simples. Primeiro, eu quero que você altere o programa para que o usuário possa escolher quantas perguntas eles querem responder no início, ou dar-lhes a opção de sair mais cedo para que sua única pontuação no que eles fizeram até agora ou fazer as duas coisas. Se você realmente quiser. E para aqueles de vocês que estão ansiosos para mais de um desafio, você pode tentar mudar este loop de jogo para que, em vez de um jogo cônsul,
você tem um jogo pegajoso você pode usar TK Enter ou qualquer outro módulo u I que você gosta não se sinta mal por Não estou fazendo este. No entanto. Pessoalmente, não gosto de você. Eu trabalho em Python. E isso é que, Ah, jogo de teste de matemática
totalmente funcional escrito a partir do zero e python que você poderia literalmente usar para testar qualquer pessoa conhecimento aritmético.
6. Resumo e feedback e feedback: Então, agora que o programa está pronto, vamos revisar rapidamente as principais estruturas do projeto. Nosso jogo pode resolver perguntas matemáticas usando calcular, responder. Gerar perguntas aleatórias usando Gerar pergunta do lado de uma determinada artérias precisa o suficiente, usando o método é preciso o suficiente e misturar todos os itens acima em um único loop de jogo com interações
riel jogador. Você pode enviar suas próprias versões do jogo como um projeto de curso. Conte-nos sobre quais mudanças você fez e por que, ou como você aborda as diferentes questões de lição de casa. Se você realmente sabe o seu material, tenha um bom fazendo todo o projeto mais orientado a objetos ou apenas para se divertir. Jogue uma rodada de código de golfe e tente encolher o projeto em poucas linhas quanto possível. Obrigado por assistir. Esperamos que tenha gostado de proteger tantos. Com isso em mente, estamos constantemente tentando melhorar nossos cursos para que seu feedback seja inestimável. Sinta-se livre para deixar comentários ou enviar mensagens sobre o que você gostou no que você acha que fizemos melhor. Por exemplo, devo ir mais rápido ou mais devagar? Gostaria de explicações mais ou menos detalhadas? O projeto foi simples, etcetera? Também estamos interessados em saber que tipo de projetos você gostaria de ver a seguir e até a próxima vez, continue codificando