#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. вы мне очень помогаете, большое спасибо, я надеюсь, что у вас будет хороший день