2014-01-17 1 views
1

Я довольно новичок в python, и я застрял в следующей проблеме, пробуя некоторые идеи: Я бы хотел, чтобы пользователи вводили 5 ингредиентов для торта и магазина их в списке и вернуть список пользователю. Я говорю пользователю, чтобы сообщить мне 5 ингредиентов. Теперь я хотел бы, чтобы python проверил, действительно ли пользователь дал мне 5 ингредиентов или иначе дал им сообщение об ошибке. Это то, что у меня есть.Проверить количество элементов fromuser raw_input в списке

def recipe(): 
    #create a list to store the recipe ingredients. 
    print "Enter 5 ingredients that could possibly go into a cake: " 
    recipeList = [] 
    ingredients = raw_input("> ") 
    recipeList = recipeList.append(ingredients) 

    recipeList = [ingredients] 

    print recipeList 

    if len(ingredients) = 5: 
     print "Thanks" 
    elif len(ingredients) > 5: 
    print "That's too much" 
    elif len(ingredients) < 5: 
    print "That's too little" 
    else: 
     print "There's something wrong!" 

recipe() 
+1

если Len (ингредиенты) == 5 # Пропущенные в Doble равное –

+1

Почему вы делаете 'recipeList.append (components)', а затем 'recipeList = [components]'? Сначала вы добавляете его в список, затем вы заменяете список новым списком из одного элемента. Вы действительно не можете хотеть, чтобы обе эти вещи происходили. – abarnert

+0

Вы хотите, чтобы 5 ингредиентов были разделены пробелами? Или запятые? Или вы хотите запросить их по одному за раз (в отдельных строках с отдельными подсказками), пока не получите 5 или пока они не нажмут «войти», не набрав ничего? Или …? – abarnert

ответ

2

Многие из этих линий являются избыточными. Все, что вам нужно, это что-то вроде этого *:

def recipe(): 
    """Create a list to store the recipe ingredients.""" 

    print "Enter 5 ingredients that could possibly go into a cake: " 
    ingredients = raw_input("> ").split() 
    print ingredients 

    if len(ingredients) == 5: 
     print "Thanks" 
    elif len(ingredients) > 5: 
     print "That's too much" 
    elif len(ingredients) < 5: 
     print "That's too little" 
    else: 
     print "There's something wrong!" 

recipe() 

Самая важная линия здесь такова:

ingredients = raw_input("> ").split() 

Это в основном делает две вещи:

  1. Gets вход с raw_input.

  2. Разделяет ввод по пробелам, используя str.split. Результатом будет список подстрок (ингредиенты).

Кроме того, если вам интересно, я сделал комментарий в верхней части вашей функции в надлежащее docstring.


* Примечание: Я предположил, что ингредиенты будут разделены пробелами. Однако, если вы хотите, чтобы они отделены друг от чего-то другого, например, через запятую, то вы можете дать str.split конкретный разделитель:

ingredients = raw_input("> ").split(",") 
0

Если все ингредиенты одно слово они будут логически разделены пробелом поэтому все, что вам нужно будет сделать, это split входной строки на каждом пространстве. Или вы могли бы указать, что каждый ингредиент должен быть отделен запятой или своего рода ограничителем и split(",")

print "Enter 5 ingredients that could possibly go into a cake: " 

    recipeList = raw_input("> ").split(" ") 

Оператор равенства ==

if len(recipeList) == 5: 
0

Вы хотите использовать split функцию, потому что raw_input не разделяет входные данные пробелами или любым другим разделителем.

recipeList = ingredients.split() 

Кроме того, это сравнение должно быть двойным равным, иначе это назначение. Кроме того, он должен сравнивать длину списка, а не вход пользователя.

if len(recipeList) == 5: 
+1

Это еще не решит проблему, потому что 'len (components)' будет количеством символов в 'components', а не количеством слов в' recipeList'. – abarnert

+0

Хорошая точка. Я обновил свой ответ – jgritty

0

Что-то линия это:

def recipe(): 
    #create a list to store the recipe ingredients. 
    print "Enter 5 ingredients that could possibly go into a cake: " 
    recipeList = [] 
    line = raw_input("> ")   # changed line 

    ingredients = line.split()  # changed line, converts the input in an array 
            # (input separated by spaces) 

    recipeList = recipeList.append(ingredients) 

    recipeList = [ingredients] 

    print recipeList 

    if len(ingredients) == 5:  # added the double equal 
     print "Thanks" 
    elif len(ingredients) > 5: 
     print "That's too much" 
    elif len(ingredients) < 5: 
     print "That's too little" 
    else: 
     print "There's something wrong!" 

recipe() 
+0

Вы должны объяснить, что делает код, который вы добавили. – Christian

+0

Извините, я добавил комментарии к коду, но все в значительной степени говорят то же самое. Код может сильно измениться, только скорректируйте голый миниум. он делает много странных вещей с recipeList, я не знаю почему. –