Я пытаюсь удалить скобки из функции печати.

frames = [1,2,3,4,5,6,7,8,9,10]
scores = [10,7,10,7,6,7,9,5,10]

def FindLowest(scores):

    sorted_list = sorted(scores)
    low = sorted_list[0]
    rnd = 0

    for i in range(len(frames)):
        if scores[i] == low:
            rnd = i + 1
            break
    return low, rnd

    print("Lowest Score is",FindLowest(scores))

Самая низкая оценка 5, и это произошло в кадре 8

Фактический результат = наименьшая оценка (5,8)

0
TSG Baird 4 Июл 2019 в 08:07

5 ответов

Лучший ответ

Попробуйте использовать оператор print с заполнителями для низкого балла и его фрейма:

def FindLowest(scores):
    sorted_list = sorted(scores)
    low = sorted_list[0]
    rnd = 0

    for i in range(len(frames)):
        if scores[i] == low:
        rnd = i + 1
        break

    return low, rnd

result = FindLowest(score)

print "Lowest score is %d and it occured in frame %d" % (result[0], result[1])

Или используйте эту версию print, если вы используете Python 3:

print("Lowest score is %d and it occured in frame %d" % (result[0], result[1]))
1
Tim Biegeleisen 4 Июл 2019 в 05:31

Ваша функция возвращает кортеж, и вы печатаете этот кортеж. Вам нужно будет выделить кортеж или реорганизовать функцию, чтобы вернуть что-то еще.

Кстати, ваша функция кажется довольно неэффективной. Было бы разумнее zip два списка и просто отсортировать по элементу Score.

def FindLowest(scores):
    return min(enumerate(scores), key=lambda x: x[1])

idx, score = FindLowest(scores)
print("Lowest score is {0} and it occurred in frame {1}".format(score, frames[idx]))

enumerate объединяет каждый индекс списка с его значением в списке; Затем мы выбираем пару index, value с самым низким значением .

Предпочтение min() перед sorted()[0] возможно немного более эффективно, но, прежде всего, оно сообщает читателю, что именно происходит здесь.

Это также позволяет избежать использования frames в качестве глобального внутри функции. В качестве альтернативы, вы можете передать список фреймов в качестве второго аргумента, но тогда, возможно, вам действительно следует переименовать функцию. Или просто вставьте это, так как это действительно просто:

score, frame = min(zip(scores, frames), key=lambda x: x[0])

Но мне больше нравится первый подход.

0
tripleee 4 Июл 2019 в 07:06

Изменить это

return low, rnd

К этому

return f'{low}, {rnd}'
0
manofpeace 4 Июл 2019 в 06:36

Нужно только изменить свой print на это:

print("Lowest score is %d and it occurred in frame %d" % FindLowest(scores))
0
Lê Tư Thành 4 Июл 2019 в 07:12

Проблема в том, что вы возвращаете кортеж из функции и печатаете весь кортеж.

Вместо этого напечатайте каждый элемент кортежа

frames = [1,2,3,4,5,6,7,8,9,10]
scores = [10,7,10,7,6,7,9,5,10]

def FindLowest(scores):

    sorted_list = sorted(scores)
    low = sorted_list[0]
    rnd = 0

    for i in range(len(frames)):
        if scores[i] == low:
            rnd = i + 1
            break
    return low, rnd
print("Lowest Score is " + str(FindLowest(scores)[0]) + "," + str(FindLowest(scores)[1]))

Или для печати на python2

frames = [1,2,3,4,5,6,7,8,9,10]
scores = [10,7,10,7,6,7,9,5,10]

def FindLowest(scores):

    sorted_list = sorted(scores)
    low = sorted_list[0]
    rnd = 0

    for i in range(len(frames)):
        if scores[i] == low:
            rnd = i + 1
            break
    return low, rnd
a,b = FindLowest(scores)
print("Lowest Score is ",a,b)
0
Shaurya Vardhan Singh 4 Июл 2019 в 07:26