Уведомления

Группа в Telegram: @pythonsu

#1 Фев. 24, 2016 00:02:20

byrjd1998
Зарегистрирован: 2016-02-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

Необходима помощь по коду. Выкладываю его весь:

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 вопрос - не громоздкий ли код? Я понимаю, что список персонажей можно заменить строкой. А в остальном как? Можете подсказать?


Заранее спасибо.

Прикреплённый файлы:
attachment Screenshot_2016-02-24-00-55-40.png (99,9 KБ)

Офлайн

#2 Фев. 24, 2016 00:26:02

shaptmos
Зарегистрирован: 2015-12-12
Сообщения: 27
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

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

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

Как то так

Офлайн

#3 Фев. 24, 2016 00:32:35

byrjd1998
Зарегистрирован: 2016-02-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

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

Завершение программы точно не нужно. Необходимо примерно, как тут:
while 1:
    try:
        x = int(input('введите число типа int : '))
    except ValueError:
        print ('Введенное вами число не int!!!')
    else:
        print ('Ура, введено корректное число!')
        break
Есть какие-нибудь идеи?…

Офлайн

#4 Фев. 24, 2016 00:58:16

4kpt_IV
Зарегистрирован: 2016-01-08
Сообщения: 999
Репутация: +  49  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

Если нужно целое число, то проще проверить на isdigit…
Ну и логика не верна. Лучше воспользуйтесь словарем, который-бы возвращал то, что нужно вставить в print. Ну и каждый раз спрашивать в if про закрытие это хардкор. Узнайте, что такое DRY…
Насчет словаря. Пример:

vatiants = {'Norbert': "It's a beaver."}

Офлайн

#5 Фев. 24, 2016 03:31:22

JOHN_16
От: Россия, Петропавловск-Камчатск
Зарегистрирован: 2010-03-22
Сообщения: 3292
Репутация: +  221  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

byrjd1998
не надо дублировать темы



_________________________________________________________________________________
полезный блог о python john16blog.blogspot.com

Офлайн

#6 Фев. 24, 2016 06:54:23

byrjd1998
Зарегистрирован: 2016-02-23
Сообщения: 4
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

4kpt_IV
Если нужно целое число, то проще проверить на isdigit…Ну и логика не верна. Лучше воспользуйтесь словарем, который-бы возвращал то, что нужно вставить в print. Ну и каждый раз спрашивать в if про закрытие это хардкор. Узнайте, что такое DRY…Насчет словаря. Пример:

Благодарю. Вы очень помогли)

Офлайн

#7 Фев. 24, 2016 08:32:15

shaptmos
Зарегистрирован: 2015-12-12
Сообщения: 27
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

Есть какие-нибудь идеи?…

их есть у меня

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")

Офлайн

#8 Фев. 24, 2016 10:39:04

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

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."}



Офлайн

#9 Фев. 24, 2016 11:19:36

shaptmos
Зарегистрирован: 2015-12-12
Сообщения: 27
Репутация: +  4  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

Хм, а можете подсказать почему так происходит?

Офлайн

#10 Фев. 24, 2016 15:03:11

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Помогите с ограничением ввода

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))



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version