Python problem

Asked

Viewed 632 times

1

Hello, I received this problem to solve in python but I do not know much of the language, I know C, but I believe my problem is in reading the problem, I received the program so without any more explanation and maybe someone can help me.

        #!/bin/env python3
        # coding: utf-8

        def dormir(dia_semana, feriado):
            """
            dia_semana é True para dias na semana
            feriado é True nos feriados
            você pode ficar dormindo quando é feriado ou não é dia semana
            retorne True ou False conforme você vá dormir ou não
            """

        def alunos_problema(a_sorri, b_sorri):
            """
            temos dois alunos a e b
            a_sorri e b_sorri indicam se a e b sorriem
            temos problemas quando ambos estão sorrindo ou ambos não estão sorrindo
            retorne True quando houver problemas
            """

        def soma_dobro(a, b):
            """
            dados dois números inteiros retorna sua soma
            porém se os números forem iguais retorna o dobro da soma
            soma_dobro(1, 2) -> 3
            soma_dobro(2, 2) -> 8
            """

        def diff21(n):
            """
            dado um inteiro n retorna a diferença absoluta entre n e 21
            porém se o número for maior que 21 retorna o dobro da diferença absoluta
            diff21(19) -> 2
            diff21(25) -> 8
            dica: abs(x) retorna o valor absoluto de x
            """

        def papagaio(falando, hora):
            """
            temos um papagaio que fala alto
            hora é um parâmetro entre 0 e 23
            temos problemas se o papagaio estiver falando antes da 7 ou depois das 20
            """

        def dez(a, b):
            """
            dados dois inteiros a e b
            retorna True se um dos dois é 10 ou a soma é 10
            """

        def dista10(n):
            """
            seja um inteiro n
            retorna True se a diferença absoluta entre n e 100 ou n e 200
            for menor ou igual a 10
            dista10(93) -> True
            dista10(90) -> True
            dista10(89) -> False
            """

        def apaga(s, n):
            """
            seja uma string s e um inteiro n
            retorna uma nova string sem a posição n
            apaga('kitten', 1) -> 'ktten'
            apaga('kitten', 4) -> 'kittn'
            """

        def troca(s):
            """
            seja uma string s
            se s tiver tamanho <= 1 retorna ela mesma
            caso contrário troca a primeira e última letra
            troca('code') -> 'eodc'
            troca('a') -> 'a'
            troca('ab') -> 'ba'
            """

        # Área de testes: só mexa aqui se souber o que está fazendo!
        acertos = 0
        total = 0 

        def test(obtido, esperado):
            global acertos, total
            total += 1
            if obtido != esperado:
                prefixo = ' Falhou.'
            else:
                prefixo = ' Passou.'
                acertos += 1
            print ('%s Esperado: %s \tObtido: %s' % (prefixo,repr(esperado), 
                repr(obtido)))

        def main():
          print ('Oba! Hoje vou ficar dormindo!')
          test(dormir(False, False), True)
          test(dormir(True, False), False)
          test(dormir(False, True), True)
          test(dormir(True, True), True)

          print ()
          print ('Alunos problema')
          test(alunos_problema(True, True), True)
          test(alunos_problema(False, False), True)
          test(alunos_problema(True, False), False)
          test(alunos_problema(False, True), False)

          print ()
          print ('Soma dobro')
          test(soma_dobro(1, 2), 3)
          test(soma_dobro(3, 2), 5)
          test(soma_dobro(2, 2), 8)
          test(soma_dobro(-1, 0), -1)
          test(soma_dobro(0, 0), 0)
          test(soma_dobro(0, 1), 1)

          print ()
          print ('Diff21')
          test(diff21(19), 2)
          test(diff21(10), 11)
          test(diff21(21), 0)
          test(diff21(22), 2)
          test(diff21(25), 8)
          test(diff21(30), 18)

          print ()
          print ('Papagaio')
          test(papagaio(True, 6), True)
          test(papagaio(True, 7), False)
          test(papagaio(False, 6), False)
          test(papagaio(True, 21), True)
          test(papagaio(False, 21), False)
          test(papagaio(True, 23), True)
          test(papagaio(True, 20), False)

          print ()
          print ('Dez')
          test(dez(9, 10), True)
          test(dez(9, 9), False)
          test(dez(1, 9), True)
          test(dez(10, 1), True)
          test(dez(10, 10), True)
          test(dez(8, 2), True)
          test(dez(8, 3), False)
          test(dez(10, 42), True)
          test(dez(12, -2), True)

          print ()
          print ('Dista 10')
          test(dista10(93), True)
          test(dista10(90), True)
          test(dista10(89), False)
          test(dista10(110), True)
          test(dista10(111), False)
          test(dista10(121), False)
          test(dista10(0), False)
          test(dista10(5), False)
          test(dista10(191), True)
          test(dista10(189), False)
          test(dista10(190), True)
          test(dista10(200), True)
          test(dista10(210), True)
          test(dista10(211), False)
          test(dista10(290), False)

          print ()
          print ('Apaga')
          test(apaga('kitten', 1), 'ktten')
          test(apaga('kitten', 0), 'itten') 
          test(apaga('kitten', 2), 'kiten') 
          test(apaga('kitten', 4), 'kittn')
          test(apaga('Hi', 0), 'i')
          test(apaga('Hi', 1), 'H')
          test(apaga('code', 0), 'ode')
          test(apaga('code', 1), 'cde')
          test(apaga('code', 2), 'coe')
          test(apaga('code', 3), 'cod')
          test(apaga('chocolate', 8), 'chocolat')

          print ()
          print ('Troca letras')
          test(troca('code'), 'eodc')       
          test(troca('a'), 'a')
          test(troca('ab'), 'ba')
          test(troca('abc'), 'cba')
          test(troca(''), '')
          test(troca('Chocolate'), 'ehocolatC')
          test(troca('nythoP'), 'Python')
          test(troca('hello'), 'oellh')



        if __name__ == '__main__':
            main()
            print("\n%d Testes, %d Ok, %d Falhas: Nota %.1f" %(total, acertos,
             total-acertos, float(acertos*10)/total))
            if total == acertos:
                print("Parabéns, seu programa rodou sem falhas!")

