wadmdmaw 发表于 2022-4-4 16:19:23

随机产生一个8到12位密码

随机产生一个8到12位密码,要求包含英文字符的大小写、数字字符以及至少一个$,#,%,&中的特殊字符
import random
k=random.randint(8,12)
ls=
ls1=
for i in range(len(ls1)):
    ls]=chr(random.randint(97,122)
ls2=
for i in range(len(ls2)):#请问一下这里结尾的英文冒号和开头的ls的l为什么总是报错“invalid synax”?
    if a not in ls1:
      ls]=upper(chr(random.randint(97,122)))
    else:
      False
ls3=
for i in range(len(ls3)):
    if b not in ls1+ls2:
      ls]=random.choice('$','#','%','&')
    else:
      False
ls4=
for i in range(len(ls4)):
    if c not in ls1+ls2+ls3:
      ls]=random.randint(0,9)
    else:
      False
print (ls)

请问这样写可以吗?为什么运行出来总是在英文冒号和ls的l那里报错?

wp231957 发表于 2022-4-4 16:21:20

错误信息发一下

ckblt 发表于 2022-4-4 16:45:46

因为你有很多括号忘记了。

我不会修改你的代码,我就自己做一个吧。
from random import randint, choice


alphabet = "abcdefghijklmnopqrstuvwxyz"

length = randint(8, 12)

password1 =
password2 =
password3 =

password = "".join(password1 + password2 + password3)
print(password)

有问题继续找我哦。

傻眼貓咪 发表于 2022-4-4 16:46:47

"""
随机产生一个8到12位密码,要求包含英文字符的大小写、数字字符以及至少一个$,#,%,&中的特殊字符
"""
import random

A =
B =
C = ['$', '#', '%', '&']

def check(password):
        if not password:
                return False
        a = b = c = False
        for each in password:
                if each in A: a = True
                elif each in B: b = True
                elif each in C: c = True
        return all()

if __name__ == "__main__":
        password = None
        while not check(password):
                password = random.sample(A + B + C, random.randint(8, 12))
        print(''.join(password))

wadmdmaw 发表于 2022-4-4 18:14:42

wp231957 发表于 2022-4-4 16:21
错误信息发一下

就是这里:for i in range(len(ls2)):#请问一下这里结尾的英文冒号和开头的ls的l为什么总是报错“invalid synax”?

wadmdmaw 发表于 2022-4-4 18:18:26

ckblt 发表于 2022-4-4 16:45
因为你有很多括号忘记了。

我不会修改你的代码,我就自己做一个吧。


但是位置也要随机,完全随机,不一定小写字母之后是大写字母然后是特殊字符...

wadmdmaw 发表于 2022-4-4 18:19:14

ckblt 发表于 2022-4-4 16:45
因为你有很多括号忘记了。

我不会修改你的代码,我就自己做一个吧。


还要包括数字字符,可以请问一下我具体是哪里括号有问题么,可以麻烦指出一下么

wadmdmaw 发表于 2022-4-4 18:24:53

傻眼貓咪 发表于 2022-4-4 16:46


运行了一下好像没有数字字符呢?还有可以请问一下我写的出现报错invalid synax是怎么回事么...

ckblt 发表于 2022-4-4 18:30:50

wadmdmaw 发表于 2022-4-4 18:18
但是位置也要随机,完全随机,不一定小写字母之后是大写字母然后是特殊字符...

from random import randint, choice, shuffle


alphabet = "abcdefghijklmnopqrstuvwxyz"

length = randint(8, 12)

password1 =
password2 =
password3 =
password4 =

password = password1 + password2 + password3 + password4
shuffle(password)
password = "".join(password)
print(password)

ckblt 发表于 2022-4-4 18:36:54

    ls]=chr(random.randint(97,122)
    ls]=chr(random.randint(97,122))
ls3=
ls3=
ls4=
ls4=

改完以后还有一大堆未定义:


基本都是 for i in ... ,结果调用的时候是 a,b
还有一个 upper('...') 应该是 '...'.upper()

wadmdmaw 发表于 2022-4-4 18:46:59

ckblt 发表于 2022-4-4 18:36
改完以后还有一大堆未定义:




ls2=
请问一下我定义列表的时候这里用的a之后我用a表示列表中的元素就是invalid synax了么?
for i in range 循环里的变量只能有i么

wadmdmaw 发表于 2022-4-4 18:52:21

ckblt 发表于 2022-4-4 18:36
改完以后还有一大堆未定义:




import random
k=random.randint(8,12)
ls=
ls1=
for i in range(len(ls1)):
    ls]=chr(random.randint(97,122)
ls2=
不知道怎么发图片...就是运行之后第一次报错是在这里的最后一行开头的这个l的地方,不知道是哪里有问题...这样不就是在定义列表么?

傻眼貓咪 发表于 2022-4-4 19:04:48

wadmdmaw 发表于 2022-4-4 18:24
运行了一下好像没有数字字符呢?还有可以请问一下我写的出现报错invalid synax是怎么回事么...

invalid synax 表示语法错误。

代码已增加数字:"""
随机产生一个8到12位密码,要求包含英文字符的大小写、数字字符以及至少一个$,#,%,&中的特殊字符
"""
import random

A =
B =
C = ['$', '#', '%', '&']
D =

def check(password):
      if not password:
                return False
      a = b = c = d = False
      for each in password:
                if each in A: a = True
                elif each in B: b = True
                elif each in C: c = True
                elif each in D: d = True
      return all()

if __name__ == "__main__":
    password = None
    while not check(password):
      password = random.sample(A + B + C + D, random.randint(8, 12))
    print(''.join(password))

ckblt 发表于 2022-4-5 11:29:39

wadmdmaw 发表于 2022-4-4 18:46
ls2=
请问一下我定义列表的时候这 ...

你非要用 a 的话,你用 for a in ... 也行

wadmdmaw 发表于 2022-4-5 17:51:20

傻眼貓咪 发表于 2022-4-4 19:04
invalid synax 表示语法错误。

代码已增加数字:

谢谢大佬!目前我的水平看这个感觉有点太复杂了…还是想在现在已经写出了来的的基础上改进一下…

wadmdmaw 发表于 2022-4-5 17:53:39

ckblt 发表于 2022-4-5 11:29
你非要用 a 的话,你用 for a in ... 也行

好的,
import random
k=random.randint(8,12)
ls=
ls1=
for i in ls1:
    ls=chr(random.randint(97,122))
改进之后最后一行这里ls运行为什么总会报错超出范围了呢?

叼辣条闯世界 发表于 2022-4-5 21:52:13

import random as r
a = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz1234567890`!@#$%^&*()_+-=\[]{},./<>?;:/*-+"\''
long = len(a)
t = ''
b = int(input("长度:"))
for e in range(10):
    t = t+a
print(t)

wadmdmaw 发表于 2022-4-8 14:05:28

b是赋值了之后又没用了么?

wadmdmaw 发表于 2022-4-8 14:07:12

叼辣条闯世界 发表于 2022-4-5 21:52


还有这样的话不能保证生成的一定包含大小写字母数字和特殊字符啊?

DetConan 发表于 2022-4-8 15:21:14

import random
import itertools
import string

total_num = random.randint(8, 12)
split_pos = random.choice(list(itertools.combinations(list(range(1, total_num)), 3)))
a_num, A_num, dig_num, sp_num =

lis = (
       +
       +
       + )
random.shuffle(lis)
password = ''.join(lis)
页: [1]
查看完整版本: 随机产生一个8到12位密码