首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这个Python密码生成器不工作,nam定义得很清楚

为什么这个Python密码生成器不工作,nam定义得很清楚
EN

Stack Overflow用户
提问于 2019-04-06 07:43:05
回答 2查看 52关注 0票数 0

所以,我是一个新的python程序员,我正在制作一个密码生成器,但它的名称没有定义。

这是我的代码:

代码语言:javascript
复制
    import random
    import string

    def gen():
    let1 = random.choice(string.ascii_lowercase)
    let2 = random.choice(string.ascii_lowercase)
    let3 = random.choice(string.ascii_lowercase)
    let4 = random.choice(string.ascii_lowercase)
    let5 = random.choice(string.ascii_lowercase)
    nam = let1 + let2 + let3 + let4 + let5


    def num():
      num = '1234567890'
      number = random.choice(string.ascii_letters(num))

    pas = nam + nam + number + number + nam + number

    print(pas)
EN

回答 2

Stack Overflow用户

发布于 2019-04-06 07:58:45

首先,你的缩进有点不对劲(也许只是你发布它的方式?)。然而,您也没有从您的函数return任何值,因此将不能访问您想要的namnumber。您可以调整脚本以返回这些变量,然后更改pas的定义以调用这些函数。类似于:

代码语言:javascript
复制
import random
import string

def gen():
    let1 = random.choice(string.ascii_lowercase)
    let2 = random.choice(string.ascii_lowercase)
    let3 = random.choice(string.ascii_lowercase)
    let4 = random.choice(string.ascii_lowercase)
    let5 = random.choice(string.ascii_lowercase)
    nam = let1 + let2 + let3 + let4 + let5
    return nam

def num():
    num = '1234567890'
    number = random.choice(num)
    return number

pas = gen() + gen() + num() + num() + gen() + num() # call functions, not variables within them

print(pas)

结果:hjvcwvmnlx79rnmdp7被打印出来(当我运行它的时候,你的输出会有所不同)。

我建议你回顾一下创建函数和作用域,因为主要的错误是试图从全局作用域访问局部变量,而不是让你的函数实际做任何事情(如果没有return,它们是非常无用的)

票数 0
EN

Stack Overflow用户

发布于 2019-04-06 08:02:52

这里有local variablesglobal variables

您在gen()中创建nam,它是一个局部变量,它只存在于gen()内部,而不存在于gen()外部。

但是在gen()之外,您会尝试从nam获取价值

代码语言:javascript
复制
pas = nam + nam + number + number + nam + number

但是Python不知道如何从gen()之外不存在的变量中获取值。

gen()内部,您可以使用return nam将值从函数发送到外部函数。

然后,您可以运行gen()并将返回值传递给变量。它可以是nam

代码语言:javascript
复制
nam = gen()

这样,您就可以创建存在于get()外部但不存在于get()内部的局部变量nam。对于Python,它将是两个不同的变量。

在function num()中使用number也有同样的问题

我将使用string.digits而不是string.ascii_letters(num) (这是不正确的)和num

代码语言:javascript
复制
import random
import string

def gen():
    let1 = random.choice(string.ascii_lowercase)
    let2 = random.choice(string.ascii_lowercase)
    let3 = random.choice(string.ascii_lowercase)
    let4 = random.choice(string.ascii_lowercase)
    let5 = random.choice(string.ascii_lowercase)
    nam = let1 + let2 + let3 + let4 + let5
    return nam

def num():
    number = random.choice(string.digits)
    return number 

nam = gen()
number = num()
pas = nam + nam + number + number + nam + number

print(pas)

为了使它更简洁,我在函数中更改了名称--现在它只有一个nam和一个number

代码语言:javascript
复制
import random
import string

def gen():
    let1 = random.choice(string.ascii_lowercase)
    let2 = random.choice(string.ascii_lowercase)
    let3 = random.choice(string.ascii_lowercase)
    let4 = random.choice(string.ascii_lowercase)
    let5 = random.choice(string.ascii_lowercase)
    result = let1 + let2 + let3 + let4 + let5
    return result

def num():
    result = random.choice(string.digits)
    return result

nam = gen()
number = num()
pas = nam + nam + number + number + nam + number

print(pas)

我还可以删除变量result

代码语言:javascript
复制
import random
import string

def gen():
    let1 = random.choice(string.ascii_lowercase)
    let2 = random.choice(string.ascii_lowercase)
    let3 = random.choice(string.ascii_lowercase)
    let4 = random.choice(string.ascii_lowercase)
    let5 = random.choice(string.ascii_lowercase)
    return let1 + let2 + let3 + let4 + let5

def num():
    return random.choice(string.digits)

nam = gen()
number = num()
pas = nam + nam + number + number + nam + number

print(pas)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55544591

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档