Experiment Seven

发布时间 2023-06-07 19:46:16作者: _云中君

Task1:modified accounts

class Account:
    def __init__(self,name,account_number,initial_amount=10):
        self._name=name
        self._card_no=account_number
        self._balance=initial_amount

    def deposit(self,amount):
        self._balance+=amount

    def withdraw(self,amount):
        if self._balance<amount:
            print('余额不足')
            return
        self._balance-=amount

    def info(self):
        print('持卡人姓名:',self._name)
        print('持卡人账号:',self._card_no)
        print('持卡人账户余额:',self._balance)

    def get_balance(self):
        return self._balance

def main():
    print('测试账户1:'.center(30,'*'))
    a1=Account('Bob','5002311',20000)
    a1.deposit(5000)
    a1.withdraw(4000)
    a1.info()

    print()

    print('测试账户2:'.center(30,'*'))
    a2=Account('Joe','5006692',20000)
    a2.withdraw(10000)
    a2.withdraw(5000)
    a2.info()

if __name__=='__main__':
    main()

 

Task2:Shapes

(shape.py)

import math
class Shape:
    def info(self):
        pass
    def area(self):
        pass
    def perimeter(self):
        pass

class Rect(Shape):
    def __init__(self,x=0,y=0,length=2,width=1):
        self._x=x
        self._y=y
        self._width=width
        self._length=length

    def info(self):
        print(f'矩形左上角顶点坐标:({self._x},{self._y})')
        print(f'矩形长:{self._length}')
        print(f'矩形宽:{self._width}')

    def area(self):
        return self._length*self._width

    def perimeter(self):
        return (self._length+self._width)*2

class circle(Shape):
    def __init__(self,x=0,y=0,radius=1):
        self._x=x
        self._y=y
        self._r=radius

    def info(self):
        print(f'圆心:({self._x},{self._y})')
        print(f'半径:{self._r}')

    def area(self):
        return math.pi*self._r**2

    def perimeter(self):
        return 2*math.pi*self._r

class Triangle(Shape):
    def __init__(self,a=1,b=1,c=1):
        self._a,self._b,self._c=a,b,c

    def info(self):
        print(f'三角形三边长:({self._a},{self._b},{self._c})')

    def area(self):
        s=(self._a+self._b+self._c)/2
        ans=(s*(s-self._a)*(s-self._b)*(self._c))**0.5
        return ans

    def perimeter(self):
        return (self._a+self._b+self._c)

def main():
    print('测试1:'.center(40,'*'))

    shapes_lst1=[circle(),Rect(),Triangle()]
    for t in shapes_lst1:
        t.info()
        print(f'面积: {t.area():.2f}')
        print(f'周长: {t.perimeter():.2f}')
        print()
    print('测试2:'.center(40, '*'))

    shapes_lst2 = [circle(x = 2, y = 2, radius = 10),
                   Rect(x = 50, y = 50, length = 10, width = 5),
                   Triangle(a = 3, b = 4, c = 5)]
    for t in shapes_lst2:
        t.info()
        print(f'面积: {t.area():.2f}')
        print(f'周长: {t.perimeter():.2f}')
        print()

if __name__ == '__main__':
    main()

(task2.py)

#if use 'from shape import Rect,circle','shape.Rect' could be writed as 'Rect' directly
import shape
shape_lst=[shape.Rect(5,5,10,5),shape.circle(),shape.circle(1,1,10)]

for i in shape_lst:
    i.info()
    print(f'面积:{i.area():.2f}')
    print(f'周长:{i.perimeter():.2f}')
    print()

 Task3:Module_math,random,datetime,string

 

import math
def func(x):
    return 1/(math.sqrt(2*math.pi)*2)*math.exp(-0.5*(x/2)**2)

x=input()
y=x.split(',')
for i in y:
    print(f'x={i},f={func(int(i)):.8f}')

 

 

 

Task4:Random Walk

1.random_walk.py

from random import choice

class RandomWalk():

    def __init__(self,num_points=5000):
        self.num_points=num_points
        self.x_values=[0]
        self.y_values=[0]

    def fill_walk(self):
        while len(self.x_values)<self.num_points:
            x_direction = choice([1, -1])
            x_distance = choice([0, 1, 2, 3, 4])
            x_step = x_direction * x_distance
            y_direction = choice([1, -1])
            y_distance = choice([0, 1, 2, 3, 4])
            y_step = y_direction * y_distance

            if x_step==0 and y_step==0:
                continue

            next_x=self.x_values[-1]+x_step
            next_y=self.y_values[-1]+y_step

            self.x_values.append(next_x)
            self.y_values.append(next_y)

def main():
    rw = RandomWalk(5)
    rw.fill_walk()
    print(rw.x_values)
    print(rw.y_values)

if __name__ == '__main__':
    main()

2.task4.py

from matplotlib import pyplot as plt
from random_walk import RandomWalk
from time import sleep

n=0
while n<2:
    n+=1

    rw=RandomWalk(50000)
    rw.fill_walk()

    plt.figure(figsize = (10, 6), dpi = 128)
    point_numbers = list(range(rw.num_points))
    plt.scatter(rw.x_values, rw.y_values, c=point_numbers,
                cmap=plt.cm.Blues, edgecolor='none', s=1)

    plt.scatter(0, 0, c='grey', edgecolors='none', s=100)
    plt.scatter(rw.x_values[-1], rw.y_values[-1], c='red',
                edgecolors='none', s=100)

    plt.axis('off')
    plt.show()