Occurrence of a digit on an integer using Python

Asked

Viewed 325 times

0

Given an integer n, n > 0, and a digit d, 0 <= d <= 9, determine how many times d occurs in n.

def main():
ocorrencia = 0
numeroReal = int(input("Digite um número inteiro positivo:\n"))
numero = numeroReal
digito = int(input("Digite um dígito para que analisemos sua ocorrência no número anteriormente digitado:\n"))
while numero != 0:
    if (numero % 10 == digito):
        ocorrencia += 1
        numero = numero//10
print("O dígito ", digito, "ocorre", ocorrencia, "vezes no número", numeroReal)
main()

The program works when I enter simple numbers, but when I enter 23111432411 to find the occurrence of 1, for example, the program keeps calculating eternally and returns nothing.

3 answers

0


The code that takes the next digit, the division, is conditional, so only if you enter the count does that happen

It is not that it only occurs in large numbers, it occurs in all that there is a number to be counted.

The calculation used to pick up the next digit should be done on all loop passages, not just when there is a count.

def main():
    ocorrencia = 0
    numeroReal = int(input("Digite um número inteiro positivo:\n"))
    numero = numeroReal
    digito = int(input("Digite um dígito para que analisemos sua ocorrência no número anteriormente digitado:\n"))
    while numero != 0:
        if (numero % 10 == digito):
            ocorrencia += 1
        numero = numero // 10
    print("O dígito ", digito, "ocorre", ocorrencia, "vezes no número", numeroReal)
main()

Behold working in the ideone. And in the repl it.. Also put on the Github for future reference.

0

To resolve this question correctly we must pay attention to two important things in the statement.

  1. The possible values of n (n > 0);
  2. The possible values of d (0 <= d <= 9).

Another thing is to realize that n will always be a value inteiro.

In view of these observations we can implement the following code...

def exibi_quantidade_digitos(num, dig):
    """
    Esta função exibe a quantidade de um determinado dígito encontrado em um número.
    :param num: número inteiro.
    :param dig: dígito que será contado.
    :return: quantidade do dígito verificado no número.
    """

    # Contando a quantidade do dígito informado:
    cont = 0
    for c in n:
        if c == d[0]:
            cont += 1
    print(f'\033[32mA quantidade de dígitos "{dig}" encontrada em "{num}" é: {cont}')


# Capturando e tratando o número digitado:
while True:
    try:
        n = int(input('Digite o número: '))
        if n <= 0:
            print('\033[31mValor INVÁLIDO! Digite apenas inteiros maiores que "0"!\033[m')
        else:
            break
    except:
        print('\033[31mValor INVÁLIDO! Digite apenas números inteiros!\033[m')

# Capturando e tratando o dígito digitado:
while True:
    try:
        d = int(input('Digite o dígito que desejas contar: '))
        if (d < 0) or (d > 9):
            print('\033[31mValor INVÁLIDO! Digite apenas inteiros entre "0" e "9"!\033[m')
        else:
            break
    except:
        print('\033[31mValor INVÁLIDO! Digite apenas números inteiros!\033[m')

n = str(n)
d = str(d)
exibi_quantidade_digitos(n, d)

See how the program works on repl it..

Note that in this program I implemented two blocks of error handling and exceptions. Restricting the wrong user typing.

Then the program counts the número de ocorrências of that digit and then display the result.

0

Now that you’ve managed to settle according to the maniero’s response, take a look at the solution below, maybe it serves to complement your studies.

How the user input will be in texto, it would be easier to find a digit inside a text than to convert the input to a inteiro and then perform mathematical operations to find out if the digit is in that integer value, said you could use a loop to count the number of times the type appears in the text the user typed or use the class Counter from the python native library:

Using a loop

def main():
  entrada_usuario = input("Digite um número inteiro positivo:\n")
  digito = input("Digite um dígito para que analisemos sua ocorrência no número anteriormente digitado:\n")

  ocorrencias = 0
  for numero in entrada_usuario:
    if digito == numero:
      ocorrencias += 1

  print("O dígito ", digito, "ocorre", ocorrencias, "vezes no número", entrada_usuario)

Using the Counter class of the Collections package

from collections import Counter

def main():
  entrada_usuario = input("Digite um número inteiro positivo:\n")
  digito = input("Digite um dígito para que analisemos sua ocorrência no número anteriormente digitado:\n")

  contador = Counter(entrada_usuario)
  # supondo que o conteúdo de "entrada_usuario" seja "98876"
  # o conteúdo de "contador" seria Counter({'9': 1, '8': 2, '7': 1, '6': 1})
  # note que a chave é o numero que o usuário digitou e o valor é a quantidade
  # de ocorrências desse digito

  # o método "get" retorna o 0 caso "digito" não seja encontrado em "contador"
  ocorrencias = contador.get(digito, 0)
  print("O dígito ", digito, "ocorre", ocorrencias, "vezes no número", entrada_usuario)

Browser other questions tagged

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