Python阶乘函数两处问题求助:语法错误与大小写判断失效
让我们一步步解决你遇到的两个问题:
1. 语法错误与逻辑问题
你修改后的print语句缺少了右括号,这直接导致了语法报错。除此之外还有个隐藏的逻辑bug:在while循环中你不断将number减1,循环结束后number的值会变成0,这时候用它来打印的话,输出会变成Factorial of 0 is xxx,显然不符合预期。
解决方法是先把用户输入的数字保存到一个独立变量中,循环时修改复制后的变量即可:
def fact(): original_num = int(input('Please enter a number: ')) number = original_num # 复制一份用于循环操作,保留原始输入值 tmp = 1 while number > 0: tmp *= number number -= 1 # 修复括号问题,同时用原始输入值展示 print("Factorial of %d is %d" % (original_num, tmp)) # 后续代码...
2. 大写Y无法触发重试的问题
你的判断条件if ('y' or 'Y') in ask:逻辑是错误的。在Python中,('y' or 'Y')会先计算逻辑表达式——因为'y'是真值,逻辑或运算会直接返回第一个真值,所以这个条件等价于if 'y' in ask:,自然大写Y不会触发重试分支。
有两种简洁的修复方式:
- 方式一:直接检查输入是否在指定的大小写列表中
if ask in ['y', 'Y']: - 方式二:将输入转为小写后判断(更简洁,还能兼容用户不小心输入空格的情况,比如
Y)if ask.strip().lower() == 'y':
完整修复后的代码
# Find factorial of a number... def fact(): original_num = int(input('Please enter a number: ')) number = original_num tmp = 1 while number > 0: tmp *= number number -= 1 print("Factorial of %d is %d" % (original_num, tmp)) ask = input('Do you want to try again... [y/n]: ') if ask.strip().lower() == 'y': fact() else: print('Thank you for using my tool. Good bye') fact()
内容的提问来源于stack exchange,提问作者Nafi Shahriyar
相关产品推荐
相关产品推荐

