想想Python练习5.2,检查Ferm

2024-09-30 00:22:45 发布

您现在位置:Python中文网/ 问答频道 /正文

用户被要求输入a、b、c和n。n必须大于2,所以我在checkn()中进行检查。做这件事可能有一个简单得多的方法;如果有,请告诉我!在

回溯显示“错误:未定义名称‘n’”。我假设我对局部变量和全局变量有些困惑,但我不确定如何避免我的这个错误。在

我误解了什么?在

这是我的代码:

import math

def fermat():
    if (a**n) + (b**n) == (c**n):
        print('Holy smokes, Fermat was wrong!')
    else:
        print("No, that doesn't work")

def checkn():
    print('insert n, must be greater than 2')
    n = int(input())
    if n <= 2:
        print('n must be greater than 2')
        checkn()
    else:
        fermat()

a = int(input('input a\n'))
b = int(input('input b\n'))
c = int(input('input c\n'))

checkn()

Tags: 方法用户inputifdef错误beelse
2条回答

是的。您正试图将本地作用域n变量访问到checkn函数。解决这个问题最简单的方法是让fermat函数接受一个参数,然后在checkn函数中,将n传递给fermat。在

定义fermat以获取参数:

我将参数改为x,只是为了帮助隔离n变量不相同的事实。您正在将值传递给函数。在

def fermat(x):
    if (a**x) + (b**x) == (c**x):
        print('Holy smokes, Fermat was wrong!')
    else:
        print("No, that doesn't work")

checkn函数中,将n传递给fermat(仅显示相关部分):

^{pr2}$

只是为了完成添加。(通过重新构造代码,不必向函数调用传递任何变量)

def fermat():
    N = powN;
    while N <= 2:
        N = int(input("Please enter pow > 2: \n"));
    if (a**N) + (b**N) == (c**N):
        print("Fermat is wrong my holy!!");
    else:
        print("That doesn't work");

a = int(input("Enter x: \n"));
b = int(input("Enter y: \n"));
c = int(input("Enter z: \n"));
powN = int(input("Enter pow: \n"));

fermat();

相关问题 更多 >

    热门问题