如何在不调用Python中的整个函数的情况下访问一个函数中的变量值?



我遇到的问题是,在我的一个函数(函数range_and_number())中,我要求用户输入,并且我将此输入保存在一个名为max number的变量中。接下来我检查了一下,确保这个值里面只有数字,如果有,我就中断循环。

def range_and_number():
while True:
max_number = input("Max Number Possible (No Decimals): ") 
if max_number.isnumeric() == True:
print("Your Good")
max_number = int(max_number)
break
else:
print("Please Re-Type Your Maximum Number: ")
return max_number
def get_length():
lives = len(range_and_number)

return lives
def main():
s = get_length()
print(f"================= {s} =================")

问题:我想访问的值max number在另一个函数(函数get_length())中,因为在这个函数中,我想测量变量'max number'中的字符长度。

得到的错误是:

lives = len(range_and_number)                                
TypeError: object of type 'function' has no len()

我明白为什么我得到错误,但我如何解决它。如何在不调用函数本身的情况下访问存储在max_number中的值?

注:如果你有时间,请张贴尽可能多的可能的解决方案。提前感谢

(What I tried)

  • 我尝试使用全局变量并在我的函数
  • 的顶部创建它我将全局变量命名为TE
  • 然后,我做了TE = max_number
  • 之后,我尝试在第二个函数中访问TE,但它不起作用

需要在函数名后面加上()来调用它

你不能得到一个整数的长度,所以你需要把它转换成一个字符串来调用len()

def get_length():
lives = len(str(range_and_number()))

return lives

Issue:我想在另一个函数(function get_length())中访问max number的值,因为在这个函数中,我想测量变量'max number'中的字符长度。

  • 我尝试使用全局变量并在我的函数
  • 的顶部创建它

不要使用全局变量。在main函数中使用变量

def range_and_number():
while True:
max_number_as_string = input("Max Number Possible (No Decimals): ")
try:
max_number = int(max_number_as_string)
print("You're good.")
return max_number
except ValueError:
print("Please Re-Type Your Maximum Number.")
def get_length(n):
return len(str(n))
def main():
max_number = range_and_number()
lives = get_length(max_number)
print('Lives:      {}'.format(lives))
print('Max number: {}'.format(max_number))
if __name__ == '__main__':
main()

输出:

Max Number Possible (No Decimals): hello
Please Re-Type Your Maximum Number.
Max Number Possible (No Decimals): 127.5
Please Re-Type Your Maximum Number.
Max Number Possible (No Decimals): 127
You're good.
Lives:      3
Max number: 127

您必须调用该函数并将其转换为字符串:

s = range_and_number().__str__().__len__()

或在将其转换为int之前打印len(max_number)

或者你可以在转换成int后使用对数来计算长度,当你已经有了字符串的长度时,这将是不必要和低效的。

妙招:

Y = lambda f: (lambda x: x(x))(lambda y: f(lambda *args: y(y)(*args)))
range_and_number = lambda f: lambda s: (s.__len__() if (s:=input(s)) and s.isnumeric() else f("Please Re-Type Your Maximum Number: n"))
print("================= %d ================="%Y(range_and_number)('Max Number Possible (No Decimals): n'))

get_length函数应该调用range_and_number函数。你的代码应该是这样的:

def range_and_number():
while True:
max_number = input("Max Number Possible (No Decimals): ") 
if max_number.isnumeric() == True:
print("Your Good")
max_number = int(max_number)
break
else:
print("Please Re-Type Your Maximum Number: ")
return max_number
def get_length():
lives = len(str(range_and_number()))

return lives
def main():
s = get_length()
print(f"================= {s} =================")

最新更新