Ошибка имени: имя «параметр» не определено

#python

Вопрос:

Поэтому у меня возникла эта проблема с моим кодом. В нем говорится::

«Ошибка имени: имя «токен» не определено.

Я пишу генератор токенов (например, генератор паролей) и создал функцию, которая называется buy_tokens(token) . Даже после выполнения функции он не считывает параметр, переданный в buy_token функции. Чтобы лучше понять, прочтите код:

 from random import randint
import string
import time
import random
import os

print("Tokens are saved to your tokens.txt file. n n n")



# Layer 2(2)-3: Open and write token in file, (def(openfile function))
def openfile(token):
    save_path = r"C:UsersUserDesktop"
    file_name = "tokens.txt"
    full_name = os.path.join(save_path, file_name)
    print(full_name)
    file1 = open(full_name, "w")
    file1.write(str(token))
    file1.close()


# Layer 2(2): Generate tokens
def token_generator() -> object:
    print("Welcome to a token generator, for free. Coded by Thomas.")
    token_length = int(input("nEnter the length of the token you want to generate:   n"))
    token_word = input("Enter the word you want your token to include so that you can remember it: (Unnecessary)   n")
    print("Generating token.......")
    time.sleep(random.randint(1, 60))
    print("nToken is used to generate random string for profile confusion. Token saved in your tokens.txt file.: n")
    lower = string.ascii_lowercase
    upper = string.ascii_uppercase
    num = string.digits
    symbols = string.punctuation

    all = lower   upper   num   symbols

    temp = random.sample(all, token_length)
    token = "".join(temp)

    all = string.ascii_letters   string.digits   string.punctuation

    generated_token = "".join(random.sample(all, token_length))
    print(token   token_word)
    return openfile(str(token))


# Layer 2(1): Buy tokens
def buy_tokens(token):
    total_dirtycoins = 150
    print("Welcome to out token store. Buy tokens. Each token costs 50 dirtycoins. You currently have 150 dirtycoins")
    print("Buy small token: 50 DC (1).n Buy medium token: 100 DC (2).n Buy Big token: 150 DC (3).")
    selection_mode = input("Type '1' for option one. '2' for option 2 and '3' for option 3.:n Answer:       ")
    if selection_mode == "1":
        total_dirtycoins -= 50
        print("You bought a small token. Token stored in tokens.txt folder in your desktop")
        print(f"You have {total_dirtycoins} tokens left.")
        return openfile(token)
    elif selection_mode == "2":
        total_dirtycoins -= 100
        print("You bought a medium token. Token stored in tokens.txt folder in your desktop")
        print(f"You have {total_dirtycoins} tokens left.")
        return openfile(token)
    elif selection_mode == "3":
        total_dirtycoins -= 150
        print("You bought a big token. Token stored in tokens.txt folder in your desktop")
        print(f"You have {total_dirtycoins} tokens left.")
        return openfile(token)
    else:
        print("Could not complete purchase. Permission denied. Error {0}")


# Layer 1: Select market

select_market = input("Select markets: Option 1: Generate tokens. Option 2: Buy tokens.n")
if select_market == "1":
    token_generator()

elif select_market == "2":
    buy_tokens(token)

else:
    print("No market found, Permission denied.")
 

Я знаю, что у меня есть некоторые ошибки, но я хочу исправить их шаг за шагом. Во-первых, вызвана ошибка, о которой я упоминал NameError , а во-вторых, она выводит функцию, а не сгенерированный токен. Я этого не понимаю , потому что в первой вызванной функции generate_token она выводит сгенерированный токен, и когда я запускаю функцию buy_tokens(token) , она выводит функцию. Пример:
<function token_generator at 0x000001380F489E50> . Почему это происходит во второй функции и почему я получаю ошибку имени? Спасибо, что уделили мне время.

Комментарии:

1. token не определены. В чем заключается ценность token ?

2. @Sujay что ты имеешь в виду?

3. token это параметр, который используется только внутри функции. Когда вы проходите token , python извлекает значение token . Но он не знает, в чем заключается значение, потому что вы никогда его не присваивали. Итак, ошибка

