0

感谢您阅读并希望能回答我的问题。我一直在尝试编写这个 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 什么的。

4

3 回答 3

1

只是一些提示:

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

请记住,比如说 4*4,就是 4 + 4 + 4 + 4。你在 for 循环的正确轨道上,但现在让循环迭代 n 次,将 n 添加到自身。

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

请注意,这不适用于负数。如果你要处理这些,也许在一开始就得到绝对值n

def square(n):
    n = abs(n)
    ....
于 2014-09-16T01:49:18.940 回答
1

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

几个问题:

  1. 你做odd = 1,然后在你的for循环中使用odd,两者不能共存,所以odd = 1的初始值被覆盖。
  2. 您的循环不会产生我能看到的前 n 个奇数。

我的建议是重新设计你的循环:第一个“n”个奇数采用以下形式:

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

所以像这样的循环:

  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))

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

于 2014-09-16T07:39:54.473 回答
0

回到乘法的原始定义。

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

我确信有一种更 Pythonic 的方式:

def square(n):
   sum = 0
   for i in range(0,n):
      sum = sum + n
   return sum
于 2014-09-16T01:46:05.830 回答