我现在已经学习了大约3个星期的Python,所以我正在做的事情显然非常简单。我已经编写了几个程序来返回某些计算的值,并且我已经成功地在这些程序的函数中使用了异常。我目前正在处理的程序只是为了让我更多地练习编写函数,循环和异常。这是我到目前为止所得到的:
def factorial(n):
while n > 0:
return n * factorial(n-1)
return 1
print factorial(n)
def user():
n = int(raw_input("What number would you like to use?"))
try:
factorial(int(n))
except ValueError:
print "You must choose a number. Please try again."
return user()
if __name__ == '__main__':
user()
我无法弄清楚为什么user()
函数中的异常似乎没有运行。我运行此代码时得到的只是raw_input "What number would you like to use?"
。 factorial()
函数不会运行,如果有print
,我设置的return
或ValueError
语句也不会运行。任何人都可以帮我弄清楚为什么会这样(或者更确切地说不是)?
答案 0 :(得分:1)
有趣的是,所有代码都在运行!它只是没有显示任何内容,因为print
语句没有被调用!让我们分解用户功能,看看它是做什么的。
n = int(raw_input("What number would you like to use?"))
将用户键入的字符串转换为整数并将其存储到变量中(或者,如果您希望pythonic -ly正确,则为name)n
。
try:
factorial(int(n))
尝试将n
转换为整数(再次)并将所述整数发送到factorial
函数。请注意n
这里已经是一个整数!所以这将永远成功。只需调用该函数即可。
except ValueError:
print "You must choose a number. Please try again."
return user()
如果引发ValueError
,则打印错误消息,然后返回user
的值。
无论转换是否成功,我们都不会打印任何内容。我们只运行一个函数然后退出。我们运行什么功能?
def factorial(n):
while n > 0:
return n * factorial(n-1)
return 1
print factorial(n)
请注意,在此函数中,代码表示在返回值后打印值。函数返回后,运行return语句后不会发生任何操作。 print
语句不会被执行!因此,此函数正确计算阶乘(递归),并返回它。没别了!
这就是为什么你的程序似乎什么也不做。这个函数被调用,计算并返回答案。返回的答案完全被忽略了!
您的代码中有三个关键行定义了它为什么要做它正在做的事情。
n
中
ValueError
。b
,然后按Enter键,将引发异常(ValueError
)。n
转换为整数并将其传递给factorial
。
try
块(应该是),但n
已经是整数。 这就是您的异常代码永远不会运行的原因。 factorial
函数内,在return语句之后。它永远不会被执行。 这就是没有打印的原因。
factorial(n)
打印它返回的内容会更好!)我希望这有助于澄清代码的确切内容,我希望我能够回答你的问题!快乐的编码! :d
答案 1 :(得分:1)
以下是我的评论扩展为答案。
首先,不要在factorial
功能内打印。打印从该函数返回的值:
def factorial(n):
while n > 0:
return n * factorial(n-1)
return 1
>>> factorial(4)
24
接下来,在块的try
部分中包装您认为会导致异常的内容。在这种情况下,使用未知用户输入调用int
可能会导致异常;在尝试中包装 - 不再。最后,不要对用户输入使用递归。请改用while循环:
def user():
n=None
while not n:
user_int=raw_input("What number would you like to use? ")
try:
n=int(user_int)
except ValueError:
print "You must choose a number. Please try again."
print factorial(n)
if __name__ == '__main__':
user()
答案 2 :(得分:0)
首先,您必须print
factorial(int(n))
才能看到输出,
并删除输入的int
转换,
这是我修改后的代码:
def factorial(n):
2 while n > 0:
3 return n *factorial(n-1)
4 return 1
5 print factorial(n)
6
7
8
9
10 def user():
11 n = raw_input("What number would you like to use?")
12
13 try:
14
15 print factorial(int(n))
16 except ValueError:
17 print "You must choose a number. Please try again."
18 return user()
19
20 if __name__ == '__main__':
21 user()
希望这有帮助,