Python函数中启动菜单的完善问题求助
我帮你梳理下代码里的问题,以及对应的修复方案,这些应该就是你报错的根源:
1. 函数定义顺序错误(最关键的报错原因)
Python是解释型语言,代码从上到下执行。你把main()函数写在了所有工具函数(printSum、reverse_int等)的前面,当程序执行到main()里调用这些函数的语句时,它们还没被定义,直接会抛出NameError。
修复:把main()函数移到所有其他函数的后面,确保调用函数前已经完成定义。
2. 函数名拼写不匹配
你在main()里调用的是reverseInt(num),但实际定义的反转函数是reverse_int(n)(下划线+小写命名),大小写和命名格式不一致,导致程序找不到这个函数。
修复:统一函数名,遵循Python的下划线命名法,把main()里的调用改成reverse_int(num)。
3. reverse_int函数的返回值逻辑错误
当前reverse_int函数是直接打印反转后的数字,没有返回值,但你在main()里写的是print(str(reverseInt(num)))——这会先执行reverse_int(打印结果),然后额外打印一个None(因为函数没有返回值)。
修复:让reverse_int返回反转后的数字,而不是直接打印:
def reverse_int(n): reverse = 0 while n > 0: reminder = n % 10 reverse = (reverse * 10) + reminder n = n // 10 return reverse # 替换原来的print语句
然后main()里的对应调用改成print(reverse_int(num))即可。
4. 循环写法可以优化(非报错,但代码更易读)
你用while 1 == 1表示无限循环虽然能运行,但Python里更推荐用while True,可读性更强。比如输入正整数的循环可以改成:
while True: num = int(input("Enter positive Integer: ")) if num <= 0: print("You have entered negative integer or zero.") else: break
修复后的完整代码
def printSum(n, reverse): s = sum(range(n+1)) if reverse: print('+'.join(str(i) for i in range(1, n+1)) + ' = ' + str(s)) else: print('+'.join(str(i) for i in range(n, 0, -1)) + ' = ' + str(s)) def reverse_int(n): reverse = 0 while n > 0: reminder = n % 10 reverse = (reverse * 10) + reminder n = n // 10 return reverse def printProductTable(n): for row in range(1, n+1): print(*("{:3}".format(row*col) for col in range(1, n+1))) def main(): menuOption = 0 while True: print("1. Expanded Sum\n2. Reverse Expanded Sum\n3. Reverse Integer\n4. Product Table\n5. Exit\n") menuOption = int(input("Enter correct menu option: ")) while menuOption < 1 or menuOption > 5: print("Incorrect menu option!!") menuOption = int(input("Enter correct menu option: ")) if menuOption == 5: return # 输入正整数验证 while True: num = int(input("Enter positive Integer: ")) if num <= 0: print("You have entered negative integer or zero.") else: break if menuOption == 1: printSum(num, int(False)) elif menuOption == 2: printSum(num, int(True)) elif menuOption == 3: print(reverse_int(num)) elif menuOption == 4: printProductTable(num) if __name__ == "__main__": main()
内容的提问来源于stack exchange,提问作者gonnaflynow720
相关产品推荐
相关产品推荐

