• 大小: 231KB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2021-05-26
  • 语言: Python
  • 标签: python  大作业  

资源简介

本人的程序设计通识课期末大作业源代码和说明文档,欢迎大家参考,共同学习python

资源截图

代码片段和文件信息

#本程序是一个汉诺塔递归演示动画
#用户可以通过按钮选择观看3至6个盘子的汉诺塔演示
#作者:周易 5090379144
#2011年6月13日

from visual import *
from visual.controls import *

scene=display(title=‘Hannoi‘width=1200 height=700)
scene.autoscale=0

R=0.5                         #圆盘的单位半径大小
height = 0.6                  #圆盘单位垂直间隔
distance = 7.8                #三个塔座之间的间隔距离

#画三个塔座
post1 = cylinder(pos=(-7.8-20)axis = (050) radius = 0.25color = (0.350.91))
base1 = cylinder(pos=(-7.8-20)axis = (00.30) radius = 3.3color = (0.50.80.9))
post2 = cylinder(pos=(0-20)axis = (050) radius = 0.25color = (0.40.91))
base2 = cylinder(pos=(0-20)axis = (00.30) radius = 3.3color = (0.50.80.9))
postV = cylinder(pos=(7.8-20)axis = (050) radius = 0.25color = (0.40.91))
base3 = cylinder(pos=(7.8-20)axis = (00.30) radius = 3.3color = (0.50.80.9))

#圆盘类
class Plate:
    #初始化圆盘,在第一个塔座上放number个圆盘
    def __init__(selfnumber):
        self.number = number
        self.plates = []
        self.P1 = number
        self.P2 = 0
        self.P3 = 0
        for i in range(1number+1):
            rod = cylinder(pos=(-7.8-2+(number-i+1)*0.60) axis=(00.40)
                           radius=i*Rcolor = (10.91))
            self.plates.append(rod)
    #将第n块圆盘从第fromX个塔移到第toY个塔
    def move(selfnfromXtoY):
        rate(50000)
        if toY == 1:
            self.P1=self.P1+1
            x = -distance
            y = -2 + (self.P1)*height
        elif toY == 2:
            self.P2=self.P2+1
            x = 0
            y = -2 + (self.P2)*height
        else:
            self.P3=self.P3+1
            x = distance
            y = -2 + self.P3*height

        if fromX == 1:
            self.P1 = self.P1-1
        elif fromX == 2:
            self.P2 = self.P2-1
        else:
            self.P3 = self.P3-1
            
        self.plates[n-1].velocity=vector(xy0)-self.plates[n-1].pos
        for j in range(120000):
            self.plates[n-1].pos = self.plates[n-1].pos + self.plates[n-1].velocity*0.00005
        self.plates[n-1].pos = (xy0)

    # 将所有的plates飞出窗口并删除所有的plates
    def delete(self):   
        rate(20000)
        for i in range(0self.number):
            for j in range(142000):
                self.plates[i].pos = self.plates[i].pos + vector(020)*0.0001*(i+1) # 让飞离速度变快
            print i
        for i in range(self.number-10):
            del self.plates[i]
        del self.plates


#汉诺塔递归算法实现     
def Move(nxyplate):
    print “将第 “+str(n)+“ 个盘从 “+str(x)+“ 柱移至 “+str(y)+“ 柱“;
    plate.move(nxy)
    return plate
    

def Hannoi(n a b c plate):
    if n==1:
        plate = Move(1acplate);
    else:
        Hannoi(n-1acbplate);
        plate = Move(nacplate);
        Hannoi(n-1bacplate);

        
#n = input(“Please enter the number of the plates. “)
#scene.stereo =  ‘redcyan‘

#放3个盘子
def change1(): # Called by controls when button1 

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4824  2011-06-13 13:04  大作业\hannoi4.py

     文件     311808  2011-06-13 13:01  大作业\汉诺塔动画演示文档.doc

     目录          0  2011-06-13 13:01  大作业

----------- ---------  ---------- -----  ----

               316632                    3


评论

共有 条评论