Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python “如何修复”;未定义“n”;此代码中存在错误_Python_Math - Fatal编程技术网

Python “如何修复”;未定义“n”;此代码中存在错误

Python “如何修复”;未定义“n”;此代码中存在错误,python,math,Python,Math,我知道这是一段糟糕的代码,可能不清楚我想用它实现什么。我只是从编码开始 基本上,我需要找出是否存在这样的正整数n,它将n*(n+1)(n**2+1)+1变成一个完美的正方形。我确信3满足了目标,但即使知道这个事实,我也无能为力 很明显,应该有一个循环来检查n>1的值,但我似乎不知道如何写下它而不导致n未定义错误。我试图通过输入函数手动定义n,但结果是:Int。。。无法呼叫。 #n*(n+1)(n**2+1)+1 输入数学 n=int(n) m=n*(n+1)(n**2+1)+1 当n>1时: 如

我知道这是一段糟糕的代码,可能不清楚我想用它实现什么。我只是从编码开始

基本上,我需要找出是否存在这样的正整数
n
,它将
n*(n+1)(n**2+1)+1
变成一个完美的正方形。我确信
3
满足了目标,但即使知道这个事实,我也无能为力

很明显,应该有一个循环来检查
n>1的值,但我似乎不知道如何写下它而不导致
n未定义
错误。我试图通过输入函数手动定义
n
,但结果是:
Int。。。无法呼叫。

#n*(n+1)(n**2+1)+1
输入数学
n=int(n)
m=n*(n+1)(n**2+1)+1
当n>1时:
如果math.sqrt(m)=int:
打印(n)
打破
这就是您想要的:

import math
#get a input num
n = int(input('type a num:\n'))
#options that are open:
m = n*(n+1) + (n**2+1)+1 # add
#m = n*(n+1) * (n**2+1)+1 = mul
#m = n*(n+1) / (n**2+1)+1 = div
#m = n*(n+1) - (n**2+1)+1 = sub
#n > 1?
if n > 1 :
    #if the types are the same
    if type(math.sqrt(m)) == type(int):
        print(n)
    #else print the other info about what could be going wrong
    else:
        print(math.sqrt(m))
        print(n)

我认为这就是你想要实现的目标:

import math
n = int(input()) #taking input from user
m = n*(n+1)*(n**2+1)+1 #defining m
o = math.sqrt(m) #taking squareroot 
if int(o) == o: 
   print(str(n) + ' fits the criteria!')
else:
   print(str(n) + ' does not fit the criteria.')

首先需要用一个初始值定义n。 然后,您可以测试m的平方根是否是一个整数,因此m是一个完美的平方,并且您还需要为下一次迭代增加n

import math
n = 2
while n > 1 :
    m = n*(n+1)(n**2+1)+1
    if math.sqrt(m).is_integer():
        print(n)
        break
    else:
        n+=1

n
没有定义,因为您的代码说
n=(int)n
并且
n
以前从未定义过,所以请尝试在语句
int(n)中放一行,写上:
n=
,然后是一个值。

您使用
n
在定义之前…如何定义n可以是>=1的任何数字?@GOGA您不需要这样做。在Python中,变量没有类型。@gmds好的,所以我需要创建一个列表?我真的很困惑欢迎来到Python等等。因此,您需要编写一个循环来测试n>=1以上的所有正整数。最明显的是一个for/while循环,它从n=1开始,在该值下测试条件,如果满足则打印/中断,并向上计数。n开始时未初始化。但是,
n=int(n)
没有做任何事情,也没有用任何值初始化n。它并没有声明“n是某个int(其值我们还不知道)”;我认为您混淆了Python和Java/C。在Python中,我们没有单独声明变量的类型;我们只是初始化它们。因此:一般来说,将n初始化为1,更喜欢
isinstance
而不是检查类型相等性。
math.sqrt(4)=2.0
。您的
类型(int)
测试将失败。。。您还需要为每个
n
更新
m
。您也可以调用
input
,不带任何参数。应该是
is_integer()
。。。可以肯定的是:
mm=round(math.sqrt(m));如果mm**2==m:…
这看起来像我需要的,但是你的代码中有一个错误,我认为最好给出操作提示,指出他们代码中的错误,并引导他们自己找到它们,而不是仅仅用勺子向他们提供解决方案。