2017-02-20 14 views
1

Я пытаюсь, чтобы Python предложил пользователю выбрать пять номеров и сохранить их в системе. До сих пор у меня есть:Создание списка из пяти чисел

def main(): 
    choice = displayMenu() 
    while choice != '4': 
     if choice == '1': 
      createList() 
     elif choice == '2': 
      print(createList) 
     elif choice == '3': 
      searchList() 
     choice = displayMenu() 

    print("Thanks for playing!") 


def displayMenu(): 
    myChoice = '0' 
    while myChoice != '1' and myChoice != '2' \ 
        and myChoice != '3' and myChoice != '4': 
     print ("""Please choose 
         1. Create a new list of 5 integers 
         2. Display the list 
         3. Search the list 
         4. Quit 
         """) 
     myChoice = input("Enter option-->") 

     if myChoice != '1' and myChoice != '2' and \ 
      myChoice != '3' and myChoice != '4': 
      print("Invalid option. Please select again.") 

    return myChoice 

#This is where I need it to ask the user to give five numbers 

def createList(): 
    newList = [] 
    while True: 
     try: 
      num = (int(input("Give me five numbers:"))) 
      if num < 0: 
       Exception 

      print("Thank you") 
      break 
     except: 
      print("Invalid. Try again...") 

    for i in range(5): 
     newList.append(random.randint(0,9)) 
    return newList 

После того, как я запускаю программу она позволяет мне выбрать вариант 1 и просит пользователя ввести пять номеров. Однако, если я ввожу более одного номера, это говорит о недопустимости, и если я введу только один номер, он скажет спасибо и снова отобразит меню. Где я иду не так?

ответ

1

Используйте raw_input() вместо input().

С Python 2.7 input() оценивает ввод как код Python, поэтому вы получили ошибку. raw_input() возвращает строку, введенную пользователем. В python 3 вы можете использовать input(), raw_input() исчез.

my_input = raw_input("Give me five numbers:") # or input() for Python 3 
    numbers = [int(num) for num in my_input.split(' ')] 
    print(numbers) 
0

@DmitryShilyaev должным образом диагностировал проблему. Если вы хотите прочитать 5 номеров в одной строке, вы можете использовать split, чтобы разделить строку, возвращаемую input, и преобразовать каждый элемент этого списка в int.

+0

спасибо. Не могли бы вы показать мне, как это будет выглядеть? –

2

Это будет работать, если пользователь вводит числа, разделенные пробелами.

+0

Большое вам спасибо! Когда я пытаюсь переключить его на это, после выбора варианта один он продолжает говорить «Недействительный. Попробуйте еще раз». снова и снова. –

+0

@ J.Gunter Потому что вы сравниваете список с 0 в строке 'if num <0'. Здесь num будет списком чисел. Вы должны попробовать: 'if any ([x <0 для x в a]):' вместо этого. –

Смежные вопросы