1. 程式人生 > >python - work5 - 類與物件

python - work5 - 類與物件

# -*- coding:utf-8 -*-

'''
@project: jiaxy
@author: Jimmy
@file: work_20181119.py
@ide: PyCharm Community Edition
@time: 2018-11-19 13:53
@blog: https://www.cnblogs.com/gotesting/

'''

'''
1:建立一個名為 User 的類,
其中包含屬性 first_name 和 last_name,還有使用者簡介通常會儲存的其他幾個屬性。
在類 User 中定義一個名為 describe_user()的方法,它列印使用者資訊摘要;再定義一個名為 greet_user()的方法,它向用戶發出個性化的問候。
建立多個表示不同使用者的例項,並對每個例項都呼叫上述兩個方法。 
'''
class User:

def __init__(self,first_name,last_name,age,hobby):
self.first_name = first_name
self.last_name = last_name
self.age = age
self.hobby = hobby

def describe_user(self):
print('姓名:{0}{1}'.format(self.last_name,self.first_name))
print('年齡:{0}歲'.format(self.age))
print('愛好:{0}'.format(self.hobby))

def greet_user(self,greet):
print('{0}{1},{2}'.format(self.last_name,self.first_name,greet))

p1 = User('xy','Jia',18,'Play Games')
p1.describe_user()
p1.greet_user('你真的好帥!')

p2 = User('hm','Zhao',18,'Sleep')
p2.describe_user()
p2.greet_user('你真是美麗凍人!')


'''
2:定義一個學生類。
1)有下面的類屬性: 1 姓名 2 年齡 3 成績(語文,數學,英語)[每課成績的型別為整數] ,均放在初始化函式裡面。
2)類方法:
a)獲取學生的姓名:get_name() 返回型別:str b)獲取學生的年齡:get_age() 返回型別:int
c) 返回3門科目中最高的分數。get_course() 返回型別:int
寫好類以後,可以定義2個同學測試下: zm = Student('zhangming',20,[69,88,100]) 返回結果: zhangming 20 100
'''
class Student:
def __init__(self,name,age,score):
self.name = name
self.age = age
self.score = score

def get_name(self):
get_name = self.name
return get_name

def get_age(self):
get_age = self.age
return get_age

def get_score(self):
max_score = max(self.score)
return max_score

zm = Student('zhangming',20,[69,88,100])
name = zm.get_name()
age = zm.get_age()
score = zm.get_score()
print('''
zm同學的資訊如下:
姓名:{0}
年齡:{1}
最高分數:{2}
'''.format(name,age,score))

'''
3.人和機器猜拳遊戲寫成一個類,有如下幾個函式:
1)函式1:選擇角色1 曹操 2張飛 3 劉備
2)函式2:角色猜拳1剪刀 2石頭 3布 玩家輸入一個1-3的數字
3)函式3:電腦出拳 隨機產生1個1-3的數字,提示電腦出拳結果
4)函式4:角色和機器出拳對戰,對戰結束後,最後出示本局對戰結果...贏...輸,然後提示使用者是否繼續?按y繼續,按n退出。
5)最後結束的時候輸出結果 角色贏幾局 電腦贏幾局,平局幾次 遊戲結束
'''
import random
class MoraGame:

# 使用者選擇角色
def user_role(self):
role_dict = {"1":'曹操','2':'張飛','3':'劉備'}
while True:
role_id = input('''
請選擇角色:
1 : 曹操
2 : 張飛
3 : 劉備
輸入序號即可:\n'''
)
if role_id in role_dict.keys():
break
role_name = role_dict[role_id]
return role_name

# 使用者猜拳
def user_mora(self):
mora_dict = {'1':'剪刀','2':'石頭','3':'布'}
while True:
mora_user_id = input('''
請猜拳:
1 : 剪刀
2 : 石頭
3 : 布
輸入序號即可:\n'''
)
if mora_user_id in mora_dict.keys():
break
mora_user = mora_dict[mora_user_id]
return mora_user

