Печать наибольшего числа из заданного ввода

#python #python-3.x

#python #python-3.x

Вопрос:

Я создал код для печати наибольшего числа из заданного ввода (строки), но он действителен только для входных данных, содержащих разные цифры, и выдает ошибку «индекс строки вне диапазона», когда ввод состоит из повторяющихся цифр. Почему так? Примечание: «Концепция списка не может быть использована» Мой код выглядит следующим образом:

 def largest_num(num): 
    nums = ""
    length = len(num)
    while length:
        max_num = num[0]
        for i in num:
            if i > max_num:
                max_num = i
        num = num.replace(max_num,"")
        nums = nums   max_num
        length-=1
    return nums
    
    x = input("Entered number: ")
    a = largest_num(x)
    print(a)
 

Вывод:

Вывод приведенного выше кода

Комментарии:

1. Вы имеете в виду «наибольшую цифру » числа. Попробуйте запустить свой код вручную с помощью бумаги и карандаша и посмотрите, что произойдет, если цифра появится более одного раза.

2. Есть ли проблема с отступом? Это просто опечатка или у вас есть такой код?

3. Пожалуйста, приведите пример ввода, который приводит к сбою вашего кода. Кроме того, пожалуйста, укажите всю ошибку, которую вы получаете (трассировка стека). Он будет содержать ценную информацию о том, что конкретно пошло не так.

4. «из заданного ввода» — они вводят его в виде списка? строка целых чисел?

Ответ №1:

@Husnian Mehdi — в исходном коде ошибка в строке — «num.replace(max_num, «»). После этого вы можете поместить оператор print, чтобы увидеть, что происходит, когда вы вводите число с повторяющимися цифрами: например, ‘454’. Я также изменяю некоторые имена переменных, чтобы сделать их более наглядными. [Подсказка: оператор num.replace() удалил обе дублированные цифры ….!]

 def largest_num(num): 
    ans = ""
    size = len(num)
    
    while size:
        max_digit = num[0]
        
        for n in num[1:]:
            if n > max_digit:
                max_digit = n
        
        ans = ans   max_digit     
        num = num.replace(max_digit, "")
        print(f' num is: {num} now ...')
        
        size -=1  
        print(f' len: {size}')
        
    return ans

x = input("Entered number: ")
 

Комментарии:

1. Большое спасибо вам, я понял ошибку в своем коде. Но можете ли вы также помочь мне исправить ошибку, поскольку я новичок в python и не смог исправить свой код после размышления над ним.

2. Если сообщение может вам помочь, пожалуйста, примите его и проголосуйте за него? Я изучу и свяжусь с вами позже (сейчас занят). Но лучший способ изучить Python — это научиться кодировать его на языке Pythonic, как предлагалось в моих предыдущих сообщениях.

3. Прошу прощения за беспокойство. Конечно, вы можете не торопиться, с моей стороны нет спешки. Но приведенный выше код выдает ту же ошибку «строковый индекс вне диапазона». Вы можете ответить мне, когда будете свободны. С уважением

4. Почему бы не попробовать мою функцию last night post — largestNum (num) и попытаться запустить ее и понять ее вместе с вашими «ожидаемыми входными данными» в pythontutor.com

5. ОК. Сделает это.

Ответ №2:

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

     from functools import cmp_to_key
    
    def largestNum(num):
        num = [str(n) for n in num]
        num.sort(key=cmp_to_key(lambda b, a: ((a b)>(b a))-((a b)<(b a)) ))
        return ''.join(num).lstrip('0') or '0'

    x = input("Entered number: ")
    #a = largest_num(x)
    print(largestNum(x))

    Demo: 
    >>>Entered number: 321895
    985321
    
    >>>Entered number: 10957
    97510
  

    >>>Entered number: 4576889
    
    9887654
    >>> 

 Or simply do the sorting directly (you can convert this to function):
    1. num = list(num).  # num is string input of number
    2. num = num.sort(reverse=True)
    3. largest = int(‘’.join(num))  # answer