В то время как я нашел @ sophros answer очень знающим и информативным, я решил, что это больше, чем мне нужно.Я решил написать свой собственный класс, так как мне нужно что-то дешевое и простое, которое я могу использовать для разных слов / предложений.Не стесняйтесь использовать себя, если вам это нравится!
class Plural:
__slots__ = 'word', 'value', 'singular', 'plural', 'zero', 'ignore_negatives'
def __init__(self, value: int, word: str = "", **kwargs):
"""
Parameters
----------
value : int
The determining value
word : str, optional
The word to make plural. (defaults to "")
singular : str, optional
Appended to `word` if `value` == 1. (defaults to '')
plural : str, optional
Appended to `word` if `value` > 1. (defaults to 's')
zero : str, optional
Replaces `value` if `value` == 0. (defaults to 0)
ignore_negatives : bool, optional
This will raise ValueError if `value` is negative. (defaults to False)
Set to True if you don't care about negative values.
"""
self.value, self.word = value, word
self.singular = kwargs.pop('singular', '')
self.plural = kwargs.pop('plural', 's')
self.zero = kwargs.pop('zero', 0)
self.ignore_negatives = kwargs.pop('ignore_negatives', False)
def __str__(self):
v = self.value
pluralizer = self.plural if abs(v) > 1 else self.singular
if v < 0 and not self.ignore_negatives:
raise ValueError
return f"{v or self.zero} {self.word}{pluralizer}"
Проверьте, что это работает
print(Plural(-2, singular="entry", plural="entries", ignore_negatives = True))
#-2 entries
print(Plural(-1, singular="entry", plural="entries", ignore_negatives = True))
#-1 entry
print(Plural(0, singular="entry", plural="entries"))
#0 entries
print(Plural(1, singular="entry", plural="entries"))
#1 entry
print(Plural(2, singular="entry", plural="entries"))
#2 entries
с отрицательным значением
print(Plural(-1, singular="entry", plural="entries"))
#Traceback (most recent call last):
#File "/home/main.py", line 53, in <module>
# print(Plural(-1, singular="entry", plural="entries"))
# File "/home/main.py", line 43, in __str__
# raise ValueError
#ValueError
Другие варианты использования
print(Plural(1, "entr", singular="y", plural="ies"))
#1 entry
print(Plural(2, "entr", singular="y", plural="ies"))
#2 entries
print(Plural(0, "value", zero="No"))
#No value
print(Plural(1, "value"))
#1 Value
print(Plural(2, "value"))
#2 Values
Если вам просто нужно быстрое и грязное исправление
Либо используйте один из моихПримеры в вопросе или сделать метод, как в моем вопросе, но вот измененная версия как @ Ev.Kounis и @ 9769953 предложено в комментариях (надеюсь, вы не будете против, если я внесу ваши предложения в ответ)
def plural(num: int, word: str = "", single: str = "", mult: str = 's'):
return f"{num} {(plural, singular)[abs(num) == 1]}"