#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