复数,Python中的if语句
有很多问题……目前我的代码正在计算费用、成人和儿童的数量。如果用户只输入了1个孩子,我希望它显示“child”,而不是“children”。
serviceType = input("Would you like (M)edium or (R)are steak?")
if serviceType == "r":
rare = float((noChild * rare) * DISCOUNT) + (noAdult * BASIC)
print("That is " + formatCurrency(rare) + " for rare choice for " + str(noAdult) + " adults and " + str(noChild) + " children. Enjoy!")
现在的输出是:这是$--,适合2个成人和1个children。我需要它显示“这是$--,适合1个成人和1个child。”
我想我需要在某个地方加一个
if noChild == 1
语句,但不太确定该加在哪里?
我还有一段类似的代码来计算“medium”,所以我不能把句子改成child,否则如果用户输入2,就会变成2个child。我希望我解释得够清楚?
谢谢
5 个回答
0
我来这里是想找一个很简单的解决办法,规则就是如果数量超过1,就在后面加个s。你可以使用Python的f-string格式,在f-string里面做一个简单的条件判断。
print(f"That is {formatCurrency(rare)} for rare choice for {noAdult}
adult{'s' if noAdult != 1 else ''} and {noChild}
child{'ren' if noChild != 1 else ''}. Enjoy!"
)
0
def pluralize(singular, plural):
def fn(num):
return "{} {}".format(num, singular if num==1 else plural)
return fn
children = pluralize("child", "children")
adults = pluralize("adult", "adults")
seniors = pluralize("senior", "seniors")
然后
children(0) # => "0 children"
children(1) # => "1 child"
children(2) # => "2 children"
和
def participants(num_seniors, num_adults, num_children):
items = [
(num_seniors, seniors),
(num_adults, adults),
(num_children, children)
]
items = [fn(n) for n,fn in items if n > 0]
# join last pair of items with "and"
items[-2:] = [" and ".join(items[-2:])]
# join all preceding items with ","
return ", ".join(items)
participants(1, 2, 1) # => "1 senior, 2 adults and 1 child"
participants(0, 1, 4) # => "1 adult and 4 children"
1
使用 x if ... else y
这种写法:
def children_str(number):
return "{} {}".format(number, 'child' if number == 1 else 'children')
for i in range(3):
print children_str(i)
输出结果:
0 children
1 child
2 children
你可以把这个函数做得更通用:
def pl(number, singular, plural=None):
if plural == None:
plural = singular + 's'
return "{} {}".format(number, singular if number == 1 else plural)
print (pl(1, 'child', 'children')) # 1 adult
print (pl(2, 'child', 'children')) # 2 children
print (pl(1, 'adult', 'adults')) # 1 adult
print (pl(2, 'adult')) # 2 adults
print (pl(1, 'adult')) # 1 adult
print (pl(5, 'adult', 'adults')) # 5 adults
1
如果你想让单数和复数的处理更加通用,可以考虑使用一个叫做 inflect 的 Python 库,可以在这里找到。
然后,转换的代码看起来会是这样的:
import inflect
conversion_engine = inflect.engine()
def main():
for count in range(4):
print format_plural_singular("child",count)
print format_plural_singular("adult",count)
print
def format_plural_singular(noun,quantity):
return conversion_engine.plural_noun(noun,quantity)
0
你可以这样写打印语句:
print("That is " + formatCurrency(rare) + " for rare choice for " + str(noAdult) +
(" adult" if noAdult==1 else " adults") + " and " + str(noChild) +
(" child" if noChild==1 else " children") + ". Enjoy!")