4. @Sujay Так что же мне делать?

5. определите token , что-нибудь?

Ответ №1:

Во-первых, измените способ генерации токена, вы должны использовать модуль secrets в python для генерации токенов и прочего, что используется для криптографических целей, например:

 >>> import secrets
>>> secrets.token_hex(16)
'8f42a73054b1749f8f58848be5e6502c'
 

Это лучший способ сделать это,:

 import secrets
def token_generator() -> object:
    print("Welcome to a token generator, for free. Coded by Thomas.")
    token_length = int(input("nEnter the length of the token you want to generate:   n"))
    print("Generating token.......")
    print("nToken is used to generate random string for profile confusion. Token saved in your tokens.txt file.: n")

    generated_token = secrets.token_hex(token_length)
    print(generated_token)
    return openfile(str(generated_token))
 

Итак, на моей машине вариант 1 работает так, как задумывалось, для варианта 2, который называется buy_tokens, вы передаете объект под названием «токен», но вы его еще не сгенерировали, поэтому сначала вам нужно сгенерировать токен, чтобы передать его функции buy_tokens (). вы можете достичь этого, используя ту же функцию, что и выше, поэтому для варианта 2 сначала просто вызовите token_generator или, чтобы использовать уже созданный токен, вы можете прочитать файл prvsly, созданный следующим образом:

 elif select_market == "2":
    token_generator()
    f = open("C:\Users\Desktop\tokens.txt", "r")
    token = f.read()
    f.close()
    buy_tokens(token)
 

Теперь весь код работает так, как вы задумали. Вот краткое изложение всего кода:

 import secrets
import os

print("Tokens are saved to your tokens.txt file. n n n")



# Layer 2(2)-3: Open and write token in file, (def(openfile function))
def openfile(token):
    save_path = r"C:UsersmayanDesktop"
    file_name = "tokens.txt"
    full_name = os.path.join(save_path, file_name)
    print(full_name)
    file1 = open(full_name, "w")
    file1.write(str(token))
    file1.close()


def token_generator() -> object:
    print("Welcome to a token generator, for free. Coded by Thomas.")
    token_length = int(input("nEnter the length of the token you want to generate:   n"))
    print("Generating token.......")
    print("nToken is used to generate random string for profile confusion. Token saved in your tokens.txt file.: n")

    generated_token = secrets.token_hex(token_length)
    print(generated_token)
    return openfile(str(generated_token))


# Layer 2(1): Buy tokens
def buy_tokens(token):
    total_dirtycoins = 150
    print("Welcome to out token store. Buy tokens. Each token costs 50 dirtycoins. You currently have 150 dirtycoins")
    print("Buy small token: 50 DC (1).n Buy medium token: 100 DC (2).n Buy Big token: 150 DC (3).")
    selection_mode = input("Type '1' for option one. '2' for option 2 and '3' for option 3.:n Answer:       ")
    if selection_mode == "1":
        total_dirtycoins -= 50
        print("You bought a small token. Token stored in tokens.txt folder in your desktop")
        print(f"You have {total_dirtycoins} tokens left.")
        return openfile(token)
    elif selection_mode == "2":
        total_dirtycoins -= 100
        print("You bought a medium token. Token stored in tokens.txt folder in your desktop")
        print(f"You have {total_dirtycoins} tokens left.")
        return openfile(token)
    elif selection_mode == "3":
        total_dirtycoins -= 150
        print("You bought a big token. Token stored in tokens.txt folder in your desktop")
        print(f"You have {total_dirtycoins} tokens left.")
        return openfile(token)
    else:
        print("Could not complete purchase. Permission denied. Error {0}")


# Layer 1: Select market

select_market = input("Select markets: Option 1: Generate tokens. Option 2: Buy tokens.n")
if select_market == "1":
    token_generator()

elif select_market == "2":
    token_generator()
    f = open("C:\Users\mayan\Desktop\tokens.txt", "r")
    token = f.read()
    f.close()
    buy_tokens(token)

else:
    print("No market found, Permission denied.")
 

Комментарии:

1. вы мне очень помогаете, большое спасибо, я надеюсь, что у вас будет хороший день