求助大神,这段none代码什么意思为什么返回none?

看得出来题主使用过print(ranstr)进行检测,问题比较隐蔽,在下面这行代码: if uppercount == 1 and lowercount == 1 and digcount == 1 and signcount == 1 :这个条件太苛刻了,为啥呢?我们试着运行一下。for循环运行八次会生成8个不同的ran值,但却不能保证8次能把0、1、2、3这四个数都生成到,什么意思呢?授人以鱼不如授人以渔,我用程序来检测一下,添加变量ran_list,打印出所有ran值:添加如下代码:源代码:import random
def makepasswd(len):
uppercount = 0
lowercount = 0
digcount = 0
signcount = 0
ranstr = ''
ran_list = []
for num in range(len):
"""
算法是在0和4随机取值,如果是0,就取任意一个字母,
如果是1,就取任意一个数字,循环len次,
这样就可以生成一个由字母,数字和符号组成的随机字符串
"""
ran = random.randrange(0,4)
ran_list.append(ran)
if ran == 0:
ranalpha = random.randrange(65, 91)
#chr可以将一个数字转换成其对应的ascii码值
ranstr = ranstr + chr(ranalpha)
uppercount = 1
#print(ranstr)
elif ran == 1:
rannum = random.randrange(97, 122)
ranstr = ranstr + chr(rannum)
lowercount = 1
#print(ranstr)
elif ran == 2:
rannum = random.randrange(48, 57)
ranstr = ranstr + str(rannum)
digcount = 1
#print(ranstr)
elif ran == 3:
rannum = random.randrange(33,46)
ranstr = ranstr + chr(rannum)
signcount = 1
#print(ranstr)
print(ran_list)
return ranstr
print(makepasswd(8))运行两次后结果是这样的:仔细观察可以发现,第一次中没有2,第二次中没有1。判定条件永远不成立,所以不能返回ranstr,相当于什么也没返回,是None。一种简单粗暴的处理方式就是直接去除判定条件,如上面的代码。如果想保证0、1、2、3至少生成一次,还需要其他判定条件,这里由题主再多思考,解决起来并不困难。}

我要回帖

更多关于 python运行出现none 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信