一次上机试题(面向对象)
生活随笔
收集整理的這篇文章主要介紹了
一次上机试题(面向对象)
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1 1.文件操作有哪些模式?請簡述各模式的作用
2 r:讀, 默認文件打開就是以r模式,這個文件前提要存在不然報錯。
3 w:寫,文件不存在,會自動創建,存在話,就覆蓋寫。
4 a:追加,文件末尾追加寫入內容。
5 r+:可讀也可寫。
6 w+:可寫,,不過寫是覆蓋的寫'
7 a+,追加寫
8
9 2.s = '**hello,world!**'請使用strip方法去掉字符串兩端的'*'號
10 s = '**hello,world!**'
11 s = s.strip('*')
12 print(s)
13
14 3.用戶輸入一個任意數字n,求1-n之間所有數字中的奇數
15
16 while True:
17 num_input = input('請輸入數字:').strip()
18 if num_input.isdigit() and int(num_input) != 0:
19 num_input = int(num_input)
20 for num in range(1, num_input + 1):
21 if num % 2 == 1:
22 print(num) # 顯示奇數
23
24 else:
25 continue
26 else:
27 print("輸入非法,請重新錄入")
28 continue
29
30
31 4.s = 'hskakhlkshfkskjakf',請去除s字符串中重復的字母
32 s = 'hskakhlkshfkskjakf'
33 s_new = []
34 for api in s.strip():
35 if api in s_new:
36 continue
37 else:
38 s_new.append(api)
39 s = "".join(s_new)
40 print(s)
41
42 5.a=10
43 b=20
44 def test5(a,b):
45 print(a,b)
46 c = test5(b,a)
47 print(c)
48 b=20
49
50 def test5(a,b):
51
52 print(a,b)
53 c = test5(b,a)
54 print(c)
55 上述代碼中,打印出來的值a,b,c分別是什么?為什么?
56 報錯,c=test5(b,a),調用test5,程序的內容加載到內存,,,從事例看,是位置傳值 ,實參b-->a,實參a--->b,c是函數的結果
57 b是直接找到在函數里找不到,
58 就找外面找到了b=20,,b賦值給形參a, ,所以a會有值
59 同理,,由于實參a沒定義,找不到,沒法給b值,所以直接報錯,并結束下面代碼的運行,print(a,b)不會被執行
60 同理,c是在是全局,有定義,由于函數定義中沒有return,所以c是none,
61 總結:實參a沒定義,報錯,中止函數體內容被執行,,所以b,c沒被輸出
62
63
64 6.s = '123.33sdhf3424.34fdg323.324',計算字符串中所有數字的和
65 s = '123.33sdhf3424.34fdg323.324'
66 import re
67 result = ""
68 s = re.findall('\d+\.?\d+',s)
69 for i in s:
70 result = "+".join(s)
71 print("表達式:%s 的和是"%result) #123.33+3424.34+323.324
72 su = 0
73 for i in result.split("+"):
74 i = float(i)
75 su += i
76 print(i) #323.324
77
78 本題結果應為:123.33+3424.34+323.32
79 7.d={'k1':'v1','k2':[1,2,3],('k','3'):{1,2,3}}
80 請用程序實現:
81 1)輸出上述字典中value為列表的key
82 2)如果字典中的key是一個元祖,請輸出對應的value值。
83 3)d[('k','3')]對應的value是一個什么數據類型
84 d={'k1':'v1','k2':[1,2,3],('k','3'):{1,2,3}}
85 for key,value_re in d.items():
86 if type(value_re) == list:
87 print(key)#k2
88 elif type(key) == tuple:
89 print(d[key]) #{1, 2, 3}
90 ty = {"<class 'list'>": "list", "<class 'dict'>": "dict", "<class 'set'>": "set"}
91 for i in ty.keys():
92 if i == str(type(d[key])):
93 print(ty[i]) #set
94
95 8.如果不使用@wrapper裝飾器,請在a()之前加入一句代碼,達到相同的效果
96 def wrapper(func):
97 def inner(*arg, **kwargs):
98 func(*arg, **kwargs)
99 return inner
100
101 @wrapper
102 def a(arg):
103 print(arg)
104
105 a()
106
107 def wrapper(func):
108 def inner(*arg, **kwargs):
109 func(*arg, **kwargs)
110 return inner
111 # @wrapper
112 def a(arg):
113 print(arg)
114 a = wrapper(a) #這里必須注意,a必須是那個調用函數名
115 a(1)
116
117 9.請處理文件7th_questions,輸出所有以'T'開頭的行
118 with open ("7th_questions",'r',encoding='utf-8') as f:
119 for line in f:
120 if line.startswith('T'):
121 print(line.strip())
122 else:
123 continue
124
125 10.讀代碼,請為這段代碼畫流程圖
126
127 11 默寫字符串對象的內置方法,越多越好
128 plist = dir(str)
129 s = ""
130 p = []
131 for i in plist:
132 if i.startswith("__"):
133 p.append(i)
134 s = ",".join(p)
135
136 else:
137 continue
138 print(s )
139 __add__,__class__,__contains__,__delattr__,__dir__,__doc__,__eq__,__format__
140 ,__ge__,__getattribute__,__getitem__,__getnewargs__,__gt__,__hash__,__init__,
141 __iter__,__le__,__len__,__lt__,__mod__,__mul__,__ne__,__new__,__reduce__,__reduce_ex__,
142 __repr__,__rmod__,__rmul__,__setattr__,__sizeof__,__str__,__subclasshook__
143
144
145 二 面向對象
146
147 1.請簡述類、對象、實例化、實例這些名詞的含義:
148 類是一組有著相似特征或者技能的對象集合
149 對象:從類中實例化出來的
150 實例化:產生一個從類中產生一個對象就叫實例化(p = classname.()
151 p 就叫一個classname實例/對象
152 2.面向對象的三大特性是什么?
153 封裝,繼承,多態
154 3.什么是方法?類中可以定義哪幾種方法?
155 定義具有有著相同技能、功能叫方法,可以定義構造方法,普通方法,非綁定方法,調用內置方法
156 4.什么是屬性?類中可以定義哪幾種屬性?
157 有著相同特征叫屬性,定義:私有屬性,裝飾屬性
158 5.請簡述類方法和靜態方法有哪些區別?
159 類方法:可以綁定到任何從類中實例化出來的對象身上,,并且它的第一個參數是self,實例化出來的對象引用被當作第一
160 參數傳給self
161 靜態方法:不需要給參數,調用方式直接是類名.靜態方法名() ,也可以是對象調用 對象名.靜態方法名()
162 6.請簡述新式類和經典類的區別?
163 py2中,沒有繼承object都是經典類,嘗試優先
164 py3中,所有類都叫新式類,廣度優先
165 7.有一個類定義:
166 class Person:
167 def __init__(self,name,age):
168 self.name = name
169 self.age = age
170
171 1)初始化10個不同的對象
172 2)求最高age的對象的name
173 import sys
174 class Person:
175 def __init__(self,name,age):
176 self.name = name
177 self.age = age
178 dic1 = {}
179 l = []
180 for i in range(1,11):
181 t = "p%s"%i
182 t = Person("name%s"%i,i)
183 dic1[t.name] = i
184 l.append(i)
185 if t.age == max(l):
186 print(t.name)
187
188
189 8. 模擬cs游戲
190 人物角色分為警察和匪徒兩種,定義成兩個類
191 class public_people:
192 def __init__(self,name,sex,livelife,wuqi):
193 self.name = name
194 self.wuqi = wuqi
195 self.sex = sex
196 self.livelife = livelife #生命力
197 class police(public_people):
198 acctrvalue = 800 #攻擊力
199 def __init__(self,name,sex,livelife,wuqi):
200 super().__init__(name,sex,livelife,wuqi)
201
202 def attrk (self,tr_obj):
203 tr_obj.livelife -= self.acctrvalue
204 return tr_obj.acctrvalue
205 class terrorist(public_people):
206 acctrvalue = 300
207 def __init__(self,name,sex,livelife,wuqi):
208 super().__init__(name,sex,livelife,wuqi)
209 def attrk(self,pol_obj):
210 pol_obj.livelife -= self.acctrvalue
211 return pol_obj.livelife
212 p1 = police('name1','male',1000,'dao')
213 t1 = terrorist('t1','male',1000,'dao')
214 p1.attrk(t1)
215 print(t1.livelife,p1.name) #200 name1
216 t1.attrk(p1)
217 print(p1.livelife,t1.name)
218
219 所有的警察的角色都是police
220 每個警察都有自己獨有名字,生命值,武器,性別
221 每個都可以開槍攻擊敵人,切攻擊目標不能是police
222
223 所有的警察的角色都是terrorist
224 每個匪徒都有自己獨有名字,生命值,武器,性別
225 每個都可以開槍攻擊敵人,切攻擊目標不能是terrorist
226
227
228 9. 實例化一個警察,一個匪徒,警察攻擊匪徒,匪徒掉血
229
230 10. 提取警察類和匪徒類相似之處定義成一個父類,使用繼承的方式減少代碼重復
231
232 11
233
234 class Base:
235 def f1(self):
236 self.f2()
237
238 def f2(self):
239 print('...')
240
241 class Foo(Base):
242 def f2(self):
243 print('9999')
244
245 obj = Foo()
246 obj.f1()
247
248 問題1:面向對象中的self指的什么?
249 問題2:運行結果并簡述原因
250 class Base:
251 def f1(self):
252 self.f2()
253
254 def f2(self):
255 print('...')
256
257 class Foo(Base):
258 def f2(self):
259 print('9999')
260 pass
261
262 obj = Foo()
263 obj.f1() #9999
264 self:是調用對象的引用
265 輸出:9999,是繼承首先是從對象本身找,沒有定義f1,--->對象的類中找,也沒有這個f1,
266 --->去父類中找到f1,f1中調用的是self.f2,,而名稱空間已經有self.f2,所以對象優先運行自己的f2
267
268
269 三 并發編程
270
271 1 線程,進程,協程的區別?
272 線程:最小的執行單位
273 進程:是資源管理單位
274
275 2 GIL是什么,對于python有什么影響?
276 gil是全局解釋器鎖,,同一時刻,同一進程,只有一個線程被執行
277 3 解釋LOCK,RLOCL,EVENT,samphore的應用場景
278
279 4 基于對列實現一個生產者消費者模型,要求:隊列內元素不能超過5個,一旦有五個元素了,生產者不再生產,其他內容 自由擴散
280
281 5 基于selectors模塊實現并發聊天,退出某一個客戶端不能影響其他用戶
282 import selectors
283 import socket
284 sock = socket.socket()
285 sock.bind(("127.0.0.1",8000))
286 sock.listen(5)
287 sock.setblocking(False)
288
289 sel = selectors.DefaultSelector() #選擇最優級模型
290
291 def accept(conn,mask):
292 conn,addr = sock.accept()
293 print(conn)
294 sel.register(conn,selectors.EVENT_READ,read)
295 sel.register(sock,selectors.EVENT_READ,accept)
296 def read(conn,mask):
297 try:
298 data = conn.recv(1024)
299 print(data.decode('utf-8'))
300 send_data = input(">>>").encode('utf-8')
301 conn.send(send_data)
302 except Exception as e:
303 sel.unregister(conn) #吊消連接
304
305
306
307 while True:
308 events = sel.select() #監聽數據 [(key,mask),(key,mask)]
309 for key,mask in events:
310 # print(key.data) #產生一個函數
311 # print(key.fileobj) #產生一個fd(文件描述符)
312 func = key.data
313 obj = key.fileobj
314 func(obj,mask)
315 # break
316
317
318 clinet
319 import socket
320 sock = socket.socket()
321 sock.connect(("127.0.0.1",8000))
322 while True:
323 send_data = input(">>>")
324 sock.send(send_data.encode('utf-8'))
325 recv_data = sock.recv(1024)
326 print(recv_data.decode('utf-8'))
?
件前提要存在不然報錯。 w:寫,文件不存在,會自動創建,存在話,就覆蓋寫。 a:追加,文件末尾追加寫入內容。 r+:可讀也可寫。 w+:可寫,,不過寫是覆蓋的寫' a+,追加寫轉載于:https://www.cnblogs.com/hongyongshang/p/6846614.html
總結
以上是生活随笔為你收集整理的一次上机试题(面向对象)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 最终成为了热门的语言——python
- 下一篇: python之进程和线程2