写一个Python程序,不使用乘法或指数就可以找到一个数字的平方?

写一个Python程序,不使用乘法或指数就可以找到一个数字的平方?,python,for-loop,perfect-square,Python,For Loop,Perfect Square,感谢您的阅读,希望您能回答我的问题。我一直在尝试编写一个Python程序,它可以在不使用乘法或指数的情况下找到一个数字的平方。相反,我必须得到从1开始的第一个奇数n的总和。这就是我到目前为止所做的: def square(): print("This program calculates the square of a given number") print("WITHOUT using multiplication! ") odd = 1 n = eval(i

感谢您的阅读,希望您能回答我的问题。我一直在尝试编写一个Python程序,它可以在不使用乘法或指数的情况下找到一个数字的平方。相反,我必须得到从1开始的第一个奇数n的总和。这就是我到目前为止所做的:

def square():
    print("This program calculates the square of a given number")
    print("WITHOUT using multiplication! ")
    odd = 1
    n = eval(input("Enter a number: "))
    for odd in range(0, n + 1, 2):
        odd = odd + 2 
        final_square = n + odd
    print(n, "squared is", final_square, ".") 

编辑:嗨,伙计们,我不能做4+4+4+4。我必须做1+3+5+7,我不知道怎么做。它给了我4的平方等于11的值

回到乘法的原始定义

只需将数字n加上n次。什么这么难?虽然效率很低,但它会起作用的

我相信还有一种更像蟒蛇的方式:

def square(n):
   sum = 0
   for i in range(0,n):
      sum = sum + n
   return sum
只是一些提示:

尽量不要使用
eval()
,它将计算给定的任何输入,因此它可以执行您不想执行的操作。相反,使用

记住,比如说4*4,就是4+4+4+4。对于for循环,您已经走上了正确的轨道,但是现在让循环迭代n次,将n添加到自身中

new = 0
for _ in range(n):
    new += n
请注意,这不适用于负数。如果要处理这些问题,可以在开始时获得
n
的绝对值:

def square(n):
    n = abs(n)
    ....

既然有人告诉你必须通过产生前n个奇数来得到答案,那么你需要考虑如何做到这一点——当然你的循环没有做到这一点:

几个问题:

  • 如果执行odd=1,然后在for循环中使用odd,则两者不能共存,因此会覆盖odd=1的初始值
  • 你的循环不会产生我能看到的前n个奇数
  • 我的建议是重做循环:前n个奇数的形式如下:

    1,3,5。。。n*2-1 (从1开始计数,而不是从零开始计数)

    这样的循环:

      final = 0 
      for c in range(1, n+1): #start counting from 1 to do 1 to n+1
          odd = c*2 -1        #Use the series above to generate each odd number.
          final += odd
    
    应该有用

    要做到这一点,一种更为“蟒蛇式”的方法是:

     final = sum(c*2-1 for c in range(1,n))
    

    这将使用生成器创建所有奇数(相当于循环),并在创建值时求和。

    为什么不能在其自身添加一个数字…?在解决方案中必须使用range()吗?请参阅我的答案-我不知道循环如何得到11,因为你的循环实际上不是生成前n个奇数,而是生成一系列偶数。相关:赋值似乎不仅仅是为了找到n2的值,而是为了使用数学技巧,使前n个奇数的和等于n2。如果这个答案有效,你能勾选它接受它吗