создание функции, которая зацикливается, если вы не введете правильные переменные - PullRequest
0 голосов
/ 04 февраля 2020

Я хочу создать функцию, которая снова зацикливается, если вы не введете правильную строку.

Проблема с этим кодом заключается в том, что у меня, кажется, он есть l oop бесконечно

def askString(question):
    while True:
        try:
            response = str(input(question))
            if response != "a" or response != "b" or response != "c":
                 print("please enter a/b/c")
                 continue
            break
    return response

trial = askString("please enter a/b/c :") 

Я ссылался на этот код для своего цикла. В настоящее время это работает хорошо для целых чисел, но не очень хорошо для строки.

def askInt(question): 
     while True:       
         try:          
             response = int(input(question)) 
             if response <= 0: 
                print("please enter positive value greater than zero") 
                   continue  
             break 
         except ValueError: 
             print("integers only please")
     return response

есть предложения относительно того, что вызывает бесконечные циклы для строк, но не для целочисленного кода?

Спасибо

Ответы [ 5 ]

3 голосов
/ 04 февраля 2020

Проблема в том, что вы выражаете if:

if response != "a" or response != "b" or response != "c":

Поскольку ответ не может быть одновременно "a", "b" и "c", условие всегда выполняется, поэтому l oop никогда не ломается. Используйте

if (response != "a" and response != "b" and response != "c"):

вместо

1 голос
/ 04 февраля 2020

Есть несколько проблем:

  1. input () уже возвращает str, нет необходимости снова вызывать str

  2. Нет необходимости чтобы вызвать print («пожалуйста, введите a / b / c»), если вы передадите вопрос для ввода, он выведет его на экран, поэтому повторный вызов print только удвоит его.

  3. В качестве хорошей практики вы можете поместить буквы в список и проверить, есть ли ответ в этом списке, чтобы у вас был более короткий код.

def askString(question):
    while True:
            response = input(question)
            if response  in ['a', 'b', 'c']:
                 break

    return response

trial = askString("please enter a/b/c :")

0 голосов
/ 04 февраля 2020

Это должно работать немного лучше:

def askString(question):
    valid_answers = ['a', 'b', 'c']
    while True:
        response = str(input(question)).strip()
        if response in valid_answers : break

        print("please enter a/b/c")

    return response
0 голосов
/ 04 февраля 2020

Вы должны написать так:

для положительного целого числа,

def askInt():

  response = int(input('Enter a  number'))
  while response < 0:
    response = int(input('Enter a  positive number'))
  print(response)


def askStr():

  response = (input('Enter string a,b or c'))
  while response != 'a' and response != 'b' and response != 'c':
    response = (input('Enter correct reponse'))
  print(response)

0 голосов
/ 04 февраля 2020

Проблема возникла из ваших or заявлений. Вы должны использовать and вместо этого. В противном случае ваш ввод будет отличаться от «a» или «b» или «c», и l oop никогда не сломается.

И часть try: не нужна, так как вы не используйте int() функцию

def askString(question):
    while True:
        response = str(input(question))
        if response != "a" and response != "b" and response != "c":
            continue
        break
    return response

trial = askString("please enter a/b/c :") 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...