ウェブサイトが1回の閲覧、残り1日、1回の回答などを行っているのをよく目にします。私にとって、これは怠惰であり、次のようなものと同じくらい簡単に修正できます。
if(views == 1)
print views + " view"
else print views + " views"
私が知りたいのは、java、python、phpなどの一般的な言語で1つのライナーがあるかどうかです。これを行うサイトにコメントして、コードに追加するのと同じくらい簡単です。それは可能ですか?
ウェブサイトが1回の閲覧、残り1日、1回の回答などを行っているのをよく目にします。私にとって、これは怠惰であり、次のようなものと同じくらい簡単に修正できます。
if(views == 1)
print views + " view"
else print views + " views"
私が知りたいのは、java、python、phpなどの一般的な言語で1つのライナーがあるかどうかです。これを行うサイトにコメントして、コードに追加するのと同じくらい簡単です。それは可能ですか?
私のサイトでこれを処理するときは、三項演算子を使用します。多くのCベースのプログラミング言語が三項演算子をサポートしているようです。phpではこれと同じくらい簡単です:
<?= $views . ' view' . ($views == 1 ? '' : 's'); ?>
django(python)を使用している場合は、複数化フィルターを使用できます。
You have {{ num_messages }} message{{ num_messages|pluralize }}.
特殊なケースもサポートしています。ドキュメントをご覧ください。
通常のPythonコードで同様のことをしたい場合は、inflectモジュールを見てください。かなり強力なようで、ほとんどの複数形を正しく推測しているようです。
import inflect
p = inflect.engine()
print("You have {}.".format(p.no('message',num_messages)))
次のような文字列を出力します
You have no messages.
You have 1 message.
You have 34 messages.
条件演算子または三項演算子を使用して問題を処理できますが、見方を変えると、次のように複数形/単数形の単語が表示されることがよくあります。
1 view(s), 1 day(s) left, or 1 answer(s)
これは、条件の追加が簡単ではない場合、たとえば入力フィールドとして役立つことがよくありますか?
Pythonの場合、比較して余分な「s」を追加するという反復的なタスクを実行する関数を作成できます。
>>> def pluralize(n, text):
return "{} {}{}".format(n,text, 's' if n > 1 else '')
>>> pluralize(3,'word')
'3 words'
>>> pluralize(1,'word')
'1 word'