Python - Type function in tuples

Asked

Viewed 152 times

0

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

That program shall verify that it is whole (with the type function) and if it is positive. Should return a thimble of integers containing the digits of that (integer) number in the order in which 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,

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 must see if the given number is greater than 0:

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

Turning the number into a tuple with its parts can be done more easily by turning the number into a string, dividing it and then turning 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 generating expression:

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

Putting it all together and matching input user’s:

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)))

Upshot:

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)

Browser other questions tagged

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