Python - Type function in tuples

0

Hello, I'm trying to make a program in Python, which gets a positive integer.

This program should check whether it is integer ( with type ) and whether it is positive . You should return a tuple of integers containing the digits of that number (integer), in the order they appear in the number.

For example:

>>> Insira um numero inteiro positivo: -31 
>>> Insira um numero inteiro positivo: olá 
>>> Insira um numero inteiro positivo: 34501 
(3, 4, 5, 0, 1)

Any ideas, please?

Thank you,

    
asked by anonymous 12.05.2018 / 17:53

1 answer

4

To check if it is integer, we can compare the result of the function type with int :

>>> type(10) == int
True

To check if it is positive, we should see if the given number is greater than 0:

>>> -2 > 0
False
>>> 3 > 0
True

Transforming the number into a tuple with its parts can be done more easily by transforming the number into a string, dividing it and then transforming it back into int:

lista_digitos = []
for digito in str(34501):
    lista_digitos.append(int(digito))
tupla_digitos = tuple(lista_digitos)

Or, in a more concise way with a generative expression:

>>> tupla_digitos = tuple(int(digito) for digito in str(34501))
>>> tupla_digitos
(3, 4, 5, 0, 1)

Putting everything together and matching with input of user:

while True:

    n = input('Insira um numero inteiro positivo: ')

    # Tentamos transformar n em inteiro (entrada original é string).
    # Se não conseguirmos, recomeçamos o loop perguntando novamente.
    try:
        n = int(n)
    except:
        continue

    # Aqui não precisamos mais comparar type com int
    # porque temos certeza de que o programa só chegará
    # nesse ponto se n for int. 
    # Se compararmos type(n) com o n original (logo depois 
    # do input), o resultado nunca será True, já que input
    # retorna uma string.

    if n > 0:
        print(tuple(int(digito) for digito in str(n)))

Result:

Insira um numero inteiro positivo: 123
(1, 2, 3)
Insira um numero inteiro positivo: -123
Insira um numero inteiro positivo: Não número
Insira um numero inteiro positivo: 123485
(1, 2, 3, 4, 8, 5)
    
12.05.2018 / 18:45