Ввод, если еще не зацикливается?

#python #python-3.x

#питон #python-3.x

Вопрос:

Я создаю программу, которая получает простые множители числа, а также проверяет, является ли оно простым или нет, на основе команды пользователя. Я столкнулся с проблемой, когда оператор if-else не выполняет обратный цикл, что означает, что после ввода выходных данных пользователю предлагается ввести другую команду. После того, как пользователь отдаст команду, программа завершится.

   command = input("Enter a command (factor, isprime, end): ")
  command = command.lower()

  if command != "factor" and command != "isprime" and command != "end":
    print("Command", command,"not recognized. Try again!")
    command = input("Enter a command (factor, isprime, end): ")
    command = command.lower()

  elif command == "factor":
    num =  int(input("Enter an integer > 1: "))
    primeFactorsOf(num)
    print("")
    command = input("Enter a command (factor, isprime, end): ")
    command = command.lower()

  elif command == "isprime":
    num =  int(input("Enter an integer > 1: "))
    findPrime(num)
    print("")
    command = input("Enter a command (factor, isprime, end): ")
    command = command.lower()

  elif command == "end":
    print("Thanks for using our service! Goodbye.")

 

Есть идеи, как я могу это исправить?

Комментарии:

1. Только одна вещь, хотя нет функции, которая называется primeFactorsOf() или findPrime() вы позже собираетесь определить эти функции?

2. Нет необходимости сравнивать со всеми командами в начале вашего if..elif блока. Просто добавьте последнее else: предложение, и оно будет выполнено, если ни одна из предыдущих команд не совпала.

3. Ну, да; это не цикл, потому что цикла нет.

Ответ №1:

Вы добавили несколько дополнительных ненужных сравнений. Следующее выполняет ту же логику и фактически упрощает добавление дополнительных команд:

 while True:
    command = input("Enter a command (factor, isprime, end): ")
    command = command.lower()

    if command == "factor":
        num = int(input("Enter an integer > 1: "))
        primeFactorsOf(num)
        print("")

    elif command == "isprime":
        num =  int(input("Enter an integer > 1: "))
        findPrime(num)
        print("")

    elif command == "end":
        print("Thanks for using our service! Goodbye.")
        break # Explicitly "break" out of the loop.

    else:
        print("Command", command,"not recognized. Try again!")
 

Ответ №2:

Добро пожаловать в мир циклов!

 while True:
  command = input("Enter a command (factor, isprime, end): ")
  command = command.lower()

  if command != "factor" and command != "isprime" and command != "end":
    print("Command", command,"not recognized. Try again!")

  elif command == "factor":
    num = int(input("Enter an integer > 1: "))
    primeFactorsOf(num)
    print("")

  elif command == "isprime":
    num =  int(input("Enter an integer > 1: "))
    findPrime(num)
    print("")

  elif command == "end":
    print("Thanks for using our service! Goodbye.")
    break # Explicitly "break" out of the loop.
 

Комментарии:

1. Зачем вам нужно проверять, не равна ли команда трем значениям, разве else не позаботится об этом по умолчанию?

2. @JoeFerndz: Это вполне разумно. Я пытался изменить их код как можно меньше

Ответ №3:

О, прямо сейчас ваша программа не возвращается к началу после того, как вы запросили другую команду. Использование цикла while может легко решить проблему.

 while True:
    command = input("Enter a command (factor, isprime, end): ")
    command = command.lower()

    if command != "factor" and command != "isprime" and command != "end":
        print("Command", command,"not recognized. Try again!")

    elif command == "factor":
        num =  int(input("Enter an integer > 1: "))
        # primeFactorsOf(num)
        print("")


    elif command == "isprime":
        num =  int(input("Enter an integer > 1: "))
        # findPrime(num)
        print("")

    elif command == "end":
        print("Thanks for using our service! Goodbye.")
        break
 

Ответ №4:

Вы можете сделать это с помощью while True . и сделайте else: , поскольку пользователь может ввести неверный ввод. (Кстати, используйте f strings ). Кстати, вы добавили несколько дополнительных ненужных сравнений, поэтому я исправил это:

 while True: # this loops forever.
    command = input("Enter a command (factor, isprime, end): ")
    command = command.lower()

    if command == "factor":
        num = int(input("Enter an integer > 1: "))
        primeFactorsOf(num)
        print("")

    elif command == "isprime":
        num =  int(input("Enter an integer > 1: "))
        findPrime(num)
        print("")

    elif command == "end":
        print("Thanks for using our service! Goodbye.")
        break # Explicitly "break" out of the loop. if you don't it'll keep looping.

    else:
        print(f"Command {command} not recognized. Try again!")