# 電腦隨機猜拳
def computer_mora(self):
mora_dict = {'1':'剪刀','2':'石頭','3':'布'}
mora_computer_id = random.randint(1,3)
mora_computer_id = random.randint(1,3)
mora_computer = mora_dict[str(mora_computer_id)]
return mora_computer

# 雙方對戰及猜拳結果統計
def battle(self):

count = 0
count_win = 0
count_lose = 0
count_dogfall = 0
continue_list = ['y','n']
role = self.user_role()

# 猜拳判斷及計數
while True:
count += 1
mora_user = self.user_mora()
mora_computer = self.computer_mora()

# 雙方戰平
if mora_user == mora_computer:
print('''
您猜拳:{0}
電腦猜拳:{1}
對戰結果:{2}
'''.format(mora_user,mora_computer,'雙方戰平!'))
count_dogfall += 1
# 先根據角色輸入,再根據電腦輸入,判斷輸贏
else:
if mora_user == '剪刀':
if mora_computer == '石頭':
print('''
您猜拳:{0}
電腦猜拳:{1}
對戰結果:{2}
'''.format(mora_user,mora_computer,'您輸了!'))
count_lose += 1
else:
print('''
您猜拳:{0}
電腦猜拳:{1}
對戰結果:{2}
'''.format(mora_user,mora_computer,'您贏了!'))
count_win += 1
elif mora_user == '石頭':
if mora_computer == '剪刀':
print('''
您猜拳:{0}
電腦猜拳:{1}
對戰結果:{2}
'''.format(mora_user,mora_computer,'您贏了!'))
count_win += 1
else:
print('''
您猜拳:{0}
電腦猜拳:{1}
對戰結果:{2}
'''.format(mora_user,mora_computer,'您輸了!'))
count_lose += 1
elif mora_user == '布':
if mora_computer == '剪刀':
print('''
您猜拳:{0}
電腦猜拳:{1}
對戰結果:{2}
'''.format(mora_user,mora_computer,'您輸了!'))
count_lose += 1
else:
print('''
您猜拳:{0}
電腦猜拳:{1}
對戰結果:{2}
'''.format(mora_user,mora_computer,'您贏了!'))
count_win += 1

# 判斷輸入是否為y,n,若不是,提示重新輸入
while True:
continue_or_not = input('是否繼續?輸入y繼續,輸入n退出:\n')
if continue_or_not in continue_list:
break

# 若輸入為n,退出迴圈
if continue_or_not == 'n':
break
print('{0}您好,您一共猜拳{1}次,贏{2}次,輸{3}次,打平{4}次'.format(role,count,count_win,count_lose,count_dogfall))

m1 = MoraGame()
m1.battle()


'''
4:按照以下要求定義一個遊樂園門票類,並建立例項呼叫函式,完成兒童和大人的總票價統計(人數不定,由你輸入的人數個數來決定)

1)平日票價100元 

2)週末票價為平日票價120% 

3)兒童半價
'''
import datetime
class AmusementParkTicket:

ticket_workday_adults = 100
ticket_workday_childs = 50

def workday(self):
# 獲取當前工作日:週一到周天分別為0-6
today = datetime.datetime.now().weekday()
# 工作日票價
if 4 >= today >= 0:
ticket_adults = self.ticket_workday_adults
ticket_childs = self.ticket_workday_childs
# 週末票件
else:
ticket_adults = self.ticket_workday_adults * 1.2
ticket_childs = self.ticket_workday_childs * 1.2
return ticket_adults,ticket_childs

def get_tickets_count(self,adultsNum,childsNum):
tickets_adults_today,tickets_child_today = self.workday()
# 分別計算大人總票價、兒童總票價、總票價
tickets_adults_count = tickets_adults_today * adultsNum
tickets_childs_count = tickets_child_today * childsNum
tickets_count = tickets_adults_count + tickets_childs_count
print('{0}個兒童和{1}個大人的總票價為:{2}元。'.format(childsNum,adultsNum,tickets_count))

a1 = AmusementParkTicket()
a1.get_tickets_count(2,4)
a1.get_tickets_count(10,20)