Python if语句问题,控制密码长度问题,求大神解救。

#密码检查
letter="qwertyuioplkjhgfdsazxcvbnmMNBVCXZLKJHGFDSAPOIUYTREWQ"
num="0123456789"
char='~!@#$%^&*()_=-/,.?<>;:[]{}|\'
passwd = input("请输入要检查的密码: ")
leng=0
if (len(passwd)<=7) and passwd in letter or passwd in num:
print('输入密码为高危')
elif passwd in letter and passwd in num and passwd in char and 8 print('输入密码为低危')
elif passwd in letter and passwd in num and passwd in char and leng>=8:
print('输入的密码为中危')
else:
print('输入的密码过长或者过短{}'.format(str(passwd)))

    为什么我输入7个数或者7个字母的时候,直接跳到了else执行后边print语句,如果输入2个或者3个数值或者字母又可以执行if后边的print语句,好奇怪。求大神解救。

我按照我的理解给你写了一个
myallin是判断是不是全是某种字符 比如 myallin(passwd, num)在 1212111 时候返回 1,abacd1 返回 0
myin是判断是不是包含有某种字符,比如 myin(passwd, num) 在 1212111 返回1,在 abacd1 也返回 1,在 asdasda 返回 0

# -*- coding:utf-8 -*-

def myallin(input, check):
    r = 1
    for ch in input:
        if not(ch in check): r = 0
    return r

def myin(input, check):
    for ch in input:
        if ch in check: return 1
    return 0

letter="abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
num="0123456789"
char='~!@#$%^&*()_=-/,.?<>;:[]{}|\\'
passwd = input("请输入要检查的密码: ")
if (len(passwd)<=7):
    print('输入的密码 {} 过短'.format(str(passwd)))
elif (len(passwd)>20): #假设最长20:
    print('输入的密码 {} 过长'.format(str(passwd)))
elif myallin(passwd, letter) or myallin(passwd, num): #全是数字/字母
    print('输入密码为高危')
elif myin(passwd, letter) and myin(passwd, num) and myin(passwd, char) and len(passwd)>=8: #包含字母数字符号并且长度>8
    print('输入密码为低危')
else:
    print('输入的密码为中危')


大哥,能不能贴个至少能运行的code上来,然后你这边判断逻辑也有问题,你是要判断密码里是否有数字,字符字母 ,所以应该一个一个字母判断,而不是直接说passwd in

长度超过7,elis条件又怒满足的话,就进到else。

你的代码没有格式化就贴在这里,少了很多字符,缩进也不对了

比如
elif passwd in letter and passwd in num and passwd in char and 8 print('输入密码为低危')
实在不知道你的条件是什么

你也没有说清楚你的逻辑什么,你的高危、中危、低危的定义是什么,而“密码过短”和“密码高危”两个的定义又是重叠的。

图片说明

你需要的到底是什么呢,长度控制吗?简单来说if(长度>最低值&&长度<最大值){成功},这种样式就够了,如果还加上其他条件,直接做正则判断就可以了