Python problem

1
Hello, I got this problem to solve in python but I do not know much about the language, I know C, but I believe that my problem is reading the problem, I received the program without any 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 do not need problem solving, just a guide.

    
asked by anonymous 28.07.2014 / 17:06

1 answer

2

This is a python executable 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 named exercicio.py , you can call it using:

python exercicio.py

Or (in * NIX environment), simply by using:

./exercicio.py

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

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

That is, in the end all you have to do is implement the functions defined at the beginning of the file, and execute it. If there is a compile error, the compiler will warn you, and if there is any logic error, the test will print Falhou. Esperado: X; Obtido: Y - so you will know where it went wrong, and you can go there to fix it.

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

  • You do not 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 indentation, 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; no for ;
  • You do not need to declare variables before using, nor set their type;
  • No ; at the end of the instructions;
  • A block is not delimited with { } , but with an ident code just below; use : to start a block; Ex.:

    if condição:
        código
    
28.07.2014 / 17:30