Как найти одинаковые цифры в числе питон

Написал программу, по нахождению одинаковых цифр в числе. Не могу найти ошибку
upd нужно просто проверить есть ли повторяющиеся цифры или нет.

x = int(input('Введите число:'))

def array(x):
    global a
    a = []
    while x > 0:
        b = x % 10
        a.append(b)
        x //= 10
        return list(reversed(a))


print(array(x))
for i in range(len(a)):
    if a[i] == a[i+1]:
        print('да')
        break
    else:
        print("нет")

задан 18 мар 2021 в 6:48

Xlemon5's user avatar

1

У вас цикл while завершается на первой итерации. Уберите отступ перед return.

Вторая ошибка заключается в том, что у вас цикл for выполняется len(a) раз. Поэтому на последней итерации a[i+1] приведет к исключению IndexError. Используйте цикл до len(a) - 1.

Ну и сам алгоритм сравнения чисел неверный. Для числа 121 вы не найдете совпадений, т.к. 1 != 2 и 2 != 1. Можно сравнить длину множества от a с длиной a. Множество содержит только уникальные элементы последовательности, поэтому, если длины разные, то можно сделать вывод, что какое-то число повторяется.

Избавьтесь от глобальных переменных.

def array(x):
    nums = []
    while x > 0:
        b = x % 10
        nums.append(b)
        x //= 10
    return list(reversed(nums))


x = int(input('Введите число: '))
a = array(x)
print('Да' if len(set(a)) != len(a) else 'Нет')

ответ дан 18 мар 2021 в 6:59

ioprst's user avatar

ioprstioprst

1,2187 серебряных знаков17 бронзовых знаков

Можно решить вопрос просто стандартными структурами. Построить список со всеми символами числа, потом множество этих символов (удалит дубли), если длина этих двух переменных не равна то, очевидно, есть дубли. Предварительно можно проверить, что если кол-во символов в списке больше 10 (столько всего есть цифр) то, очевдно, цифры повторяются.

def double_exist(number: int) -> bool:
    list_number = [s for s in str(number)]
    if len(list_number) > 10:
        return True

    set_number = set(list_number)
    if len(list_number) != len(set_number):
        return True
    return False


number = int(input('Введите число: '))

if double_exist(number):
    print('Да')
else:
    print('Нет')

ответ дан 18 мар 2021 в 11:00

asanisimov's user avatar

asanisimovasanisimov

1,4564 серебряных знака12 бронзовых знаков

3

Improve Article

Save Article

