所以,我是一个新的python程序员,我正在制作一个密码生成器,但它的名称没有定义。
这是我的代码:
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)发布于 2019-04-06 07:58:45
首先,你的缩进有点不对劲(也许只是你发布它的方式?)。然而,您也没有从您的函数return任何值,因此将不能访问您想要的nam或number。您可以调整脚本以返回这些变量,然后更改pas的定义以调用这些函数。类似于:
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,它们是非常无用的)
发布于 2019-04-06 08:02:52
这里有local variables和global variables。
您在gen()中创建nam,它是一个局部变量,它只存在于gen()内部,而不存在于gen()外部。
但是在gen()之外,您会尝试从nam获取价值
pas = nam + nam + number + number + nam + number但是Python不知道如何从gen()之外不存在的变量中获取值。
在gen()内部,您可以使用return nam将值从函数发送到外部函数。
然后,您可以运行gen()并将返回值传递给变量。它可以是nam。
nam = gen()这样,您就可以创建存在于get()外部但不存在于get()内部的局部变量nam。对于Python,它将是两个不同的变量。
在function num()中使用number也有同样的问题
我将使用string.digits而不是string.ascii_letters(num) (这是不正确的)和num
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
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
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)https://stackoverflow.com/questions/55544591
复制相似问题