Дополнительные ограничения - Только 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 шт):
Это решение в одну строку, которое проходит все тесты:
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 фраз в том порядке, который удобен вам.