1.发明国际象棋的价值
关于国际象棋的发明者,有着一个广为流传的神话。当地统治者非常高兴,要给国际象棋的发明者大量的黄金作为奖励。发明者提出了另一种奖励方案,他希望得到棋盘上堆放的麦粒,但是需要按一下的方式来摆放:在棋盘的第一个正方形格子的四个角上,各放上一颗麦粒;第二个正方形格子的4个角上,各放上2颗麦粒;第3个格子的各个角上放8颗麦粒,以此类推,每次粮食的数量增加一倍。棋盘上共有64个方格。编一个程序计算一下内容:
(a)统治者要想发明者奖励麦粒的总数是多少?
(b)1颗麦粒重量约50毫克。小麦共重多少?
(c)选择一个地区,并确定将上述重量的小麦覆盖在该区域上,小麦的深度将是多少?假设1颗麦粒的体积为50立方毫米,提示输入区域的面积,然后输出的小麦的深度和所使用的单位。
#-*- coding:utf-8 -*-
import math
def calculateNum():
numOfWheat = 0L
for i in range(0,64):
numOfWheat += math.pow(2, i)
return numOfWheat
def calculateWeight():
weightOfWheat = calculateNum() * 50 / 1000 /1000.0
return weightOfWheat
def calculateDepth():
area = int(raw_input('Please input a certain area:'))
depthOfWheat = calculateNum() * 50 / 1000 / 1000.0/ 1000.0 / area
return depthOfWheat
if __name__ == '__main__':
print 'Total number of wheat:', calculateNum()
print 'Total weight of wheat: %fg' % calculateWeight()
print 'Total depth of a certain area is: %fm' % calculateDepth()
2.折纸有多厚
从报纸中抽出一张,对折,再对折,继续对折,假设可以对折30次,请问厚度为多少?假设折的厚度是1/200厘米。编写程序来解决这个难题。提示输入折叠次数,输出厚度,以米为单位。
import math
count = int(raw_input('Please input the count of the paper folding:'))
depth = math.pow(2, count) * (1/200.0/100.0)
print 'The depth is %fm' % depth
3.海龟绘图:多边形(polygon)
提示输入多边形的边数。利用正多边形的内角计算公式((边数 – 2) * 180°) / 边数)绘制多边形。可选项:提示输入1种颜色名称,用这种颜色填充多边形内部。
import turtle
num = int(raw_input('Please input the num of the polygon:'))
color = raw_input('Please input the color of the fillcolor:')
turtle.fillcolor(color)
angel = 180 - (num - 2) * 180 / num
turtle.begin_fill()
for i in range(num):
turtle.forward(160)
turtle.right(angel)
turtle.end_fill()
turtle.done()
4.古怪的乘法
这项任务将实施所谓的“俄国农民“或”古埃及“乘法。它看起来有点古怪,但只是需要把它看成一个算法,和你在小学学习的乘法不同而已。
算法如下。如果A和B是要相乘的两个整数,重复地将A乘以2,而将B除以2,知道B不能再被整除为止。也就是说,直到值变成0(记住,做的是整数除法)为止。在每个步骤中,当B是奇数时,将A的对应值加到生成的乘积上;当B为偶数时,忽略对应的A值。下面是一个例子:
如果初始时,两个整数为34和19,接下来的操作如下:
将所有的A值和B值相加,得到最终乘积:34+68+544=644。
(a)第一部分:编程来计算两个整数的乘积
(b)第二部分:修改程序,计算完一个乘积后,询问是否还需要计算另一个乘积。
def inputAB():
A = int(raw_input('Please input A:'))
B = int(raw_input('Please input B:'))
return (A,B)
def multiplication():
mul = 0
A, B = inputAB()
while B != 0:
if B %2:
mul = mul + A
B = B / 2
A = A * 2
print mul
if __name__ == '__main__':
while True:
multiplication()
userInput = raw_input('Do you want to continue(Y or N)?:').upper()
if userInput == 'N':
break