0

こんにちは、私は python 3 を使用していますが、このコードを実行するのに問題があります。どんな助けでもありがとうございました。

私は練習のためにしなければならないこのdocstringを持っていますが、自動マーカーから失敗しています。これはドキュメントストリングです

'''(number) -> str

Return the size of a drink given the amount of volume of a beverage (in mL)
served. If a volume does not correspond to a drink size, return "invalid".

A kid-sized drink is any beverage of at least 100 mL but smaller
    than a large drink that isn't another drink size.
A small drink contains 200 mL of beverage.
A medium drink contains 300 mL of beverage.
A large drink contains 400 mL of beverage.
A jumbo drink contains 600 mL of beverage.
A promotional-sized drink is any beverage larger than a large drink that
    isn't another drink size.

>>> drink_size(-20)
'invalid'
>>> drink_size(200)
'small'
>>> drink_size(120)
'kid-sized'
'''

これは私のコードがどのように見えるかです

def drink_size(volume):
    if 100 <= volume < 400 and volume != 200 and volume != 300:
        return ('kid-sized')
    elif volume == 200:
        return ('small drink')
    elif volume == 300:
        return ('medium drink')
    elif volume == 400:
        return ('large drink')
    elif volume == 600:
        return ('jumbo drink')
    elif volume > 400 and volume != 600:
        return ('promotionl-sized')
    else:
        return ('invalid')    

助けてください、なぜ機能しないのかわかりません

4

1 に答える 1

2

最初に正確な値をチェックし、次に値の範囲を調べ、値が条件を尊重しない場合は最後に拒否することで、コードを簡素化できます (< 100そこ):

def drink_size(volume):
    # specific size check
    if volume == 200:
        return 'small'
    elif volume == 300:
        return 'medium'
    elif volume == 400:
        return 'large'
    elif volume == 600:
        return 'jumbo'

    # Range check
    elif 100 <= volume < 400:
        return 'kid-sized'
    elif volume > 400:
        return 'promotional-sized'
    else:
        return 'invalid'

この長いスイートを回避しif、コードをより読みやすくするためにリファクタリングすることもできます。

# Create a dictionary of volume to verbose size
sizes = {200: 'small', 300: 'medium', 400: 'large', 600: 'jumbo'}

def drink_size(volume):
    # specific size check
    if volume in sizes:
        return sizes[volume]

    # Range check
    elif 100 <= volume < 400:
        return 'kid-sized'
    elif volume > 400:
        return 'promotional-sized'
    else:
        return 'invalid'
于 2014-05-20T07:00:30.117 に答える