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