Эта программа должна выводить штрих из списка элементов.
Например:
Ввод --> [корова, яблоко, свинья, корова, корова]
Выход --> 3 коровы, 1 яблоко и 1 свинья.
def count_things(text):
a = {}
for i in text:
if i in a:
a[i] += 1
else:
a[i] = 1
text = ''
for i in a:
if a[i] > 1:
text += str(a[i]) + ' ' + str(i) + 's and '
else:
text += str(a[i]) + ' ' + str(i) + ' and '
return text[:-5]
Я хочу вывести строку без использования «[:-5]» из последней строки (поэтому мне не нужно писать «и» в конце). Как это сделать?
@jarmod stroke == строка или оператор
Вопрос не ясен. Пожалуйста, переформулируйте вопрос
Ввод должен быть строковым списком (например: «корова, яблоко, корова,..»)?
Обратите внимание, что на английском языке вывод будет выглядеть как «3 коровы, 1 яблоко и 1 свинья».
collections.Counter должен делать именно то, что вы хотите. Он принимает итерацию и дает вам словарь уникальных элементов в качестве ключей, а значения — это количество раз, когда этот элемент был найден.
Вопрос в том, как составить предложение с and
между каждым элементом, а не в том, как считать.
Хороший звонок, ввод/вывод в верхней части вопроса меня достали.
Этого ты хочешь?
from collections import Counter
stuff = ["cow", "apple", "pig", "cow", "cow"]
print(" and ".join([f"{v} {k + 's' if v > 1 else k}" for k, v in Counter(stuff).items()]))
Выход:
3 cows and 1 apple and 1 pig
Это не добавляет множественное число «s», когда количество больше 1.
@ Бармар, теперь это так.
Не делайте конкатенацию в цикле. Поместите каждый элемент в список, а затем используйте join()
, чтобы объединить их.
Вы также можете использовать метод items()
для извлечения имени животного и подсчета непосредственно в переменные.
words = []
for animal, count in a.items()
if count > 1:
animal += "s"
words.append(f"{count} {animal}"
return " and ".join(words)
Предполагая, что ответы Бармара и бадукера показывают лучший подход. Желая использовать ваш код, если ввод представляет собой строку со списком слов, разделенных запятыми, вам нужно разделить строку на ","
:
def count_things(text):
a = {}
for i in text.split(","):
if i in a:
a[i] += 1
else:
a[i] = 1
text = ''
for i in a:
if a[i] > 1:
text += str(a[i]) + ' ' + str(i) + 's and '
else:
text += str(a[i]) + ' ' + str(i) + ' and '
return text[:-4]
и:
print(count_things("cow, apple, pig, cow, cow"))
теперь должно вернуться:
1 cow and 1 apple and 1 pig and 2 cows
Что вы подразумеваете под "инсультом"?