复数,Python中的if语句

0 投票
5 回答
2378 浏览
提问于 2025-04-17 23:35

有很多问题……目前我的代码正在计算费用、成人和儿童的数量。如果用户只输入了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!")

撰写回答