'str' 对象在 python 中不可调用
'str' object is not callable in python
我在 password()
函数中调用这个函数 password()
,希望它能重新开始。然后是 'str' 对象错误。
代码:
import time
def sleepFor(sleepForInt):
time.sleep(sleepForInt / 1000)
def newScreen(): # adte it says
for itemNew in range(26):
print("\n")
def logo(): # ^~-
newScreen()
print("\t\t\t\tLeigh Studio")
indent(6)
return None
def indent(space): # adte it says
for item in range(space):
print("\n")
def password():
userName = input("Enter registered UserName > ")
user = userName
indent(1)
if userName == "leigh flix":
confirm = input("Confirm UserName (y/n) > ")
indent(2)
if confirm == "y":
password = input("\tenter password ) ")
if password == "comics123":
menu()
else:
print("Password is Incorrect")
sleepFor(2000)
password()
else:
password()
else:
print("No registered UserName as: " + user)
sleepFor(2000)
password()
def printID():
print("C:/users/" + user)
def menu():
response = input(printID())
while response != "quit":
if response == "time":
time.ctime()
def main(): # main method
logo()
sleepFor(1200)
newScreen()
password()
# ___Runs program___
main()
错误:
不知道是在说userName = input("Enter registered userName")
还是别的什么。哦,顺便说一句,这不是编译错误而是运行时错误,如果我没有输入正确的密码(即 'comics123')。
我要问的问题 是否有不同的方式调用 password()
在没有出现此错误的情况下运行,或者在密码不正确时重复询问用户的方法。提前致谢。
您的问题出在这一行:
password = input("\tenter password ) ")
在该范围内的 password
这一行之后是这个字符串变量,而不是函数。只需将此变量重命名为其他名称即可解决此问题。
if confirm == "y":
password = input("\tenter password ) ")
您在这里定义了一个名为 password
的变量,它隐藏了在顶层定义的 password()
函数。
if password == "comics123":
menu()
else:
print("Password is Incorrect")
sleepFor(2000)
password()
在这里,您尝试调用作为输入获得的字符串,就好像它是一个方法一样。
您需要做的是为字符串和函数使用不同的名称。我建议将函数调用为 request_password
或 input_password
.
password()
调用失败,因为您错误地选择将标识符 password
覆盖为局部变量(通过 password = input("\tenter password ) ")
语句!),因此隐藏了全局(函数)名字与之吻合。对局部变量使用 different 标识符,例如 passwd = input("\tenter password ) ")
(然后当然使用 passwd
来引用刚刚输入的字符串!-)你会没事。
我在 password()
函数中调用这个函数 password()
,希望它能重新开始。然后是 'str' 对象错误。
代码:
import time
def sleepFor(sleepForInt):
time.sleep(sleepForInt / 1000)
def newScreen(): # adte it says
for itemNew in range(26):
print("\n")
def logo(): # ^~-
newScreen()
print("\t\t\t\tLeigh Studio")
indent(6)
return None
def indent(space): # adte it says
for item in range(space):
print("\n")
def password():
userName = input("Enter registered UserName > ")
user = userName
indent(1)
if userName == "leigh flix":
confirm = input("Confirm UserName (y/n) > ")
indent(2)
if confirm == "y":
password = input("\tenter password ) ")
if password == "comics123":
menu()
else:
print("Password is Incorrect")
sleepFor(2000)
password()
else:
password()
else:
print("No registered UserName as: " + user)
sleepFor(2000)
password()
def printID():
print("C:/users/" + user)
def menu():
response = input(printID())
while response != "quit":
if response == "time":
time.ctime()
def main(): # main method
logo()
sleepFor(1200)
newScreen()
password()
# ___Runs program___
main()
错误:
不知道是在说userName = input("Enter registered userName")
还是别的什么。哦,顺便说一句,这不是编译错误而是运行时错误,如果我没有输入正确的密码(即 'comics123')。
我要问的问题 是否有不同的方式调用 password()
在没有出现此错误的情况下运行,或者在密码不正确时重复询问用户的方法。提前致谢。
您的问题出在这一行:
password = input("\tenter password ) ")
在该范围内的 password
这一行之后是这个字符串变量,而不是函数。只需将此变量重命名为其他名称即可解决此问题。
if confirm == "y":
password = input("\tenter password ) ")
您在这里定义了一个名为 password
的变量,它隐藏了在顶层定义的 password()
函数。
if password == "comics123":
menu()
else:
print("Password is Incorrect")
sleepFor(2000)
password()
在这里,您尝试调用作为输入获得的字符串,就好像它是一个方法一样。
您需要做的是为字符串和函数使用不同的名称。我建议将函数调用为 request_password
或 input_password
.
password()
调用失败,因为您错误地选择将标识符 password
覆盖为局部变量(通过 password = input("\tenter password ) ")
语句!),因此隐藏了全局(函数)名字与之吻合。对局部变量使用 different 标识符,例如 passwd = input("\tenter password ) ")
(然后当然使用 passwd
来引用刚刚输入的字符串!-)你会没事。