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

时间:2014-09-16 01:44:33

标签: 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(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或什么的。

3 个答案:

答案 0 :(得分:1)

一些提示:

尽量不要使用eval(),它会评估给定的任何输入,因此它可以执行您不想做的事情。相反,请使用int()

请记住,比如说4 * 4,只是4 + 4 + 4 + 4.你使用for循环进入正确的轨道,但是现在让循环迭代n次将n加到自身。< / p>

new = 0
for _ in range(n):
    new += n

请注意,这不会与负数一起使用。如果您要处理这些问题,可能会在开头时获得n olute值def square(n): n = abs(n) ....

{{1}}

答案 1 :(得分:1)

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

几个问题:

  1. 你做奇数= 1,然后在你的for循环中使用odd,两者不能共存,所以odd = 1的初始值被覆盖。
  2. 你的循环不会产生我能看到的前n个奇数。
  3. 我的建议是重做你的循环:第一个'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
    

    应该有效

    更加'pythonic'的方法是:

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

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

答案 2 :(得分:0)

回到乘法的原始定义。

只需将数字n添加到自身n次。有什么难的?地狱效率低下,但它会奏效。

我确信有更多的Pythonic方式:

def square(n):
   sum = 0
   for i in range(0,n):
      sum = sum + n
   return sum