Найти - Пользователи
Полная версия: Помогите с ограничением ввода
Начало » Python для новичков » Помогите с ограничением ввода
1 2
byrjd1998
Необходима помощь по коду. Выкладываю его весь:
while True:
 print('List of characters:')
 print()
 print('Norbert,')
 print('Dagget,')
 print('Dalnoboishik,')
 print('Semicvetik,')
 print('Penya.')
 print('***')
 print('Quit')
 print()
 user_input=input('Choose character:')
 
 if user_input == 'Norbert':
  print("It's a beaver.") 
  print()
  user_input=input('Do you want continue? Yes/no?:')
  if user_input == 'yes':
   continue
  if user_input == 'no':
   print('Thank you for using.') 
   break  
 if user_input == 'Dagget':
  print("It's a beaver.")
  print()
  user_input=input('Do you want continue? Yes/no?:')
  if user_input == 'yes':
   continue
  if user_input == 'no':
   print('Thank you for using.') 
   break  
 if user_input == 'Dalnoboishik':
  print("It's a mouse.")
  print()
  user_input=input('Do you want continue? Yes/no?:')
  if user_input == 'yes':
   continue
  if user_input == 'no':
   print('Thank you for using.') 
   break  
 if user_input == 'Semicvetik':
  print("It's a female beaver.")
  print()
  user_input=input('Do you want continue? Yes/no?:')
  if user_input == 'yes':
   continue
  if user_input == 'no':
   print('Thank you for using.') 
   break  
 if user_input ==  'Penya':
  print("It's just a pen.")
  print()
  user_input=input('Do you want continue? Yes/no?:')
  if user_input == 'yes':
   continue
  if user_input == 'no':
   print('Thank you for using.') 
   break  
 if user_input == 'Quit':
  print('Thank you for using.')
  break

У меня, товарищи, два вопроса:
1 - Самый главный:
Для начала посмотрите на фрагмент кода:
  user_input=input('Do you want continue? Yes/no?:')
  if user_input == 'yes':
   continue
  if user_input == 'no':
   print('Thank you for using.') 
   break  

В принципе, ввод данных работает правильно, но есть одна проблема - в случае если ввести любое слово кроме “no”,(например “test”), то скрипт начинается заново, как-будто введено было слово “ yes”. Как ограничить возможность ввода ответа только двумя словами - “yes” и “no”? Пробовал через “try” и “except”, но ничего не вышло… Привожу в фото пример этой проблемы.

2 вопрос - не громоздкий ли код? Я понимаю, что список персонажей можно заменить строкой. А в остальном как? Можете подсказать?


Заранее спасибо.
shaptmos
1. Если есть необходимость выбора из двух вариантов, то почему бы просто не сделать так, что любая вводимая строка кроме “yes” завершает программу?

2. Если несколько раз совершается одно и тоже действие, то, наверное, надо его оформить в виде функции.

Как то так
byrjd1998
shaptmos
1. Если есть необходимость выбора из двух вариантов, то почему бы просто не сделать так, что любая вводимая строка кроме “yes” завершает программу?2. Если несколько раз совершается одно и тоже действие, то, наверное, надо его оформить в виде функции.Как то так

Завершение программы точно не нужно. Необходимо примерно, как тут:
while 1:
    try:
        x = int(input('введите число типа int : '))
    except ValueError:
        print ('Введенное вами число не int!!!')
    else:
        print ('Ура, введено корректное число!')
        break
Есть какие-нибудь идеи?…
4kpt_IV
Если нужно целое число, то проще проверить на isdigit…
Ну и логика не верна. Лучше воспользуйтесь словарем, который-бы возвращал то, что нужно вставить в print. Ну и каждый раз спрашивать в if про закрытие это хардкор. Узнайте, что такое DRY…
Насчет словаря. Пример:

vatiants = {'Norbert': "It's a beaver."}
JOHN_16
byrjd1998
не надо дублировать темы
byrjd1998
4kpt_IV
Если нужно целое число, то проще проверить на isdigit…Ну и логика не верна. Лучше воспользуйтесь словарем, который-бы возвращал то, что нужно вставить в print. Ну и каждый раз спрашивать в if про закрытие это хардкор. Узнайте, что такое DRY…Насчет словаря. Пример:

Благодарю. Вы очень помогли)
shaptmos
Есть какие-нибудь идеи?…

их есть у меня

characters_list = ['Norbert', 'Dagget', 'Dalnoboishik', 'Semicvetik', 'Penya']
answers_list = ["It's a beaver.","It's a beaver.", "It's a mouse.",
                "It's a female beaver.", "It's just a pen."]
just_dictionary = {x:y for x in characters_list for y in answers_list}
first_loop = 1
while first_loop:
    second_loop = 1
    print('List of characters:')
    print()
    print(*characters_list)
    print('***')
    print('Quit')
    user_input=input('Choose character:')
    print(just_dictionary.get(user_input))
    while second_loop:
        user_input=input('Do you want continue? Yes/no?:')
        if user_input == 'yes':
            second_loop = 0
        elif user_input == 'no':
            first_loop = 0
            second_loop = 0
        else:
            print("Try again")
FishHook
shaptmos
их есть у меня
да ладно?
characters_list = ['Norbert', 'Dagget', 'Dalnoboishik', 'Semicvetik', 'Penya']
answers_list = ["It's a beaver.","It's a beaver.", "It's a mouse.",
                "It's a female beaver.", "It's just a pen."]
just_dictionary = {x: y for x in characters_list for y in answers_list}
print(just_dictionary)
{'Norbert': "It's just a pen.", 'Penya': "It's just a pen.", 'Semicvetik': "It's just a pen.", 'Dalnoboishik': "It's just a pen.", 'Dagget': "It's just a pen."}
shaptmos
Хм, а можете подсказать почему так происходит?
FishHook
shaptmos
Хм, а можете подсказать почему так происходит?
Вы сделали вложенные циклы, чего вы ожидаете? Выполните
# -*-coding:utf-8-*-
def X():
    for i in range(10):
        print("Call next X")
        yield i
def Y():
    for i in range(10):
        print("Call next y")
        yield i
z =  {x:y for x in X() for y in Y()}

То что вы хотели сделать делается зипом
just_dictionary = dict(zip(characters_list, answers_list))

This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB