#python #python-3.x
Вопрос:
В настоящее время я изучаю python с нуля (я никогда раньше не программировал), я практиковал цикл «Для» в Python 3.x, пытаясь закодировать программу, которая определяет, верен ли ваш пароль или нет (для корректности он должен содержать не менее 8 цифр и не использовать пробелы). Я пытался кодировать, но моя программа всегда говорит, что пароль правильный, даже если я использую пробел в пароле, длина, кажется, работает нормально.
contra=False
pass_=input("Introduce tu contraseña: ")
for i in pass_:
if len(pass_)>8 and i!=" ":
contra=True
if contra:
print("password ok")
else:
print("wrong password")
Комментарии:
1. Вы устанавливаете
contra
значение true, если обнаружите какой-либо символ, который не является пробелом . Если вы хотите узнать, есть ли пробел, вам следует задать переменную при нахождении пробела .
Ответ №1:
Ваш цикл не нужен:
pass_=input("Introduce tu contraseña: ")
contra = " " not in pass_ and len(pass_)>8
if contra:
print("password ok")
else:
print("wrong password")
Если вы хотите продолжать в том же духе, вы можете переработать свой код:
contra=False
pass_=input("Introduce tu contraseña: ")
if len(pass_)>8:
contra = False
for i in pass_:
if i==" ":
contra=False
if contra:
print("password ok")
else:
print("wrong password")
Нет необходимости проверять длину пароля на каждой итерации.
Python поддерживает in
выражение, например a in b
, которое проверяет a
, существует ли оно в итерируемом b
.
Ответ №2:
У вас есть два независимых условия. Вы можете проверить их гораздо проще:
contra = len(pass_) > 8 and
" " not in pass_
Вот и все: нет if
и назначения, нет цикла. Просто оцените каждое требование, объедините их and
и назначьте результат contra
. Еще проще сделать это составное выражение условием вашего окончательного if
:
if len(pass_) > 8 and
" " not in pass_:
print("password ok")
else:
print("invalid password")
Комментарии:
1. большое вам спасибо, я учусь и на данный момент не очень хорошо знаю синтаксис. В этом конкретном упражнении меня попросили использовать цикл «для».
Ответ №3:
Часть проблемы заключается в том, что вы устанавливаете переменную contra
в значение True каждый раз, когда символ не является пробелом. Но это означает, что если все символы не являются пробелами, то по крайней мере один раз будет установлено значение True.
Вместо этого попробуйте поискать контрпример, подобный этому:
contra = True
pass_=input("Introduce tu contraseña: ")
for i in pass_:
if i == ' ':
contra = False
break
if contra and len(pass_) > 8:
print("password ok")
else:
print("wrong password")
Таким образом, как только будет найдено свободное место, вы break
выйдете из цикла, не выполняя дальнейших итераций. После этого вы также можете проверить длину пароля.