Дополнительные ограничения - Только 1 строка! Не могу понять что нужно - или код в одну строку или вывод функции в одну строку, или что-то другое!

Задание: https://www.codewars.com/kata/535742c7e727388cdc000297/train/python

Нужно сгенерировать колоду карт в количестве 52 - четыре масти по 13 карт.
Ранг карт вот такой: ace two three four five six seven eight nine ten jack queen king

Вывод должен быть таким

Каждая строка карты будет иметь формат

"ace of hearts"  
"ace of spades"  
"ace of diamonds"  
"ace of clubs"

Они не должны идти по порядку

Дополнительные ограничения - только одна строка

Код в одну строку не проходит

import random
dict_card_format = {1: "hearts", 2: "spades", 3: "diamonds", 4: "clubs"}
dict_rank = {1: "ace", 2: "two", 3: "three", 4: "four", 5: "five", 6: "six", 7: "seven",
             8: "eight", 9: "nine", 10: "ten", 11: "jack", 12: "queen", 13: "king"
             }

nums = list(range(1, 5))
random.shuffle(nums)
nums1 = list(range(1, 14))                                                                         
random.shuffle(nums1)

def deck_of_cards():
     return [f"{''.join(dict_rank[j])} of {''.join(dict_card_format[i])}" for j in nums1 for i in nums]

Выдаёт сервер CodesWars

Test Results:
  Code lines
    Tests
       1 line only!: 13 should equal 1  - этот Тест не проходит
Completed in 0.09ms
Completed in 0.14ms
Sample tests                            - этот Тест проходит
    Tests

Если однострочник не проходит - то как вывести вывод функции в одну строку

Пробовал прописать по разному

def deck_of_cards(): 
    n_card_format = 4
    n_rank = 13        
    nums = list(range(1, 5))                                                    
    random.shuffle(nums)
    card_format = nums[:4]                                                                            
    nums1 = list(range(1, 14))                                                                          
    random.shuffle(nums1)
    rank_list = nums1[:13] 

    # s = ""
    lst = []
    for i in card_format:
        for j in rank_list:
            if i in dict_card_format and j in dict_rank:
                lst.append(f"{''.join(dict_rank[j])} of {''.join(dict_card_format[i])}")
                # lst.append(''.join(dict_rank[j]) + " " + "of" + " " + ''.join(dict_card_format[i]))
                # s += (''.join(dict_rank[j]) + " " + "of" + " " + ''.join(dict_card_format[i]) + " ")
                # s += "\n"f"{''.join(dict_rank[j])} of {''.join(dict_card_format[i])} "
    return lst 

Помогите, как найти правильное решение


Ответы (1 шт):

Автор решения: Stanislav Volodarskiy

Это решение в одну строку, которое проходит все тесты:

def deck_of_cards(): return [f'{rank} of {suit}s' for rank in ('ace', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine', 'ten', 'jack', 'queen', 'king') for suit in ('heart', 'spade', 'diamond', 'club')]

P.S. "They do not need to be in order." означает "Они не обязаны следовать в определённом порядке.". То есть вы можете выдавать список из 52 фраз в том порядке, который удобен вам.

→ Ссылка