Like Article

  • Read
  • Discuss
  • Improve Article

    Save Article

    Like Article

    Given a positive integer N, the task is to check whether all the digits of the given integer N are the same or not. If found to be true, then print Yes. Otherwise, print No.

    Examples:

    Input: N = 222
    Output: Yes

    Input: N = 232
    Output: No

    Naive Approach: The simplest approach to solve the given problem is to iterate over all the digits of the given number N and if there exists any distinct digit then print Yes. Otherwise, print No.

    Below is the implementation of the above approach:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    string checkSameDigits(int N)

    {

        int digit = N % 10;

        while (N != 0)

        {

            int current_digit = N % 10;

            N = N / 10;

            if (current_digit != digit)

            {

                return "No";

            }

        }

        return "Yes";

    }

    int main()

    {

        int N = 222;

        cout << (checkSameDigits(N));

        return 0;

    }

    Java

    import java.io.*;

    class GFG {

        public static String checkSameDigits(int N)

        {

            int digit = N % 10;

            while (N != 0) {

                int current_digit = N % 10;

                N = N / 10;

                if (current_digit != digit) {

                    return "No";

                }

            }

            return "Yes";

        }

        public static void main(String args[])

            throws IOException

        {

            int N = 222;

            System.out.println(

                checkSameDigits(N));

        }

    }

    Python3

    def checkSameDigits(N) :

        digit = N % 10;

        while (N != 0) :

            current_digit = N % 10;

            N = N // 10;

            if (current_digit != digit) :

                return "No";

        return "Yes";

    if __name__ == "__main__" :

        N = 222;

        print(checkSameDigits(N));

    C#

    using System;

    class GFG {

        static string checkSameDigits(int N)

        {

            int digit = N % 10;

            while (N != 0) {

                int current_digit = N % 10;

                N = N / 10;

                if (current_digit != digit) {

                    return "No";

                }

            }

            return "Yes";

        }

        public static void Main()

        {

            int N = 222;

            Console.Write(checkSameDigits(N));

        }

    }

    Javascript

    <script>

    function checkSameDigits(N)

    {

        var digit = N % 10;

        while (N != 0)

        {

            var current_digit = N % 10;

            N = parseInt(N / 10);

            if (current_digit != digit)

            {

                return "No";

            }

        }

        return "Yes";

    }

        var N = 222;

        document.write(checkSameDigits(N));

    </script>

    Time Complexity: O(log10N)
    Auxiliary Space: O(1)

    Efficient Approach: The above approach can also be optimized by forming another number, say M of the same length of the given number N with the rightmost digit of N assuming N has all same digits and then comparing it with N. Now, M is of type (K*111….), where K is any digit from N.

    Now to create the number M consisting of the only 1s, the sum of a Geometric Progression can be used as illustrated for the count of digits as 3:

    Consider the first term(say a) as 1 and the common ratio(say r) as 10. Now for the value count of digits(say D) as 3 the sum of Geometric Progression is given by:

    => Sum = frac{a*(r^D - 1)}{r - 1}

    => Sum =  frac{1*(10^3 - 1)}{10 - 1}

    => Sum = frac{999}{9}

     -> Sum = 111

    From the above observations, generate the number M and check if K*M is the same as the N or not. If found to be true, then print Yes. Otherwise, print No.

    Below is the implementation of the above approach:

    C++

    #include <bits/stdc++.h>

    using namespace std;

    string checkSameDigits(int N)

    {

        int length = int(log10(N)) + 1;

        int M = (int(pow(10, length)) - 1) / (10 - 1);

        M *= N % 10;

        if (M == N)

            return "Yes";

        return "No";

    }

    int main()

    {

        int N = 222;

        cout << checkSameDigits(N);

    }

    Java

    import java.io.*;

    class GFG {

        public static String checkSameDigits(int N)

        {

            int length = ((int)Math.log10(N)) + 1;

            int M = ((int)Math.pow(10, length) - 1)

                    / (10 - 1);

            M *= N % 10;

            if (M == N)

                return "Yes";

            return "No";

        }

        public static void main(String args[])

            throws IOException

        {

            int N = 222;

            System.out.println(

                checkSameDigits(N));

        }

    }

    Python3

    import math

    def checkSameDigits(N) :

        length = int(math.log10(N)) + 1;

        M = (int(math.pow(10, length)) - 1)// (10 - 1);

        M *= N % 10;

        if (M == N) :

            return "Yes";

        return "No";

    if __name__ == "__main__" :

        N = 222;

        print(checkSameDigits(N));

    C#

    using System;

    class GFG {

        public static String checkSameDigits(int N)

        {

            int length = ((int)Math.Log10(N)) + 1;

            int M = ((int)Math.Pow(10, length) - 1) / (10 - 1);

            M *= N % 10;

            if (M == N)

                return "Yes";

            return "No";

        }

        public static void Main()

        {

            int N = 222;

            Console.WriteLine(checkSameDigits(N));

        }

    }

    Javascript

    <script>

    function checkSameDigits(N)

        {

            var length = (Math.log10(N)) + 1;

            var M = (Math.pow(10, length) - 1)

                    / (10 - 1);

            M *= N % 10;

            if (M = N)

                return "Yes";

            return "No";

        }

    var N = 222;

    document.write(checkSameDigits(N));

    </script>

     Time Complexity: O(logN)
    Auxiliary Space: O(1) 

    Last Updated :
    01 Nov, 2022

    Like Article

    Save Article

    На вход получаем два числа, 1000 и 2600. Необходимо вывести все числа с тремя одинаковыми числами (не используя списки). Начал как — то так, но закончить не могу…. Как посчитать одинаковые цифры и вывести числа?

    num_1 = int(input(‘Введите первое число: ‘))
    num_2 = int(input(‘Введите второе число: ‘))
    count = 0

    for i in range(number1, number2 + 1, 1):
    i = str(i)
    for num in ……..:
    if num == …………:
    ……………………..


    • Вопрос задан

      10 мар.

    • 447 просмотров

    (Ответ сгенерирован искусственным интеллектом!)
    Вы можете решить эту задачу, преобразовав каждое число в строку, а затем использовать метод count() для подсчета количества вхождений каждой цифры. Затем можно проверить, есть ли у числа три одинаковых цифры, используя условие if. Например:

    num_1 = 1000
    num_2 = 2600
    
    for i in range(num_1, num_2 + 1):
        s = str(i)
        for c in s:
            if s.count(c) == 3:
                print(i)
                break

    Здесь мы проходимся по каждому числу i в диапазоне от num_1 до num_2, преобразуя его в строку s. Затем мы проходимся по каждой цифре c в строке s, и если c встречается в строке s три раза, мы выводим число i и переходим к следующему числу. Обратите внимание, что мы используем оператор break, чтобы выйти из цикла, когда мы находим число с тремя одинаковыми цифрами, потому что дальнейший поиск в этом числе бессмысленен.

    Пригласить эксперта

    Составь коллекцию, в которой будет храниться набор пар: цифра и сколько раз она встретилась. Лучше всего подойдёт словарь.
    Дальше просто перебери элементы словаря, если есть элемент, у которого значение равно 3, значит, число подходит.

    Совет: посмотри в сторону collections.Counter.

    Можно попробовать решить обратную зачачу. Генерировать все с 3 одинаковыми.

    Например.

    111x = генератор для последовательности 1111,1112,1113....1119
    11x1 = для 1111, 1121,1131....

    А потом — отфильтровать те которые не заходят в заявленный диапазон.


    • Показать ещё
      Загружается…

    25 мая 2023, в 22:01

    2000 руб./за проект

    25 мая 2023, в 22:00

    500 руб./за проект

    25 мая 2023, в 20:52

    2500 руб./за проект

    Минуточку внимания

    0 / 0 / 0

    Регистрация: 07.04.2020

    Сообщений: 66

    1

    Есть ли в числе совпадающие цифры

    13.10.2020, 08:55. Показов 13269. Ответов 3


    Студворк — интернет-сервис помощи студентам

    Пользователь вводит четырёхзначное число. Программа выводит 1 , если в числе есть совпадающие цифры, иначе — любое другое число.



    0



    Programming

    Эксперт

    94731 / 64177 / 26122

    Регистрация: 12.04.2006

    Сообщений: 116,782

    13.10.2020, 08:55

    3

    ioprst

    1303 / 843 / 409

    Регистрация: 12.03.2018

    Сообщений: 2,305

    13.10.2020, 09:37

    2

    Лучший ответ Сообщение было отмечено Рыжий Лис как решение

    Решение

    Python
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    
    n = int(input())
    lst = []
     
    while n != 0:
        n, k = divmod(n, 10)
        if k in lst:
            print(1)
            break
        lst.append(k)
    else:
        print(9999)



    0



    Gdez

    Эксперт Python

    7258 / 4047 / 1780

    Регистрация: 27.03.2020

    Сообщений: 6,874

    13.10.2020, 09:52

    3

    Или так

    Python
    1
    
    print((1 if len(set(input())) < 4 else 1234567890))



    0



    Рыжий Лис

    Просто Лис

    Эксперт Python

    5092 / 3259 / 1008

    Регистрация: 17.05.2012

    Сообщений: 9,551

    Записей в блоге: 9

    13.10.2020, 10:00

    4

    Python
    1
    2
    3
    4
    5
    6
    
    >>> int(len(set(input())) != 4)
    1124
    1
    >>> int(len(set(input())) != 4)
    1234
    0



    0



    Первоначальное решение:

    # Программа должна вывести «YES» если 
    #число состоит из одинаковых 
    #цифр и «NO» в противном случае.
    n = int(input())
    lastNum = n % 10
    num = lastNum
    while n != 0 and num == lastNum:
      num = n % 10
      n = n // 10
      if num != lastNum:
        print('NO')
    if num == lastNum:
      print('YES')

    Альтернативные решения

    n = int(input())
    m = n % 10
    answer = 'YES'
    while n != 0:
        if m != n % 10:
            answer = 'NO'
        n = n // 10
    print(answer) 

    и еще

    num = str(input())
    max, min = max(num), min(num)
    if max == min:
        print('YES')
    else:
        print('NO')

    Понравилась статья? Поделить с друзьями:

    Не пропустите также:

  • Как найти скорость тела по графику физика
  • Ui32 exe как исправить
  • Как исправить запись в трудовой другому работодателю
  • Кировоградская 13а мфц как найти
  • Как найти разность площадей по рисунку

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии