Я пытаюсь понять, что не так с моим текущим решением. Проблема заключается в следующем:.отладка кода: 'взять список int между 0-9, вернуть наибольшее число, делящееся на 3'
с помощью питона 2.7.6"
Вы L
, список, содержащий некоторые цифры (от 0 до 9) Написать функцию answer(L)
, которая находит наибольшее число, которое может быть сделано из некоторые или все эти цифры и делится на 3. Если невозможно сделать такое число, в качестве ответа верните 0. L
будет содержать от 1 до 9 цифр. Одна и та же цифра может появляться несколько раз в списке, но каждый элемент в списке может использоваться только один раз.
input: (int list) l = [3, 1, 4, 1]
output: (int) 4311
input (int list) l = [3 ,1 ,4 ,1 ,5, 9]
output: (int) = 94311
Это мой код, чтобы решить эту проблему:
import itertools
def answer(l):
'#remove the zeros to speed combinatorial analysis:'
zero_count = l.count(0)
for i in range(l.count(0)):
l.pop(l.index(0))
' # to check if a number is divisible by three, check if the sum '
' # of the individual integers that make up the number is divisible '
' # by three. (e.g. 431: 4+3+1 = 8, 8 % 3 != 0, thus 431 % 3 != 0)'
b = len(l)
while b > 0:
combo = itertools.combinations(l, b)
for thing in combo:
'# if number is divisible by 3, reverse sort it and tack on zeros left behind'
if sum(thing) % 3 == 0:
thing = sorted(thing, reverse = True)
max_div_3 = ''
for digit in thing:
max_div_3 += str(digit)
max_div_3 += '0'* zero_count
return int(max_div_3)
b -= 1
return int(0)
Я испытал это назначение много раз в моей песочнице, и это всегда работает. Однако, когда я представил его против моего инструктора, я в конечном итоге всегда терпеть неудачу в 1 случае .. без объяснения причин. Я не могу допросить тесты инструктора, они слепо разбиты против кода.
Есть ли у кого-нибудь представление о состоянии, при котором мой код не может либо вернуть наибольшее целое число, делящееся на 3, либо, если его не существует, 0? В списке всегда есть хотя бы одно число.