不知道这是不是正确的代码?

时间:2011-11-03 23:16:09

标签: python

您好我必须编写下面的问题(我的代码在那下)但是一旦您阅读了问题,您就会明白我需要代码来添加以前的所有数字。如果有人能够看到我的代码并告诉我它是否已经这样做了,如果不是我怎么办呢,我尝试了一些不起作用的东西,因为答案保持为0。

问题:

  

如你所知,游戏象棋的发明者是相当的   聪明的家伙。随着故事的发展,发明者将游戏呈现给了   国王和国王非常高兴。国王问什么了   发明家想要付款。他要求一粒谷物   第一个正方形,并使接下来的63个正方形中的每一个加倍   前广场。随着故事的发展,国王同意了,但事实并非如此   最后付款感到高兴。创建一个计算程度的程序   国王不得不付钱。用磅表示你的答案;假设   每磅有7000粒。

我的代码:

count = 0 
number1 = 1 
num = 2

while count < 63:
    num = num * 2
    count += 1

print "He payed ", num, " Pounds."

3 个答案:

答案 0 :(得分:2)

count=0
number1=1
num=2

while count<63:
   num=num*2
   count+=1

print"He payed ",num," Pounds."

一些评论:您没有在代码中使用number1 - 最好删除未使用的变量,因为它们的存在很容易让您分散注意力。其次,因为你是从num=2开始的,所以你实际上会想出一个比平时更大的第65个方格的谷物谷物数量。

你可以使用一种巧妙的代数技巧:

1 + 2 + 4 + ... + 2^n == 2^(n+1) - 1

所以如果你改为计算:

2 ^ 64 - 1

你会得到谷物的谷物数量。 (请注意,我用通常的数学符号给出了这个答案 - 不是 Python表示法。2 ^ 64在Python中做了不同的事情。使用**代替exponentiation 。)

然后将该数字除以7,000,以获得最终所需的问题。

当然,如果练习的重点是教导循环,那么代数平等就违背了练习的目的 - 但这些等式是编程的重要部分。

答案 1 :(得分:0)

请参阅sarnold对答案“快捷方式”的回答。但是,如果要通过循环执行此操作,请对代码进行以下更改:

  1. num应该从1开始,因为第一个方格只支付了一个谷物
  2. while循环应该在count&lt; 64时读取...这样循环运行正好64次,对于板上的每个方块一次
  3. 创建一个名为total的新变量。将其初始化为零。在每个num=num*2行之后,你应该去total += num - num只给你一个国王为一个方格支付的金额,所以你应该使用总数来累积所有方格的结果。
  4. 最后,将你的anser(total)除以7000,因为有一万七千克到一磅。
  5. 此外,还有一些清理代码的方法:

    1. 尝试使用for循环而不是一会儿。那么你不需要显式递增计数。您可以使用:for count in range(0,64):,然后删除明确的计数声明(count=0)和count+=1
    2. 使用num *= 2代替num=num*2

答案 2 :(得分:0)

这个单词问题有很多小步骤;绘制图片可能会有所帮助:

从第一个方格上的一个“颗粒”开始

+----+----+--
|    |    |  
|  1 |    |  
+----+----+--
|    |    |  
|    |    |  
+----+----+--
|    |    |  

并将每个方块加倍:

+----+----+--
|    |    |  
|  1 |  2 |  
+----+----+--
|    |    |  
|    |    |  
+----+----+--
|    |    |  
到目前为止一切顺利。但是,我们感兴趣的是总共有多少粮食,所以国王不得不支付

1 + 2 = 3

所有方块的成本,而不仅仅是最后一个。继续:

+----+----+--
|    |    |  
|  1 |  2 |  
+----+----+--
|    |    |  
|  4 |  8 |  
+----+----+--
|    |    |  

1 + 2 + 4 + 8 = 15 grains

依此类推,我们最终会以

结束
1 + 2 + ( 64 times ) grains
无论结果是什么数字。

但问题还有最后一部分;你要表达的答案不是“谷物”,而是“磅”,所以 确保将结果转换为正确的单位