library(pacman)
p_load(stringr, R6)
class Dog:
"""一次模擬小狗的簡單嘗試"""
def __init__(self, name, age):
"""初始化屬性name和age"""
self.name = name
self.age = age
def sit(self):
"""模擬小狗收到命令時蹲下"""
print(f"{self.name} is now sitting.")
def roll_over(self):
"""模擬小狗收到命令時打滾"""
print(f"{self.name} rolled over!")
Dog <- R6Class("Dog", list(
name = NULL,
age = NA,
#初始化屬性name和age
initialize = function(name, age = NA) {
self$name <- name
self$age <- age
},
#模擬小狗收到命令時蹲下
sit = function() {
cat(str_glue("{self$name} is now sitting."), "\n")
},
#模擬小狗收到命令時打滾
roll_over = function() {
cat(str_glue("{self$name} rolled over!"), "\n")
}
))
my_dog = Dog('Willie', 6)
print(f"My dog's name is {my_dog.name}.")
## My dog's name is Willie.
print(f"My dog is {my_dog.age} years old.")
## My dog is 6 years old.
my_dog <- Dog$new(name = "Willie", age = 6)
cat(str_glue("My dog's name is {my_dog$name}."), "\n")
## My dog's name is Willie.
cat(str_glue("My dog is {my_dog$age} years old."), "\n")
## My dog is 6 years old.
my_dog.name
## 'Willie'
my_dog.age
## 6
my_dog$name
## [1] "Willie"
my_dog$age
## [1] 6
my_dog.sit()
## Willie is now sitting.
my_dog.roll_over()
## Willie rolled over!
my_dog$sit()
## Willie is now sitting.
my_dog$roll_over()
## Willie rolled over!
my_dog = Dog('Willie', 6)
your_dog = Dog('Lucy', 3)
print(f"My dog's name is {my_dog.name}.")
## My dog's name is Willie.
print(f"My dog is {my_dog.age} years old.")
## My dog is 6 years old.
my_dog.sit()
## Willie is now sitting.
print(f"\nYour dog's name is {your_dog.name}.")
##
## Your dog's name is Lucy.
print(f"Your dog is {your_dog.age} years old.")
## Your dog is 3 years old.
your_dog.sit()
## Lucy is now sitting.
my_dog <- Dog$new('Willie', 6)
your_dog <- Dog$new('Lucy', 3)
cat(str_glue("My dog's name is {my_dog$name}."), "\n")
## My dog's name is Willie.
cat(str_glue("My dog is {my_dog$age} years old."), "\n")
## My dog is 6 years old.
my_dog$sit()
## Willie is now sitting.
cat(str_glue("Your dog's name is {your_dog$name}."), "\n")
## Your dog's name is Lucy.
cat(str_glue("Your dog is {your_dog$age} years old."), "\n")
## Your dog is 3 years old.
your_dog$sit()
## Lucy is now sitting.
class Car:
"""一次模擬汽車的簡單嘗試"""
def __init__(self, make, model, year):
"""初始化描述汽車屬性"""
self.make = make
self.model = model
self.year = year
def get_descriptive_name(self):
"""返回整潔的描述性信息"""
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
## 2019 Audi A4
Car <- R6Class("Car", list(
make = NULL,
model = NULL,
year = NA,
initialize = function(make, model, year) {
self$make <- make
self$model <- model
self$year <- year
},
get_descriptive_name = function() {
long_name <- str_glue("{self$year} {self$make} {self$model}")
return(str_to_title(long_name))
}
))
my_new_car <- Car$new("audi", "a4", 2019)
cat(my_new_car$get_descriptive_name())
## 2019 Audi A4
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
def read_odometer(self):
print(f"This car has {self.odometer_reading} miles on it.")
my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
## 2019 Audi A4
my_new_car.read_odometer()
## This car has 0 miles on it.
Car <- R6Class("Car", list(
make = NULL,
model = NULL,
year = NA,
odometer_reading = 0,
initialize = function(make, model, year, odometer_reading) {
self$make <- make
self$model <- model
self$year <- year
},
get_descriptive_name = function() {
long_name <- str_glue("{self$year} {self$make} {self$model}")
return(str_to_title(long_name))
},
read_odometer = function() {
cat(str_glue("This car has {self$odometer_reading} miles on it."), "\n")
}
))
my_new_car <- Car$new("audi", "a4", 2019)
cat(my_new_car$get_descriptive_name(), "\n")
## 2019 Audi A4
my_new_car$read_odometer()
## This car has 0 miles on it.
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
def read_odometer(self):
print(f"This car has {self.odometer_reading} miles on it.")
my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
## 2019 Audi A4
my_new_car.odometer_reading = 23
my_new_car.read_odometer()
## This car has 23 miles on it.
Car <- R6Class("Car", list(
make = NULL,
model = NULL,
year = NA,
odometer_reading = 0,
initialize = function(make, model, year, odometer_reading) {
self$make <- make
self$model <- model
self$year <- year
},
get_descriptive_name = function() {
long_name <- str_glue("{self$year} {self$make} {self$model}")
return(str_to_title(long_name))
},
read_odometer = function() {
cat(str_glue("This car has {self$odometer_reading} miles on it."), "\n")
}
))
my_new_car <- Car$new("audi", "a4", 2019)
cat(my_new_car$get_descriptive_name(), "\n")
## 2019 Audi A4
my_new_car$odometer_reading <- 23
my_new_car$read_odometer()
## This car has 23 miles on it.
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
def read_odometer(self):
print(f"This car has {self.odometer_reading} miles on it.")
def update_odometer(self, mileage):
"""將裡程表讀數設置為指定值,禁止將裡程表讀數往回調"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't rool back an odometer!")
my_new_car = Car('audi', 'a4', 2019)
print(my_new_car.get_descriptive_name())
## 2019 Audi A4
my_new_car.update_odometer(23)
my_new_car.read_odometer()
## This car has 23 miles on it.
Car <- R6Class("Car", list(
make = NULL,
model = NULL,
year = NA,
odometer_reading = 0,
initialize = function(make, model, year, odometer_reading) {
self$make <- make
self$model <- model
self$year <- year
},
get_descriptive_name = function() {
long_name <- str_glue("{self$year} {self$make} {self$model}")
return(str_to_title(long_name))
},
read_odometer = function() {
print(str_glue("This car has {self$odometer_reading} miles on it."))
},
update_odometer = function(mileage) {
if (mileage >= self$odometer_reading) {
self$odometer_reading <- mileage
} else {
cat("You can't rool back an odometer!", "\n")
}
}
))
my_new_car <- Car$new("audi", "a4", 2019)
cat(my_new_car$get_descriptive_name(), "\n")
## 2019 Audi A4
my_new_car$update_odometer(23)
my_new_car$read_odometer()
## This car has 23 miles on it.
class Car:
def __init__(self, make, model, year):
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
def read_odometer(self):
print(f"This car has {self.odometer_reading} miles on it.")
def update_odometer(self, mileage):
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't rool back an odometer!")
def increment_odometer(self, miles):
"""將裡程表讀數增加制定的量"""
self.odometer_reading += miles
my_used_car = Car('subaru', 'outback', 2015)
print(my_used_car.get_descriptive_name())
## 2015 Subaru Outback
my_used_car.update_odometer(23_500)
my_used_car.read_odometer()
## This car has 23500 miles on it.
my_used_car.increment_odometer(100)
my_used_car.read_odometer()
## This car has 23600 miles on it.
Car <- R6Class("Car", list(
make = NULL,
model = NULL,
year = NA,
odometer_reading = 0,
initialize = function(make, model, year, odometer_reading) {
self$make <- make
self$model <- model
self$year <- year
},
get_descriptive_name = function() {
long_name <- str_glue("{self$year} {self$make} {self$model}")
return(str_to_title(long_name))
},
read_odometer = function() {
cat(str_glue("This car has {self$odometer_reading} miles on it."), "\n")
},
update_odometer = function(mileage) {
if (mileage >= self$odometer_reading) {
self$odometer_reading <- mileage
} else {
cat("You can't rool back an odometer!", "\n")
}
},
increment_odometer = function(miles) {
self$odometer_reading = self$odometer_reading + miles
}
))
my_used_car = Car$new('subaru', 'outback', 2015)
cat(my_used_car$get_descriptive_name(), "\n")
## 2015 Subaru Outback
my_used_car$update_odometer(23500)
my_used_car$read_odometer()
## This car has 23500 miles on it.
my_used_car$increment_odometer(100)
my_used_car$read_odometer()
## This car has 23600 miles on it.
class ElectricCar(Car):
"""電動車的獨特之處"""
def __init__(self, make, model, year):
"""初始化父類的屬性"""
super().__init__(make, model, year)
my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
## 2019 Tesla Model S
ElectricCar <- R6Class("ElectricCar", inherit = Car)
my_tesla <- ElectricCar$new("tesla", "model s", 2019)
cat(my_tesla$get_descriptive_name())
## 2019 Tesla Model S
class ElectricCar(Car):
def __init__(self, make, model, year):
"""初始化父類的屬性,再初始化電動汽車特有的屬性"""
super().__init__(make, model, year)
self.battery_size = 75
def describe_battery(self):
"""列印一條描述電瓶容量的消息"""
print(f"This car has a {self.battery_size}-kWh battery.")
my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
## 2019 Tesla Model S
my_tesla.describe_battery()
## This car has a 75-kWh battery.
ElectricCar <- R6Class("ElectricCar", inherit = Car) # 繼承父類
ElectricCar$set('public', 'battery_size', 75) # 添加屬性
ElectricCar$set('public', 'describe_battery', function() {
cat(str_glue("This car has a {self$battery_size}-kWh battery."), "\n")
}) # 添加方法
my_tesla = ElectricCar$new('tesla', 'model s', 2019)
cat(my_tesla$get_descriptive_name(), "\n")
## 2019 Tesla Model S
my_tesla$describe_battery()
## This car has a 75-kWh battery.
class Car:
def __init__(self, make, model, year):
"""初始化描述汽車屬性"""
self.make = make
self.model = model
self.year = year
self.odometer_reading = 0
def get_descriptive_name(self):
"""返回整潔的描述性信息"""
long_name = f"{self.year} {self.make} {self.model}"
return long_name.title()
def read_odometer(self):
"""列印汽車裡程"""
print(f"This car has {self.odometer_reading} miles on it.")
def update_odometer(self, mileage):
"""將裡程表讀數設置為指定值"""
if mileage >= self.odometer_reading:
self.odometer_reading = mileage
else:
print("You can't rool back an odometer!")
def increment_odometer(self, miles):
"""將裡程表讀數增加制定的量"""
self.odometer_reading += miles
def fill_gas_tank(self):
print("All cars need a gas tank!") # 父類的方法
class ElectricCar(Car):
def __init__(self, make, model, year):
"""初始化父類的屬性,再初始化電動汽車特有的屬性"""
super().__init__(make, model, year)
self.battery_size = 75
def describe_battery(self):
"""列印一條描述電瓶容量的消息"""
print(f"This car has a {self.battery_size}-kWh battery.")
def fill_gas_tank(self):
print("This car doesn't need a gas tank!") # 重寫父類的方法
Car <- R6Class("Car", list(
make = NULL,
model = NULL,
year = NA,
odometer_reading = 0,
initialize = function(make, model, year, odometer_reading) {
self$make <- make
self$model <- model
self$year <- year
},
get_descriptive_name = function() {
long_name <- str_glue("{self$year} {self$make} {self$model}")
return(str_to_title(long_name))
},
read_odometer = function() {
cat(str_glue("This car has {self$odometer_reading} miles on it."), "\n")
},
update_odometer = function(mileage) {
if (mileage >= self$odometer_reading) {
self$odometer_reading <- mileage
} else {
cat("You can't rool back an odometer!", "\n")
}
},
increment_odometer = function(miles) {
self$odometer_reading = self$odometer_reading + miles
},
fill_gas_tank = function() {
cat("All cars need a gas tank!", "\n")
}
))
ElectricCar <- R6Class("ElectricCar", inherit = Car)
ElectricCar$set('public', 'battery_size', 75)
ElectricCar$set('public', 'describe_battery', function() {
cat(str_glue("This car has a {self$battery_size}-kWh battery."), "\n")
})
ElectricCar$set('public', 'fill_gas_tank', function() {
cat("This car doesn't need a gas tank!", "\n")
})
my_tesla = ElectricCar$new('tesla', 'model s', 2019)
cat(my_tesla$get_descriptive_name(), "\n")
## 2019 Tesla Model S
my_tesla$fill_gas_tank()
## This car doesn't need a gas tank!
class Battery:
def __init__(self, battery_size = 75):
self.battery_size = battery_size
def describe_battery(self):
print(f"This car has a {self.battery_size}-kWh battery.")
def get_range(self):
"""列印一條消息,指出電瓶的續航裡程"""
if self.battery_size == 75:
rng = 260
elif self.battery_size == 100:
rng = 315
print(f"This car can go about {rng} miles on a full charge.")
class ElectricCar(Car):
def __init__(self, make, model, year):
"""初始化父類的屬性,再初始化電動汽車特有的屬性"""
super().__init__(make, model, year)
self.battery = Battery() # 將Battery()實例化並將該實例賦給屬性self.battery
my_tesla = ElectricCar('tesla', 'model s', 2019)
print(my_tesla.get_descriptive_name())
## 2019 Tesla Model S
my_tesla.battery.describe_battery()
## This car has a 75-kWh battery.
my_tesla.battery.get_range()
## This car can go about 260 miles on a full charge.
Battery <- R6Class("Battery", lock_objects = F, list(
battery_size = NA,
initialize = function(battery_size = 75) {
self$battery_size <- battery_size
},
describe_battery = function() {
cat(str_glue("This car has a {self$battery_size}-kWh battery."), "\n")
},
get_rng = function() {
if (self$battery_size == 75) {
assign("rng", 260, envir = .GlobalEnv)
} else if (self$battery_size == 100) {
assign("rng", 315, envir = .GlobalEnv)
}
cat(str_glue("This car can go about {rng} miles on a full charge."), "\n")
}
))
ElectricCar <- R6Class("ElectricCar", inherit = Car)
ElectricCar$set('public', 'battery', Battery$new())
my_tesla = ElectricCar$new('tesla', 'model s', 2019)
cat(my_tesla$get_descriptive_name(), "\n")
## 2019 Tesla Model S
my_tesla$battery$describe_battery()
## This car has a 75-kWh battery.
my_tesla$battery$get_rng()
## This car can go about 260 miles on a full charge.
from random import randint
randint(1, 6)
## 3
sample(1:6, size = 1)
## [1] 1
from random import choice
players = ['charles', 'martina', 'michael', 'florence', 'eli']
first_up = choice(players)
first_up
## 'eli'
players = c('charles', 'martina', 'michael', 'florence', 'eli')
first_up = sample(players, size = 1)
first_up
## [1] "charles"