def question():
original = input("Enter a word: ")
if " " in original:
print("\n**Please only enter one word.**")
question()
elif len(original) <= 0:
print("\n**It seems as though you did not enter a word.**")
question()
elif not original.isalpha():
print("\n**Please only use letters.**")
question()
else:
print(original)
question()
VS.
def question():
original = input("Enter a word: ")
if len(original) > 0 and original.isalpha() and " " not in original:
print(original)
else:
print("**Make sure you enter a word, only use letters, and only enter single word.**")
question()
question()
Эти две программы в основном одно и то же. Но верхняя программа длиннее и дает больше информации о том, что пошло не так, когда пользователь вводит неверный ответ. Нижняя программа намного короче, но не дает столько информации для недействительных ответов. В реальном мире кодирование, как и в профессиональном программировании, какая из программ будет предпочтительнее другой?
За несколькими исключениями (например, для входа в систему) больше информации, как правило, лучше (но это очень субъективно и зависит от специфики). При этом мы можем немного улучшить ваш первый подробный вариант, например:
# Allow multiple, simultaneous errors
def question():
while True:
original = input("Enter a word: ")
errors = []
if " " in original:
errors.append("\n**Please only enter one word.**")
if len(original) <= 0:
errors.append("\n**It seems as though you did not enter a word.**")
if not original.isalpha():
errors.append("\n**Please only use letters.**")
# if <another test>:
# errors.append(<test message>)
if not errors: break
# If we get here, there were some errors -- print them and repeat
print("".join(errors))
# We've broken from the while loop, the input is good
print(original)
Или же
# Don't allow multiple errors
def question():
while True:
original = input("Enter a word: ")
err = None
if " " in original:
err = "\n**Please only enter one word.**"
elif len(original) <= 0:
err = "\n**It seems as though you did not enter a word.**"
elif not original.isalpha():
err = "\n**Please only use letters.**"
# elif <another test>:
# err = <test message>
if err is None: break
# If we get here, there was an error -- print it and repeat
print(err)
# We've broken from the while loop, the input is good
print(original)
while
.while
это делается так, что вы даже не можете ввести свой ответ. Это просто пропускает это.True
- другими словами, является ли ваша строкаwhile True:
?