鱼C论坛

 找回密码
 立即注册
查看: 1723|回复: 2

[技术交流] 零基础入门学习Python 第 37 讲 类和对象 面向对象编程

[复制链接]
发表于 2018-4-4 12:02:55 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
课堂笔记:
  1. self:
      a. self把对象名传进类里,访问类里的数据
  2. 公有,私有:
      a. 类里的属性和方法都是公有的
      b. 私有变量用__变量名定义,对象名.__私有变量名访问,或对象名._类名__私有变量名
  3. __init()__方法,被称作魔法方法.在类里定义一个init方法,那么就可以在实例化的时候,对对象进行初始化.

测试题:
0.
封装
多态,对同一类不同对象调用不同方法,产生不同结果.
1.
继承,class A(class B):pass,这时候A就继承了B类,A就是B的子类.
2.
把类的对象传入类中做运算.
3.
在属性或方法前面加__.
4.
__init__方法.
5.
定义了一个参数self,但是没用这个参数.去掉self就好了.

动动手:
0.
import random

class Turtle:
    
    health = 100
    x = random.randint(0,10)
    y = random.randint(0,10)
    direction = random.randint(1,4)

    def moveUp(self):
        y += random.randint(1,2)
        if self.y >= 10:
            self.moveDown()
    def moveDown(self):
        y -= random.randint(1,2)
        if self.y <= 0:
            self.moveUp(self)
    def moveRight(self):
        x += random.randint(1,2)
        if self.x >= 10:
            self.moveLeft()
    def moveLeft(self):
        x -= random.randint(1,2)
        if self.x <= 0:
            self.moveRight()
            
    def move(self):
        self.health -= 1
        if self.direction == 1:
            self.moveUp()
        elif self.direction == 2:
            self.moveDown()
        elif self.direction == 3:
            self.moveRight()
        else:
            self.moveLeft()
        
class Fish:
    
    x = random.randint(0,10)
    y = random.randint(0,10)
    direction = random.randint(1,4)

    def moveUp(self):
        y += 1
        if self.y >= 10:
            self.moveDown()
    def moveDown(self):
        y -= 1
        if self.y <= 0:
            self.moveUp(self)
    def moveRight(self):
        x += 1
        if self.x >= 10:
            self.moveLeft()
    def moveLeft(self):
        x -= 1
        if self.x <= 0:
            self.moveRight()

    def move(self):
        if self.direction == 1:
            self.moveUp()
        elif self.direction == 2:
            self.moveDown()
        elif self.direction == 3:
            self.moveRight()
        else:
            self.moveLeft()



turtle = Turtle()
fish = []
for each_fish in range(10):
    afish = Fish()
    fish.append(afish)

while 1:
    turtle.move()
    print('乌龟坐标是:%d,%d,体力是%d' % (turtle.x,turtle.y,turtle.health))
    for each in range(len(fish)):
        fish[each].move
        print('鱼%d的坐标是:%d,%d' %d (each,fish[each].x,fish[each].y))
        if turtle.x == fish[each].x and turtle.y == fish[each].y:
            turtle.health += 20
            print('鱼%d被吃了,乌龟的体力+20点,现在为%d点' %  (each,turtle.health))
            fish.remove(fish[each])
    if fish == [] or turtle.health == 0:
        break
print('游戏结束')

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-7-17 14:10:56 | 显示全部楼层
楼主,程序运行时老报x和y局部变量错误。我把x,y用nonlocal和global声明都试了一下,还是没法解决。
怎么破
UnboundLocalError: local variable 'y' referenced before assignment
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-7-17 15:23:11 | 显示全部楼层
高渐飞 发表于 2018-7-17 14:10
楼主,程序运行时老报x和y局部变量错误。我把x,y用nonlocal和global声明都试了一下,还是没法解决。
怎么 ...

看看是不是函数的包含问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-23 03:01

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表