我正在研究一个实验项目(创建一个基本的谜机机制),并且在重新分配变量时遇到了问题。我有一个"检查"检查以确保用户输入的值是1到26之间的数字的函数,如果不是,它再次调用输入函数,询问新值。如果我输入1到26之间的数字(例如:4),一切正常,但是,如果我输入29或" qwerty",它开始变得混乱。它再次调用输入函数(如预期的那样),如果我然后输入4作为值,变量将被指定为"无"。
我该如何解决这个问题?
工作时的CLI输出(例如:输入4):
What is the message you would like to encrypt?as
For the next 3 questions, please input ONLY a number from 1 to 26
What is the first key value?4
4
失败时的CLI输出(例如:输入28然后输入4):
What is the message you would like to encrypt?asd
For the next 3 questions, please input ONLY a number from 1 to 26
What is the first key value?28
You must input a number between 1 and 26!
What is the first key value?4
None
代码:
class Input:
def message():
msg = input("What is the message you would like to encrypt?")
msg = msg.upper()
print("\n For the next 3 questions, please input ONLY a number from 1 to 26")
def check(input):
try:
if int(input) < 1 or int(input) > 26:
return False
else:
return True
except:
return False
def getKey(keyNum):
word = ""
if keyNum == 1:
word = "first"
elif keyNum == 2:
word = "second"
else:
word = "third"
s = input("What is the {} key value?".format(word))
chk = Input.check(s)
if chk:
return(s)
else:
print("You must input a number between 1 and 26!")
Input.getKey(1)
inp = Input
inp.message()
s1 = inp.getKey(1)
print(s1)
答案 0 :(得分:0)
问题来自您的getKey()
功能:
def getKey(keyNum):
...
chk = Input.check(s)
if chk:
return(s)
else:
print("You must input a number between 1 and 26!")
Input.getKey(1)
如果第一次调用Input.check(s)
返回True
,则getKey()
会返回输入的值。但如果第一次调用返回False
,则getKey()
不会返回任何内容。它会再次请求输入,但是它从不会将输入传回给需要它的代码。您需要做的是向return
块添加适当的else
语句,以便返回来自getKey()
的递归调用的值。
答案 1 :(得分:0)
在您的代码中:
if chk:
return(s)
else:
print("You must input a number between 1 and 26!")
Input.getKey(1)
当chk
是&#34; truthy&#34; - 也就是说,当if chk:
成功时 - 您返回s
。
但是当else:
运行时,你不会返回任何东西。相反,你递归到getKey(1)
(这是错误的 - 你应该使用参数,如果它是2或3)。
现在,对getKey(1)
的递归调用将返回一个值。但是你忽略了这个价值而又没有回来。
既然你不回到那个分支,你就会经历&#34;到函数的最后,Python的默认机制开始了:如果函数没有返回任何值,Python会自动提供None
作为结果。
您在else:
案件中所获得的内容。
答案 2 :(得分:0)
你已经创建了类名Input
,所以它的类函数应该在它们中有第一个参数self也从内部函数调用相同的函数,我们将通过self.name
函数调用它,这样它就不会为其他变量调用其他函数但存在。
一个小错误就是调用Input.getKey(1)
,它应该像self.getKey(keyNum)
一样正确地提供当前密钥。
class Input:
def message(self):
msg = input("What is the message you would like to encrypt?")
msg = msg.upper()
print("\n For the next 3 questions, please input ONLY a number from 1 to 26")
def check(self,input):
try:
if int(input) < 1 or int(input) > 26:
return False
else:
return True
except:
return False
def getKey(self,keyNum):
word = ""
if keyNum == 1:
word = "first"
elif keyNum == 2:
word = "second"
else:
word = "third"
s = input("What is the {} key value?".format(word))
chk = self.check(s)
if chk:
return s
else:
print("You must input a number between 1 and 26!")
return self.getKey(keyNum)
inp = Input()
inp.message()
s1 = inp.getKey(1)
print(s1)
在类变量here
中调用成员函数的正确方法看到它正常工作here