2016-10-10 3 views
-6

Я не вижу ничего плохого в моем коде, но я не могу возвращать -1, когда вход не может произвести следующее большее число, то есть вход 531, который спускается.Next Самое большое число одинаковых цифр

import itertools as it 
def next_bigger(n): 
    if sorted("531", reverse = True) == list("531"): 
     return -1 
    s = tuple(str(n)) 
    for x in it.dropwhile(lambda x: x <= s, it.permutations(sorted(s))): 
     return int(''.join(x)) 
    return s 

Может кому-то помочь?

+3

Вы пробовали что-нибудь для достижения того, чего хотите? Для вас гораздо лучше побывать и показать свои усилия; вопросы, которые этого не делают, обычно плохо получают здесь. – Aurora0001

+0

см. Пересмотренный код выше. –

+4

'if True:' будет _allways_ быть True. Какое условие вы действительно хотите проверить? –

ответ

2

Вы можете просто использовать оператор if в начале вашей функции, чтобы проверить, находится ли номер уже в порядке сортировки в обратном порядке. Если он отсортирован return -1 немедленно:

>>> sorted("531", reverse = True) == list("531") 
True 
+0

в какой строке я бы разместил это условное утверждение? –

+0

@ Mr.Jibz первая строка после того, как вы определяете функцию –

+0

, когда я делаю это (что находится в отредактированном коде выше), вывод читает «-1 должен равняться 21», 21 является первым тестовым выходом с входом 12. –

Смежные вопросы