2015-10-24 5 views
1

Функция подписи:.Как поставить цифры в порядке возрастания, вернуть их в кортеж, и добавить еще один аргумент (Python)

def rank3(x,y,z, ascending=True) 

Даны три целых числа, вернуть их в порядке, в кортеж
длиной три , Необязательный четвертый аргумент (восходящий) указывает, следует ли сортировать вывод по возрастанию (аргумент равен True) или нисходящий (аргумент False).

Примеры:

§ rank3(5, 3, 4) → (3,4,5) 

§ rank3(5, 3, 4, False) → (5,4,3) 

§ rank3(6, 8, 6) → (6,6,8) 

Это мой код до сих пор:

x = num1 #your first input 

y = num2 #your second input 

z = num3 #your third input 

a = [x, y, z] #your list of inputs 

b = [] #your sorted list 

def rank3(x,y,z, ascending=True): 

    while a: # your sort function 
     o = a[0] 
     for i in a: 
      if i < o: 
       o = i 
     b.append(o) 
     a.remove(o) 
    return b #return your final answer 
+0

Почему вы используете 'a', когда подпись функции содержит все необходимое? – Pynchia

+0

Да, я заметил, что прямо перед тем, как я прочитал ваш комментарий, lol. Думаю, мне нужно сделать x = num1, y = num2, z = num3. Я все еще не совсем уверен, как заставить функцию возвращать такой ответ, как показано в примерах инструкций, которые я написал. Любая помощь? – Pownage27

ответ

2

Попробуйте с

import bisect 
def rank3(x,y,z, ascending=True): 
    if x <= y: 
     ret = [x, y] 
    else: 
     ret = [y, x] 
    pz = bisect.bisect(ret, z) 
    ret.insert(pz, z) 
    if not ascending: 
     ret = ret[::-1] # or use ret.reverse() 
    return tuple(ret) 

В случае, если вы даже не хотите использовать bisect, сделать немного while, пока не найдете элемент в ret, который больше z (подсказка, используйте enumerate)

Однако это короче и вещий

def rank3(x,y,z, ascending=True): 
    return tuple(sorted((x,y,z), reverse=not ascending)) 
+0

Я пытаюсь сделать это без сортировки. Я должен делать все вручную. Любая дополнительная помощь приветствуется! – Pownage27

+0

Здравствуйте, я отредактировал свой ответ, посмотри – Pynchia

+1

Спасибо! Это работает! Жизнь спасет вас! : DDDD – Pownage27

0

Прежде всего - попытаться найти ответ в встроенных функций питона. И в конце концов напишите свое. Для вашего примера у python есть хороший метод sorted(). И вы можете изменить свой список/кортеж методом reverse().

+0

Мне не позволено сортировать функцию. Мне разрешено только сделать свое дело. Я не совсем уверен, как заставить функцию возвращать такой ответ, как показано в примерах инструкций, которые я опубликовал. – Pownage27

+0

Как я вижу, вы хотите вернуть отсортированный кортеж, и если флаг False, вы возвращаете обратный отсортированный кортеж. Я прав? – aarexer

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