Python密码生成器报错:'function'对象无法被解释为整数,求解决
问题解决:TypeError: 'function' object cannot be interpreted as an integer
错误根源
你犯了两个关键错误:
char_length()函数里,最后只写了return,没有返回你输入的长度数值,导致函数执行后默认返回None;- 调用
random_pass时,你传的是char_length(这是函数本身的引用),而不是执行函数得到的整数结果char_length()。range()需要整数参数,传入函数对象自然会报错。
修正步骤
- 修改
char_length()函数,把return改成return char_length,确保返回用户输入的合法长度数值; - 调用
random_pass时,传入char_length()的执行结果,而不是函数名; - 顺带修正原代码
No分支的逻辑错误:原代码直接把生成的密码赋值给characters,变量名逻辑混乱,调整为先定义字符集再生成密码。
修正后的完整代码
import random import string def char_length(): while True: char_length = input("How many characters would you like your password to be? ") if char_length.isdigit() and 0 < int(char_length) < 51: char_length = int(char_length) return char_length # 返回合法的长度数值 else: print('Response must be a number between 0 and 50') def random_pass(length): while True: spec_char = input("Would you like special characters in your password? ") if spec_char == "Yes": characters = string.ascii_letters + string.digits + string.punctuation password = ''.join(random.choice(characters) for i in range(length)) print("Your password is: ", password) return elif spec_char == "No": characters = string.ascii_letters password = ''.join(random.choice(characters) for i in range(length)) print("Your password is: ", password) return else: print("Please only type Yes or No") # 传入函数执行后的长度数值 random_pass(char_length())
内容的提问来源于stack exchange,提问作者phldlphegls1
相关产品推荐
相关产品推荐

