Planet sim and Etch added, working properly AFAIK
This commit is contained in:
commit
88f86dc04f
19 changed files with 638 additions and 0 deletions
3
.idea/.gitignore
vendored
Normal file
3
.idea/.gitignore
vendored
Normal file
|
@ -0,0 +1,3 @@
|
|||
# Default ignored files
|
||||
/shelf/
|
||||
/workspace.xml
|
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
6
.idea/inspectionProfiles/profiles_settings.xml
Normal file
|
@ -0,0 +1,6 @@
|
|||
<component name="InspectionProjectProfileManager">
|
||||
<settings>
|
||||
<option name="USE_PROJECT_PROFILE" value="false" />
|
||||
<version value="1.0" />
|
||||
</settings>
|
||||
</component>
|
4
.idea/misc.xml
Normal file
4
.idea/misc.xml
Normal file
|
@ -0,0 +1,4 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectRootManager" version="2" project-jdk-name="Python 3.10 (thesaurus)" project-jdk-type="Python SDK" />
|
||||
</project>
|
8
.idea/modules.xml
Normal file
8
.idea/modules.xml
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="ProjectModuleManager">
|
||||
<modules>
|
||||
<module fileurl="file://$PROJECT_DIR$/.idea/python_notes.iml" filepath="$PROJECT_DIR$/.idea/python_notes.iml" />
|
||||
</modules>
|
||||
</component>
|
||||
</project>
|
8
.idea/python_notes.iml
Normal file
8
.idea/python_notes.iml
Normal file
|
@ -0,0 +1,8 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<module type="PYTHON_MODULE" version="4">
|
||||
<component name="NewModuleRootManager">
|
||||
<content url="file://$MODULE_DIR$" />
|
||||
<orderEntry type="jdk" jdkName="Python 3.10 (thesaurus)" jdkType="Python SDK" />
|
||||
<orderEntry type="sourceFolder" forTests="false" />
|
||||
</component>
|
||||
</module>
|
7
.idea/vcs.xml
Normal file
7
.idea/vcs.xml
Normal file
|
@ -0,0 +1,7 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<project version="4">
|
||||
<component name="VcsDirectoryMappings">
|
||||
<mapping directory="" vcs="svn" />
|
||||
<mapping directory="$PROJECT_DIR$" vcs="Git" />
|
||||
</component>
|
||||
</project>
|
57
Classes and OOP/cat.py
Normal file
57
Classes and OOP/cat.py
Normal file
|
@ -0,0 +1,57 @@
|
|||
import random
|
||||
import time
|
||||
from pet import Pet
|
||||
|
||||
|
||||
class Cat(Pet):
|
||||
def __init__(self, name='Garfield', color='brown', breed='cat',
|
||||
chance_of_overthrowing_major_world_government=100): # self is equivalent of this
|
||||
"""
|
||||
Initializes instance of Dog class.
|
||||
:param color: color of Dog
|
||||
:param breed: breed of Dog
|
||||
:param chance_of_overthrowing_major_world_government: the chance of the Cat overthrowing world governments
|
||||
"""
|
||||
# Can add __ before variable name to make it a private
|
||||
# variable, so it can't be directly accessed. Only through methods.
|
||||
super().__init__(name, color, breed)
|
||||
self.__chance_of_overthrowing_major_government = chance_of_overthrowing_major_world_government
|
||||
|
||||
@property
|
||||
def chance_of_overthrowing_major_government(self):
|
||||
return self.__chance_of_overthrowing_major_government
|
||||
|
||||
@staticmethod
|
||||
def __meow():
|
||||
print('meow, meow')
|
||||
|
||||
@staticmethod
|
||||
def __purr():
|
||||
print('*vibration noise between approximately 25 hz and 150 hz*')
|
||||
|
||||
@staticmethod
|
||||
def laser():
|
||||
Cat.__meow()
|
||||
print('*pounce*')
|
||||
time.sleep(1)
|
||||
print('*pounce pounce*')
|
||||
|
||||
def __str__(self):
|
||||
return f'{super().name} is a {super().color} {super().breed} that has a ' \
|
||||
f'{self.__chance_of_overthrowing_major_government}% chance of overthrowing a major government.'
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, Cat):
|
||||
raise TypeError
|
||||
if self.color == other.__color and self.__breed == other.__color and \
|
||||
self.__chance_of_overthrowing_major_government == other.__color:
|
||||
return True
|
||||
return False
|
||||
|
||||
@staticmethod
|
||||
def make_noise():
|
||||
num = random.randint(0, 1)
|
||||
if num == 0:
|
||||
Cat.__meow()
|
||||
else:
|
||||
Cat.__purr()
|
73
Classes and OOP/classes_and_oop.md
Normal file
73
Classes and OOP/classes_and_oop.md
Normal file
|
@ -0,0 +1,73 @@
|
|||
### Object Oriented Programming (OOP)
|
||||
|
||||
- Object definition: An object is an instance of a class
|
||||
- For example, `str` is not an object, but in `word = 'hi'` word is an object (an instance of the `str` class)
|
||||
- Objects use allocated memory
|
||||
- A physically entity (digitally). You can't hold it, but an object is a thing. A class is an idea for how to make an object.
|
||||
- Characteristic/Attributes objects have
|
||||
- Identity
|
||||
- Each object has its own identity, such as a memory address. Two variables may reference the same object, but the identity is the memory address of the object.
|
||||
- State
|
||||
- The state is all the attributes of the object with values assigned to them. Such as a plane object having a fuel object. Anytime you change the fuel object, you change the plane object's state.
|
||||
- Behavior
|
||||
- Example: \_\_eq\_\_ method in `str`.
|
||||
- Always use behavior to access state (getter and setters), don't access directly.
|
||||
- Class definition: A class is the code that instructs a program how a particular object should be built.
|
||||
- A class is used to create many objects.
|
||||
- OOP Characteristics:
|
||||
- Encapsulation
|
||||
- Class, variable, getter, and setter all in one thing.
|
||||
```
|
||||
class Cookie:
|
||||
def __init__(self):
|
||||
self.flavor = flavor
|
||||
|
||||
def get_flavor(self):
|
||||
return self.flavor
|
||||
|
||||
def set_flavor(self, flavor):
|
||||
self.flavor = flavor
|
||||
```
|
||||
- Abstraction (user interface vs private interface)
|
||||
- `.sort()` does stuff, you make it easy, and you don't care how it does it (as long as it's reasonably efficient).
|
||||
- Inheritance
|
||||
- is-a relationship
|
||||
- Ferrari is-a Car
|
||||
- Can use methods of parent class, such as `__str__`, and add on to it with its own `__str__`.
|
||||
- Polymorphism
|
||||
- Always used with inheritance.
|
||||
- Overriding a parent class's method with a different method with different or extra functionality.
|
||||
- In the Ferrari class, `__str__()` overrides the Car `__str__()`, and can provide extra functionality, such as multiplying the cost to repair because it's a Ferrari.
|
||||
|
||||
### Classes
|
||||
- Magic methods (also called dunder methods) (override methods):
|
||||
- If: `__eq__(), __gt__(), __ge__(), __lt__(), __le__(), __and__(), __or__()`
|
||||
- Math `__add__(), __abs__(), __ceil__(), __sub__(), __mod__(), __mul__(), __round__(), __floordiv__()`
|
||||
- Make vars private by adding '__' to the beginning of the variable name
|
||||
- getters and setters are good, or you can make @property, @var_name.setter, etc functions
|
||||
```
|
||||
# Acts as a getter, but is used for class_name.color
|
||||
@property
|
||||
def color(self):
|
||||
return self.__color
|
||||
|
||||
@color.setter
|
||||
def color(self, value):
|
||||
self.color = value
|
||||
```
|
||||
- Inheritance
|
||||
- How to make inheritance in Python: `class Dog(Pet): # Dog inherits from Pet`
|
||||
- Basic explanation of inheritance in OOP section.
|
||||
- Arbitrary parameters
|
||||
- Arbitrary num of parameters for a function/method
|
||||
- Can use `*args` or `**kwargs` to get a tuple or dict with an arbitrary length
|
||||
- Variable name doesn't actually matter those names are standard, just number of asterisks *. 1 for tuple, 2 for dict.
|
||||
- Example:
|
||||
```
|
||||
def custom_sum(*args):
|
||||
total = 0
|
||||
for num in args:
|
||||
total += num
|
||||
return total
|
||||
print(custom_sum(1, 2, 3, 4, 5, 6, 7, 8, 9))
|
||||
```
|
66
Classes and OOP/classes_oop_demo.py
Normal file
66
Classes and OOP/classes_oop_demo.py
Normal file
|
@ -0,0 +1,66 @@
|
|||
from dog import Dog # Imports class from other python file (dog.py)
|
||||
from cat import Cat
|
||||
|
||||
# dog1 and dog2 are variables holding reference to instance of Dog in heap
|
||||
dog1 = Dog(color='blue')
|
||||
dog2 = Dog(weight=15.7)
|
||||
dog3 = Dog(breed='beagle', weight=15.7)
|
||||
|
||||
# Calls __str__()
|
||||
print(dog1)
|
||||
print(dog2)
|
||||
|
||||
# Calls __eq__()
|
||||
print(dog1 == dog2)
|
||||
|
||||
# Also calls __eq__()
|
||||
print(dog1 != dog2)
|
||||
|
||||
dog1.name = 'snow'
|
||||
print(dog1.color)
|
||||
|
||||
dog1.name = 'light'
|
||||
print(dog1.color)
|
||||
|
||||
# Is type "class '__main__.Dog'"
|
||||
print(type(dog1), type(dog2))
|
||||
|
||||
# You can do these, but you shouldn't. It's not good for OOP
|
||||
# Commenting out because it's a mess
|
||||
# dog1.breath = 'bad'
|
||||
# print(dog1.breath)
|
||||
# for attribute in dir(dog1):
|
||||
# print(f'{attribute}: {dog1.__getattribute__(attribute)}')
|
||||
|
||||
num1 = 42
|
||||
num2 = 99
|
||||
if num1 == num2:
|
||||
print('Equal')
|
||||
else:
|
||||
print('Not equal')
|
||||
|
||||
print(dog2)
|
||||
print(dog3)
|
||||
|
||||
print(dog2 == dog3)
|
||||
|
||||
dog1.do_something(item='newspaper')
|
||||
|
||||
# Cat
|
||||
print()
|
||||
cat1 = Cat(color='heliotrope')
|
||||
print(cat1)
|
||||
cat1.laser()
|
||||
cat1.make_noise()
|
||||
print()
|
||||
|
||||
|
||||
# Other stuff
|
||||
def get_full_name(*args): # Can be any name, as long as it starts with *.
|
||||
full_name = ''
|
||||
for name in args:
|
||||
full_name += name + ' '
|
||||
return full_name[:-1]
|
||||
|
||||
|
||||
print(get_full_name('super', 'cali', 'fragilistic', 'expialidocious'))
|
50
Classes and OOP/dog.py
Normal file
50
Classes and OOP/dog.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
from pet import Pet
|
||||
|
||||
|
||||
class Dog(Pet):
|
||||
def __init__(self, name='Odie', color='brown', breed='poodle', weight=25.0): # self is equivalent of this
|
||||
"""
|
||||
Initializes instance of Dog class.
|
||||
:param name: name of Dog
|
||||
:param color: color of Dog
|
||||
:param breed: breed of Dog
|
||||
:param weight: weight of Dog
|
||||
"""
|
||||
super().__init__(name, color, breed)
|
||||
# Can add __ before variable name to make it a private
|
||||
# variable, so it can't be directly accessed. Only through methods.
|
||||
self.__weight = weight
|
||||
self.__bark()
|
||||
|
||||
@staticmethod
|
||||
def __bark():
|
||||
"""
|
||||
woof
|
||||
:return: None
|
||||
"""
|
||||
print('woof woof')
|
||||
|
||||
@property
|
||||
def weight(self):
|
||||
return self.__weight
|
||||
|
||||
@weight.setter
|
||||
def weight(self, weight):
|
||||
self.__weight = weight
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.name} {self.color} {self.breed} that weighs {self.__weight}.'
|
||||
|
||||
def __eq__(self, other):
|
||||
if not isinstance(other, Dog):
|
||||
raise TypeError
|
||||
if super().color == other.color and super().breed == other.breed and self.__weight == other.__weight:
|
||||
return True
|
||||
return False
|
||||
|
||||
def do_something(self, **kwargs):
|
||||
if 'item' in kwargs:
|
||||
self.__bark()
|
||||
print(f"Here's a {kwargs['item']}")
|
||||
else:
|
||||
print('*confusion*')
|
23
Classes and OOP/pet.py
Normal file
23
Classes and OOP/pet.py
Normal file
|
@ -0,0 +1,23 @@
|
|||
class Pet:
|
||||
|
||||
def __init__(self, name, color, breed):
|
||||
self.__name = name
|
||||
self.__color = color
|
||||
self.__breed = breed
|
||||
|
||||
# Can do this to make variables private, but look like public
|
||||
@property
|
||||
def name(self):
|
||||
return self.__name
|
||||
|
||||
@name.setter
|
||||
def name(self, name):
|
||||
self.__name = name
|
||||
|
||||
@property
|
||||
def color(self):
|
||||
return self.__color
|
||||
|
||||
@property
|
||||
def breed(self):
|
||||
return self.__breed
|
101
Turtle/Etch/etch_a_sketch_turtle.py
Normal file
101
Turtle/Etch/etch_a_sketch_turtle.py
Normal file
|
@ -0,0 +1,101 @@
|
|||
from turtle import Turtle, mainloop
|
||||
|
||||
|
||||
class Etch:
|
||||
def __init__(self):
|
||||
self.__t = Turtle()
|
||||
self.__screen = self.__t.screen
|
||||
self.__color_list = ['#35b070', 'black', 'white', 'red', 'orange', 'yellow', 'green', 'blue', 'purple', 'pink']
|
||||
self.__color_index = 0
|
||||
self.__t.color(self.__color_list[self.__color_index])
|
||||
self.__t.pensize(1)
|
||||
self.__t.speed(0)
|
||||
self.__distance = 10
|
||||
self.__turn = 10
|
||||
|
||||
# Add callbacks
|
||||
self.__screen.onkey(self.__fwd, 'w')
|
||||
self.__screen.onkey(self.__back, 's')
|
||||
self.__screen.onkey(self.__left, 'a')
|
||||
self.__screen.onkey(self.__right, 'd')
|
||||
self.__screen.onkey(self.__increase_distance, 'e')
|
||||
self.__screen.onkey(self.__decrease_distance, 'q')
|
||||
self.__screen.onkey(self.__increase_turn, 'r')
|
||||
self.__screen.onkey(self.__decrease_turn, 'f')
|
||||
self.__screen.onkey(self.__toggle_pen, 'z')
|
||||
self.__screen.onkey(self.__color, 'c')
|
||||
self.__screen.onkey(self.__clear, 'x')
|
||||
self.__screen.onkey(self.__quit, 'Escape')
|
||||
self.__screen.listen()
|
||||
|
||||
|
||||
def main(self):
|
||||
mainloop()
|
||||
|
||||
# Callback methods
|
||||
def __increase_distance(self):
|
||||
if self.__distance == 100:
|
||||
pass
|
||||
elif self.__distance < 5:
|
||||
self.__distance += 1
|
||||
else:
|
||||
self.__distance += 5
|
||||
|
||||
def __decrease_distance(self):
|
||||
if self.__distance == 1:
|
||||
pass
|
||||
elif self.__distance <= 5:
|
||||
self.__distance -= 1
|
||||
else:
|
||||
self.__distance -= 5
|
||||
|
||||
def __increase_turn(self):
|
||||
if self.__turn == 180:
|
||||
pass
|
||||
elif self.__turn < 5:
|
||||
self.__turn += 1
|
||||
else:
|
||||
self.__turn += 5
|
||||
|
||||
def __decrease_turn(self):
|
||||
if self.__turn == 1:
|
||||
pass
|
||||
elif self.__turn <= 5:
|
||||
self.__turn -= 1
|
||||
else:
|
||||
self.__turn -= 5
|
||||
|
||||
def __fwd(self):
|
||||
self.__t.forward(self.__distance)
|
||||
|
||||
def __back(self):
|
||||
self.__t.backward(self.__distance)
|
||||
|
||||
def __left(self):
|
||||
self.__t.left(self.__turn)
|
||||
|
||||
def __right(self):
|
||||
self.__t.right(self.__turn)
|
||||
|
||||
def __toggle_pen(self):
|
||||
if self.__t.isdown():
|
||||
self.__t.penup()
|
||||
else:
|
||||
self.__t.pendown()
|
||||
|
||||
def __clear(self):
|
||||
self.__t.clear()
|
||||
|
||||
def __color(self):
|
||||
if self.__color_index == 9:
|
||||
self.__color_index = -1
|
||||
self.__color_index += 1
|
||||
self.__t.color(self.__color_list[self.__color_index])
|
||||
|
||||
def __quit(self):
|
||||
exit(0)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
draw = Etch()
|
||||
draw.main()
|
3
Turtle/PlanetSim/README.md
Normal file
3
Turtle/PlanetSim/README.md
Normal file
|
@ -0,0 +1,3 @@
|
|||
### Planet Simulator
|
||||
|
||||
A very basic planet simulator. Really just a demo of using classes with turtle.
|
56
Turtle/PlanetSim/planet.py
Normal file
56
Turtle/PlanetSim/planet.py
Normal file
|
@ -0,0 +1,56 @@
|
|||
import math
|
||||
import turtle
|
||||
|
||||
|
||||
class Planet:
|
||||
def __init__(self, name, radius, mass, distanceFromSun, velocity, color):
|
||||
"""
|
||||
initializes the Planet
|
||||
:param name: name of planet
|
||||
:param radius: radius of planet
|
||||
:param mass: mass of planet
|
||||
:param distanceFromSun: distance of planet from the sun
|
||||
:param velocity: tuple containing the velocity of the planet in the format (x_velocity, y_velocity)
|
||||
:param color: color of planet
|
||||
"""
|
||||
self.__name = name
|
||||
self.__radius = radius
|
||||
self.__mass = mass
|
||||
self.__distance = distanceFromSun
|
||||
self.__velocity = velocity
|
||||
self.__color = color
|
||||
self.__coords = [distanceFromSun, 0]
|
||||
|
||||
self.__pT = turtle.Turtle()
|
||||
self.__pT.pensize(1)
|
||||
self.__pT.color(self.__color)
|
||||
if name == 'earth' or name == 'Earth':
|
||||
self.__pT.shape('turtle')
|
||||
else:
|
||||
self.__pT.shape('circle')
|
||||
self.__pT.up()
|
||||
self.__pT.goto(self.__coords[0], self.__coords[1])
|
||||
self.__pT.down()
|
||||
|
||||
def moveTo(self, new_coords):
|
||||
self.__coords = new_coords
|
||||
self.__pT.goto(self.__coords[0], self.__coords[1])
|
||||
|
||||
@property
|
||||
def velocity(self):
|
||||
return self.__velocity
|
||||
|
||||
@velocity.setter
|
||||
def velocity(self, vel):
|
||||
self.__velocity = vel
|
||||
|
||||
@property
|
||||
def coords(self):
|
||||
return self.__coords
|
||||
|
||||
@coords.setter
|
||||
def coords(self, new_coords):
|
||||
self.__coords = new_coords
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.__name} at distance {self.__distance}'
|
29
Turtle/PlanetSim/planet_sim.py
Normal file
29
Turtle/PlanetSim/planet_sim.py
Normal file
|
@ -0,0 +1,29 @@
|
|||
from sun import Sun
|
||||
from solar_system import SolarSystem
|
||||
from planet import Planet
|
||||
|
||||
|
||||
# Create a SolarSystem
|
||||
solar_sys = SolarSystem(2, 2)
|
||||
|
||||
# Create sun
|
||||
sun = Sun('Sun', 5000, 40, 1000)
|
||||
solar_sys.add_sun(sun)
|
||||
|
||||
# Create planets
|
||||
p = Planet('Mercury', 1, 500, 0.15, (0, 2), 'black')
|
||||
solar_sys.add_planet(p)
|
||||
p = Planet('Venus', 1, 500, 0.25, (0, 2), 'purple')
|
||||
solar_sys.add_planet(p)
|
||||
p = Planet('Earth', 1, 700, 0.5, (0, 2), '#2152a6')
|
||||
solar_sys.add_planet(p)
|
||||
p = Planet('Mars', 1, 700, 0.6, (0, 2), '#b32b10')
|
||||
solar_sys.add_planet(p)
|
||||
|
||||
solar_sys.show_planets()
|
||||
|
||||
num_time_periods = 1000
|
||||
for _ in range(num_time_periods):
|
||||
solar_sys.move_planets()
|
||||
|
||||
solar_sys.freeze()
|
50
Turtle/PlanetSim/solar_system.py
Normal file
50
Turtle/PlanetSim/solar_system.py
Normal file
|
@ -0,0 +1,50 @@
|
|||
import turtle
|
||||
import math
|
||||
|
||||
|
||||
class SolarSystem:
|
||||
def __init__(self, width, height):
|
||||
"""
|
||||
initializes SolarSystem
|
||||
:param width: width of world
|
||||
:param height: height of world
|
||||
"""
|
||||
self.__theSun = None
|
||||
self.__planets = []
|
||||
self.__screen = turtle.Screen()
|
||||
self.__screen.setup(width=950, height=950)
|
||||
self.__screen.setworldcoordinates(-width / 2, -height / 2, width / 2, height / 2)
|
||||
|
||||
def move_planets(self):
|
||||
G = 0.025
|
||||
dt = 0.001
|
||||
|
||||
for p in self.__planets:
|
||||
p.moveTo((p.coords[0] + dt * p.velocity[0], p.coords[1] + dt * p.velocity[1]))
|
||||
|
||||
radius_x = self.__theSun.x - p.coords[0]
|
||||
radius_y = self.__theSun.y - p.coords[1]
|
||||
radius = math.sqrt((radius_x ** 2) + (radius_y ** 2)) # Uses pythagorean theorem to find radius
|
||||
|
||||
acc_x = G * self.__theSun.mass * radius_x / radius ** 3 # I don't know,
|
||||
acc_y = G * self.__theSun.mass * radius_y / radius ** 3 # I haven't taken physics
|
||||
|
||||
p.velocity = (p.velocity[0] + dt * acc_x, p.velocity[1] + dt * acc_y)
|
||||
|
||||
def add_sun(self, sun):
|
||||
self.__theSun = sun
|
||||
|
||||
def add_planet(self, planet):
|
||||
self.__planets.append(planet)
|
||||
|
||||
def remove_planet(self, planet_name):
|
||||
for p in self.__planets:
|
||||
if p.name == planet_name:
|
||||
self.__planets.remove(p)
|
||||
|
||||
def show_planets(self):
|
||||
for p in self.__planets:
|
||||
print(p)
|
||||
|
||||
def freeze(self):
|
||||
self.__screen.exitonclick()
|
67
Turtle/PlanetSim/sun.py
Normal file
67
Turtle/PlanetSim/sun.py
Normal file
|
@ -0,0 +1,67 @@
|
|||
import math
|
||||
import turtle
|
||||
|
||||
|
||||
class Sun:
|
||||
def __init__(self, name, radius, mass, temp):
|
||||
"""
|
||||
initializes Sun
|
||||
:param name: name of Sun
|
||||
:param radius: radius of Sun
|
||||
:param mass: mass of Sun
|
||||
:param temp: temperature of Sun
|
||||
"""
|
||||
self.__name = name
|
||||
self.__radius = radius
|
||||
self.__mass = mass
|
||||
self.__temp = temp
|
||||
# List of coordinates in order of [x, y]
|
||||
self.__coords = (0, 0)
|
||||
|
||||
self.__sunT = turtle.Turtle()
|
||||
self.__sunT.shape('circle')
|
||||
self.__sunT.color('orange')
|
||||
self.__sunT.shapesize(2)
|
||||
|
||||
@property
|
||||
def name(self):
|
||||
return self.__name
|
||||
|
||||
@property
|
||||
def x(self):
|
||||
return self.__coords[0]
|
||||
|
||||
@property
|
||||
def y(self):
|
||||
return self.__coords[1]
|
||||
|
||||
@property
|
||||
def mass(self):
|
||||
return self.__mass
|
||||
|
||||
@property
|
||||
def radius(self):
|
||||
return self.__radius
|
||||
|
||||
@property
|
||||
def temperature(self):
|
||||
return self.__temp
|
||||
|
||||
@property
|
||||
def volume(self):
|
||||
return (4 / 3) * math.pi * (self.__radius ** 3)
|
||||
|
||||
@property
|
||||
def surface_area(self):
|
||||
return 4 * math.pi * (self.__radius ** 2)
|
||||
|
||||
@property
|
||||
def density(self):
|
||||
return self.__mass / self.volume
|
||||
|
||||
@name.setter
|
||||
def name(self, name):
|
||||
self.__name = name
|
||||
|
||||
def __str__(self):
|
||||
return f'{self.__name} at ({self.__coords[0]}, {self.__coords[1]})'
|
11
Turtle/turtle.md
Normal file
11
Turtle/turtle.md
Normal file
|
@ -0,0 +1,11 @@
|
|||
### Turtle
|
||||
##### [Turtle documentation](https://docs.python.org/3/library/turtle.html)
|
||||
|
||||
- What is turtle?
|
||||
- Imagine you control a robotic turtle (default is actually a black triangle) which moves around on screen.
|
||||
- You draw lines, like a digital etch-a-sketch (but you can lift the "pen" off the screen)
|
||||
- For example:
|
||||
- Move forward: `turtle.forward(num_pixels)`
|
||||
- Turn right: `turtle.right(degrees)`
|
||||
|
||||
- For usage of turtle, look in Etch class. It's pretty self-explanatory.
|
16
main.py
Normal file
16
main.py
Normal file
|
@ -0,0 +1,16 @@
|
|||
# This is a sample Python script.
|
||||
|
||||
# Press Shift+F10 to execute it or replace it with your code.
|
||||
# Press Double Shift to search everywhere for classes, files, tool windows, actions, and settings.
|
||||
|
||||
|
||||
def print_hi(name):
|
||||
# Use a breakpoint in the code line below to debug your script.
|
||||
print(f'Hi, {name}') # Press Ctrl+F8 to toggle the breakpoint.
|
||||
|
||||
|
||||
# Press the green button in the gutter to run the script.
|
||||
if __name__ == '__main__':
|
||||
print_hi('PyCharm')
|
||||
|
||||
# See PyCharm help at https://www.jetbrains.com/help/pycharm/
|
Loading…
Reference in a new issue