У меня есть девять переменных ниже и функция, однако в этом вопросе я сосредоточусь на переменной части. (Первые девять строк этого кода.)

groceryfruits1 = 'The number of fruit(s) in the grocery bag is: 1.'
groceryfruits2 = 'The number of fruit(s) in the grocery bag is: 2.'
groceryfruits3 = 'The number of fruit(s) in the grocery bag is: 3.'
groceryfruits4 = 'The number of fruit(s) in the grocery bag is: 4.'
groceryfruits5 = 'The number of fruit(s) in the grocery bag is: 5.'
groceryfruits6 = 'The number of fruit(s) in the grocery bag is: 6.'
groceryfruits7 = 'The number of fruit(s) in the grocery bag is: 7.'
groceryfruits8 = 'The number of fruit(s) in the grocery bag is: 8.'
groceryfruits9 = 'The number of fruit(s) in the grocery bag is: 9.'

def checkout(itemcount, category):
    if category == "fruits":
        if itemcount == 1:
            print groceryfruits1
        elif itemcount == 2:
            print groceryfruits2
        elif itemcount == 3:
            print groceryfruits3
        elif itemcount == 4:
            print groceryfruits4
        elif itemcount == 5:
            print groceryfruits5
        elif itemcount == 6:
            print groceryfruits6
        elif itemcount == 7:
            print groceryfruits7
        elif itemcount == 8:
            print groceryfruits8
        elif itemcount == 9:
            print groceryfruits9

checkout(9, "fruits")

Поскольку существует последовательный список переменных, и было бы более упорядоченным, чтобы все переменные были в одной строке, есть ли способ сделать это?

Larsenv

Ответов: 3

Ответы (3)

Вы можете упростить код до:

groceryfruits = 'The number of fruit(s) in the grocery bag is: {}.'

def checkout(itemcount, category):
    if category == "fruits":
        print groceryfruits.format(itemcount)

checkout(9, "fruits")

Как правило, набор переменных с одинаковыми именами следует объединить в один список. (Для этого мы проигнорируем, что сами значения аналогичны, а другие ответы лучше.)

groceryfruits = [
    'The number of fruit(s) in the grocery bag is: 1.',
    'The number of fruit(s) in the grocery bag is: 2.',
    'The number of fruit(s) in the grocery bag is: 3.',
    'The number of fruit(s) in the grocery bag is: 4.',
    'The number of fruit(s) in the grocery bag is: 5.',
    'The number of fruit(s) in the grocery bag is: 6.',
    'The number of fruit(s) in the grocery bag is: 7.',
    'The number of fruit(s) in the grocery bag is: 8.',
    'The number of fruit(s) in the grocery bag is: 9.'
]

def checkout(itemcount, category):
    if category == "fruits":
        if 1 <= itemcount <= 9:
            # List indices start at 0
            print groceryfruits[i-1]


checkout(9, "fruits")

Строка, предшествующая подсчету фруктов, всегда одна и та же, так почему бы просто не закодировать ее в своей функции?

def checkout(itemcount, category):
    if category == 'fruits':
        print 'The number of fruit(s) in the grocery bag is: {0}.'.format(itemcount)

Когда у вас будет больше категорий элементов, вы можете подумать о написании вашей функции, подобной этой (или аналогичной), чтобы обеспечить большую гибкость:

def item_checkout(itemcount, category):
    print 'the number of {0} items in the grocery bag is: {1}'.format(category, itemcount)

Или, если вам нужна общая функция проверки, пусть она принимает список (количество элементов, категория) кортежи:

def total_checkout(items):
    'items: list of (itemcount, category) tuples'
    for itemcount, category in items:
        print 'the number of {0} items in the grocery bag is: {1}'.format(category, itemcount)

Демо:

>>> total_checkout([(5, 'banana'), (2, 'fruit'), (7, 'sirup')])
the number of banana items in the grocery bag is: 5
the number of fruit items in the grocery bag is: 2
the number of sirup items in the grocery bag is: 7

2022 WebDevInsider