You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 07:12:18