为什么此Python密码生成器不起作用,nam已明确定义

时间:2019-04-05 23:43:05

标签: python passwords

所以,我是一个新的python编码器,我正在制作一个密码生成器,但是它的名字nam未定义。

这是我的代码:

$(".some-select").on("change", function(){
    alert('yes');
});

2 个答案:

答案 0 :(得分:0)

首先,您的缩进有些偏离(也许只是您发布的方式?)。但是,您也不会use warnings; use strict; use Getopt::Std getopts('i'); our($opt_i) my $DESIRED_LENGTH = $opt_i; while (<>) { chomp; # remove trailing newline if (m/^>/) { # if line starts with '>' print "$_\n"; # just print it } else { my $i = 0; while ($i + $DESIRED_LENGTH <= length($_)) { print substr($_, $i, $DESIRED_LENGTH); print "\n"; $i++; } } } 使用函数中的任何值,因此将无法按预期访问nslookup mach_name int main(int argc, char** argv) { dequeue(); // to take junk values out of the queue // initialize all values pthread_mutex_init(&workLock, NULL); pthread_cond_init(&canTake, NULL); pthread_cond_init(&canPut,NULL); char *dict = NULL, *port = NULL; int newsockfd; // to create the socket conditions struct sockaddr_in clienaddr; // to get the client info socklen_t clilen; pthread_t threads[NUM_WORKERS]; // for the thread id if(argc < 2){ dict = DEFAULT_DICT; port = DEFAULT_PORT; } else { dict = argv[1]; port = argv[2]; } for (int i = 0; i < NUM_WORKERS; i++) { pthread_create(&(threads[i]), NULL, (void *) &worker,NULL); } load_table(dict); // load the table int listenfd, portno; struct sockaddr_in server; socklen_t srv_len = sizeof(server); listenfd = socket(AF_INET, SOCK_STREAM, 0); if(listenfd < 0){ perror("socket failed"); exit(EXIT_FAILURE); } // changes all the buffers to 0 bzero((char *) &server, sizeof(server)); // changes the port into a number portno = atoi(port); server.sin_addr.s_addr = INADDR_ANY; server.sin_family = AF_INET; server.sin_port = htons(portno); //binds the port to the listenfd if(bind(listenfd, (struct sockaddr *) &server, srv_len)< 0){ perror("bind failed"); exit(EXIT_FAILURE); } // waits for incoming connections if(listen(listenfd,BACKLOG) < 0){ close(listenfd); perror("listen failed"); exit(EXIT_FAILURE); } clilen = sizeof(clienaddr); bzero((char *) &clienaddr, sizeof(clienaddr)); // listenfd = getlistenfd(port); // get the listen fd while(1){ newsockfd = accept(listenfd, (struct sockaddr *) &clienaddr, &clilen); // accept a connection pthread_mutex_lock(&workLock); // make sure only one thread can access the queue while(size == MAXSIZE) pthread_cond_wait(&canPut, &workLock); // make sure main thread is put to sleep if there is no space for the queue enqueue(newsockfd); // add the socket to the queue pthread_cond_signal(&canTake); // signal that worker threads can take from the queue pthread_mutex_unlock(&workLock); // unlock so another socket can be added } close(listenfd); return (EXIT_SUCCESS); } 。您可以调整脚本以返回这些变量,然后更改return的定义以调用这些函数。像这样:

nam

导致:number被打印(当我运行它时,您的输出将有所不同)。

我建议您回顾一下创建函数和范围,因为主要错误是试图从全局范围访问局部变量,而实际上没有让您的函数执行任何操作(如果没有pas,它们将毫无用处)< / p>

答案 1 :(得分:0)

local variablesglobal variables

您在nam内创建gen(),这是局部变量,仅存在于gen()内部,而没有gen()外部。

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

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

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

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

然后您可以运行gen()并将返回的值分配给变量。它可以是nam

nam = gen()

通过这种方式,您可以创建局部变量nam,该变量位于get()外部,但不在get()内部。对于Python,它将是两个不同的变量。

函数number中的num()遇到相同的问题

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

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)