鱼C论坛

 找回密码
 立即注册
查看: 3414|回复: 5

python第014讲课后作业我的代码问题

[复制链接]
发表于 2016-4-13 00:21:06 | 显示全部楼层 |阅读模式
3鱼币
问题:我测试的时候,无论输入什么,都没有“high”这一等级(我设想的高级密码要求是:长度大于等于16,含字母数字和规定符号);
我猜想是def check_high(passw)写错了,但是没有发现问题……


def check_len (passw):
    flag = 3   #局部变量
    if len(passw) == 0:
        flag = 0
    elif len(passw) < 8:
        flag = 1
    elif len(passw) >= 16:
        flag = 2
    return flag

def check_high(passw):
    sign1 = 0
    sign2 = 0
    sign3 = 0
    for i in passw:  #不行
        if i in '0123456789':
            sign1 = 1
        elif i.isalnum:
            sign2 = 1
        elif i in '#$%^&':
            sign3 = 1
        if sign1 == 1 & sign2 == 1 & sign3 == 1:
            break
    if (sign1 == 1) & (sign2 == 1) & (sign3 == 1):
        return 1
    else:
        return 0
   






passw = raw_input('enter password:\n')  #raw保证字符串
flag = check_len(passw)
if flag == 1 | (passw.isdigit() | passw.isalpha() ):
    level = 1

elif flag == 2 & check_high(passw) :
    level = 3
else:
    level = 2

if level == 1:
    print ("low")
elif level == 2:
    print ("middle")
elif level == 3:
    print ("high")

最佳答案

查看完整内容

找了好半天问题……找原因的时候可以看看你的每个flag值和level值是多少,最后发现不是函数的问题,是函数外面的判断问题。解决方法是把&改成and 另外就是check_high里面的sign2要改成.isalpha(),不然你就没有判断过有没有英文字母。刚开始就瞅见了这个问题,但改了还是不行才发现必须用and的 我之前没见过python用&这种写法表示与的,不知道你是哪个版本,反正改了以后就运行正确了。所以至少用python的时候还是用and,or和not ...
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-13 00:21:07 | 显示全部楼层
找了好半天问题……找原因的时候可以看看你的每个flag值和level值是多少,最后发现不是函数的问题,是函数外面的判断问题。解决方法是把&改成and
另外就是check_high里面的sign2要改成.isalpha(),不然你就没有判断过有没有英文字母。刚开始就瞅见了这个问题,但改了还是不行才发现必须用and的
我之前没见过python用&这种写法表示与的,不知道你是哪个版本,反正改了以后就运行正确了。所以至少用python的时候还是用and,or和not吧~
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-13 01:20:38 | 显示全部楼层
  1. def check_len (passw):
  2.     flag = 3   #局部变量
  3.     if len(passw) == 0:
  4.         flag = 0
  5.     elif len(passw) < 8:
  6.         flag = 1
  7.     elif len(passw) >= 16:
  8.         flag = 2
  9.     return flag

  10. def check_high(passw):
  11.     sign1 = 0
  12.     sign2 = 0
  13.     sign3 = 0
  14.     for i in passw:  #不行
  15.         if i in '0123456789':
  16.             sign1 = 1
  17.         elif i.isalpha():
  18.             sign2 = 1
  19.         elif i in '~!@#$%^&*()_+-={}[]|\\<>,.?/:;"\'':
  20.             sign3 = 1

  21.         if sign1 == 1 and sign2 == 1 and sign3 == 1:
  22.             break
  23.     if (sign1 == 1) and (sign2 == 1) and (sign3 == 1):
  24.         return 1
  25.     else:
  26.         return 0
  27.    
  28. passw = input('enter password:\n')  
  29. flag = check_len(passw)
  30. flag2 = check_high(passw)
  31. if flag == 1 | (passw.isdigit() | passw.isalpha() ):
  32.     level = 1
  33. elif flag == 2  and flag2:
  34.     level = 3
  35. else:
  36.     level = 2

  37. if level == 1:
  38.     print ("low")
  39. elif level == 2:
  40.     print ("middle")
  41. elif level == 3:
  42.     print ("high")
复制代码


捕获.JPG
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-15 14:50:56 | 显示全部楼层
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-24 19:32:31 | 显示全部楼层
路过
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2016-4-26 20:03:48 | 显示全部楼层
跪了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2026-2-20 16:11

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表