hausaufgabe--python 37 -- self in Class

00-- requirements:
a. new a Turtle and 10 fishes with the moving area of x(0,10), y(0,10)
b. turtle can move 1 or 2 step within the defined area and fish with 1 step, every step will result in turtle power minus 1 with original = 100
c. while the location of turtle is the same as fish, then turtle will eat the fish with 20 power increased.
d. finish the game when fishes have been eaten all or power = 0.
import random as r

legal_x = [0, 10]
legal_y = [0, 10]

class Turtle:
    def __init__(self):
         
        self.power = 100
         
        self.x = r.randint(legal_x[0], legal_x[1])
        self.y = r.randint(legal_y[0], legal_y[1])

    def move(self):
         
        new_x = self.x + r.choice([1, 2, -1, -2])
        new_y = self.y + r.choice([1, 2, -1, -2])
        # check if exceed the x boundary
        if new_x < legal_x[0]:
            self.x = legal_x[0] - (new_x - legal_x[0])
        elif new_x > legal_x[1]:
            self.x = legal_x[1] - (new_x - legal_x[1])
        else:
            self.x = new_x
        # check if exceed the y boundary
        if new_y < legal_y[0]:
            self.y = legal_y[0] - (new_y - legal_y[0])
        elif new_y > legal_y[1]:
            self.y = legal_y[1] - (new_y - legal_y[1])
        else:
            self.y = new_y        
        # power reduction
        self.power -= 1
        # return new location after movement
        return (self.x, self.y)

    def eat(self):
        self.power += 20
        if self.power > 100:
            self.power = 100

class Fish:
    def __init__(self):
        self.x = r.randint(legal_x[0], legal_x[1])
        self.y = r.randint(legal_y[0], legal_y[1])
        
    def move(self):
        # calculate the direction and move to new location
        new_x = self.x + r.choice([1, -1])
        new_y = self.y + r.choice([1, -1])
        # check if exceed the x boundary
        if new_x < legal_x[0]:
            self.x = legal_x[0] - (new_x - legal_x[0])
        elif new_x > legal_x[1]:
            self.x = legal_x[1] - (new_x - legal_x[1])
        else:
            self.x = new_x
        # check if exceed the y boundary
        if new_y < legal_y[0]:
            self.y = legal_y[0] - (new_y - legal_y[0])
        elif new_y > legal_y[1]:
            self.y = legal_y[1] - (new_y - legal_y[1])
        else:
            self.y = new_y
        # return new location
        return (self.x, self.y)

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

while True:
    if not len(fish):
        print("No Fish, Game over!")
        break
    if not turtle.power:
        print("No power for Turtle, Game over!")
        break

    pos = turtle.move()
    # 在迭代器中删除列表元素是非常危险的,经常会出现意想不到的问题,因为迭代器是直接引用列表的数据进行引用
    # 这里我们把列表拷贝给迭代器,然后对原列表进行删除操作就不会有问题了^_^
    for each_fish in fish[:]:
        if each_fish.move() == pos:
            # fish be eaten
            turtle.eat()
            fish.remove(each_fish)
            print("there is 1 fish has been eaten...")

01--Define a class for ticket price calculation

Running Result:

 

referred:

http://outofmemory.cn/code-snippet/3841/python-datetime-weekday-get-day-of-week

class Person:
    __name = 'Reedy'

    def getName(self):
        return self.__name

running result:

原文地址:https://www.cnblogs.com/Shareishappy/p/7482170.html