Reminder, I don’t need problem solving, just a guide.

  • 1

    I have the impression that your problem is precisely to implement what is described in each of the functions and keep the tests to verify that they are correct.

1 answer

2


This is an executable python file (in the sense that it can be run. Obviously, it is a source file. A script, if you prefer). If it is in a file called exercicio.py, you can call him using:

python exercicio.py

Or (in *NIX) environment, simply using:

./exercicio.py

(Assuming Python 3 is present on the system, in the given path).

The final part of the file - underneath where it says "Testing area: only move here if you know what you’re doing!" - is exactly what you are saying: a part of the program that is not for you to mess with. This part is responsible for testing the functions defined at the beginning of the file, these yes of your responsibility.

That is, in the end all you need to do is implement the functions set at the beginning of the file, and run it. If there is any build error, the compiler will warn, and if there is any logic error, the test will print Falhou. Esperado: X; Obtido: Y - so that you’ll know where you went wrong, and you can go and fix it.

For the rest, it is learning the syntax and semantics of Python. Some tips for those arriving in Python coming from C:

  • No need to remove the strings that describe the problem - in Python they are called "docstrings", and serve to document what the function does; write your code just below them (respecting identation, of course);
  • True and False write anyway, with uppercase initials;
  • Boolean operators - which in C are !, && and || - in Python are not, and and or;
  • Normal arithmetic;
  • return normal;
  • The if, else, while etc have no parentheses involving the conditions; there is no for;
  • No need to declare variables before using, nor establish their type;
  • Without ; at the end of the instructions;
  • A block is not bounded by { }, but with a code indented just below; use : to start a block; Ex.:

    if condição:
        código
    
  • etc (if you are studying Python, much of what I said here you already knew)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.