def display_hand(hand):
for letter in hand.keys():
for j in range(hand[letter]):
print letter,
Вернет что-то вроде: b e h q u w x
. Это желаемый результат.
Как я могу изменить этот код, чтобы получить вывод только тогда, когда функция завершила свои циклы?
Что-то вроде ниже кода вызывает у меня проблемы, поскольку я не могу избавиться от элементов словаря, таких как запятые и одинарные кавычки при печати вывода:
def display_hand(hand):
dispHand = []
for letter in hand.keys():
for j in range(hand[letter]):
##code##
print dispHand
UPDATE Ответ Джона очень изящный, я нахожу. Позвольте мне, однако, расширить o ответ Кугеля: Подход Кугель ответил на мой вопрос. Однако я продолжал сталкиваться с дополнительной проблемой: функция всегда возвращала None, а также вывод. Причина. Всякий раз, когда вы явно не возвращаете значение из функции в Python, None неявно возвращается. Я не мог найти способ явно вернуть руку. В подходе Kugel я подошел ближе, но рука все еще похоронена в цикле FOR.
Вы можете сделать это в одной строке, объединив несколько понятий списка:
print ' '.join(letter for letter, count in hand.iteritems() for i in range(count))
Позвольте сломать это по частям. Я использую образец словаря, который имеет несколько счетчиков больше 1, чтобы показать, что часть повторения работает.
>>> hand
{'h': 3, 'b': 1, 'e': 2}
Получить буквы и числа в форме, которую мы можем перебрать.
>>> list(hand.iteritems())
[('h', 3), ('b', 1), ('e', 2)]
Теперь просто буквы.
>>> [letter for letter, count in hand.iteritems()]
['h', 'b', 'e']
Повторяйте каждую букву count
раз.
>>> [letter for letter, count in hand.iteritems() for i in range(count)]
['h', 'h', 'h', 'b', 'e', 'e']
Используйте str.join
, чтобы объединить их в одну строку.
>>> ' '.join(letter for letter, count in hand.iteritems() for i in range(count))
'h h h b e e'
другой вариант без вложенного цикла
"".join((x+' ') * y for x, y in hand.iteritems()).strip()
Возможно, ваш ##-код?
dispHand.append(letter)
Обновление
Чтобы распечатать свой список, выполните следующие действия:
for item in dispHand:
print item,
Использование
" ".join(sequence)
для печати последовательности без запятых и прилагаемых скобок.
Если у вас есть целые числа или другие вещи в последовательности
" ".join(str(x) for x in sequence)