[关闭]
@sevenup233 2017-08-04T04:16:45.000000Z 字数 3067 阅读 1016

PY习题

PY


网址
https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000

函数式编程

map/reduce

1.

  1. def normalize(name):
  2. return str.capitalize(name)

2.

  1. def cheng(x,y):
  2. return x*y
  3. return reduce(cheng,L)

3.

  1. n = len(s)
  2. a = -1
  3. for i in range(n):
  4. a += 1
  5. if s[i] == '.':
  6. break
  7. #‘a’为小数点位置
  8. def fn(x, y):
  9. return x * 10 + y
  10. def char2num(s):
  11. return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]
  12. #基本函数
  13. s1 = ''
  14. s2 = ''
  15. for i in range(a):
  16. s1 = s1 + s[i]
  17. for i in range(n-a-1):
  18. s2 = s2 + s[i+a+1]
  19. #重建无小数点数
  20. S = s1 + s2
  21. return reduce(fn, map(char2num, S))/(10**a)

Filter

1.

  1. L = str(n)
  2. a = len(L)
  3. b = 0
  4. for i in range(a):
  5. if L[i] == L[a-i-1]:
  6. b += 1
  7. return a == b
  1. #原来切片能这么玩
  2. a = str(n)
  3. b = a[::-1]
  4. return a == b

sorted

1.

  1. for i in t:
  2. if isinstance(i,str):
  3. return i.lower()

2.

  1. def by_score(t):
  2. for i in t:
  3. if isinstance(i,int):
  4. return(i)
  5. L2 = sorted(L, key=by_score,reverse=True)

面向对象高级编程

使用@property

  1. @property
  2. def width(self):
  3. return self._width
  4. @width.setter
  5. def width(self,value):
  6. self._width = value
  7. @property
  8. def height(self):
  9. return self._height
  10. @height.setter
  11. def height(self,value):
  12. self._height = value
  13. @property
  14. def resolution(self):
  15. return self._width*self._height

常用内建模块

datetime

  1. dt_dt = datetime.strptime(dt_str, '%Y-%m-%d %H:%M:%S')
  2. tz_match = re.match('^UTC([+-])(\d+):(\d+)', tz_str)
  3. tz = int(tz_match.group(1)+str(int(tz_match.group(2))))
  4. tz_utc_aim = timezone(timedelta(hours=tz))
  5. aim_dt = dt_dt.replace(tzinfo=tz_utc_aim)
  6. dt_ts = aim_dt.timestamp()
  7. return dt_ts

base64

  1. if isinstance(s,str) == True:
  2. a = len(s) % 4
  3. if a == 0:
  4. return base64.b64decode(s)
  5. else:
  6. return base64.b64decode(s + '='*(4-a))
  7. else:
  8. s_str = s.decode('ascii')
  9. b = len(s_str) % 4
  10. if b == 0:
  11. return base64.b64decode(s_str)
  12. else:
  13. return base64.b64decode(s_str + '='*(4-b))
  1. #原来bytes可以这么玩
  2. return base64.b64decode(s + b'=' * (4 - len(s) % 4))
  1. #原来join可以这么玩
  2. d = [s]
  3. m = len(s) % 4
  4. for i in range(m):
  5. d.append(b'=')
  6. return base64.b64decode(b''.join(d))

hashlib

1.密码 -> MD5

  1. import hashlib
  2. def calc_md5(password):
  3. md5 = hashlib.md5()
  4. md5.update(password.encode('utf-8'))
  5. return md5.hexdigest()

2.验证密码

  1. import hashlib
  2. db = {
  3. 'michael': 'e10adc3949ba59abbe56e057f20f883e',
  4. 'bob': '878ef96e86145580c38c87f0410ad153',
  5. 'alice': '99b1c2188db85afee403b1536010c2c9'
  6. }
  7. def login(user,password):
  8. md5 = hashlib.md5()
  9. md5.update(password.encode('utf-8'))
  10. pw_md5 = md5.hexdigest()
  11. if pw_md5 == db[user]:
  12. print('Ture')
  13. else:
  14. print('False')

3.加盐加用户名

  1. import hashlib
  2. db = {}
  3. def register(user, password):
  4. safe_password = password + user + 'the-Salt'
  5. md5 = hashlib.md5()
  6. md5.update(safe_password.encode('utf-8'))
  7. get_md5 = md5.hexdigest()
  8. db[user] = get_md5
  9. def login(user,password):
  10. safe_password = password + user + 'the-Salt'
  11. md5 = hashlib.md5()
  12. md5.update(safe_password.encode('utf-8'))
  13. pw_md5 = md5.hexdigest()
  14. if pw_md5 == db[user]:
  15. print('Ture')
  16. else:
  17. print('False')

访问数据库

使用SQLite

  1. conn = sqlite3.connect(db_file)
  2. cursor = conn.cursor()
  3. cursor.execute('select * from user')
  4. values = cursor.fetchall()
  5. cursor.close()
  6. conn.close()
  7. name = []
  8. def by_score(t):
  9. for i in t:
  10. if isinstance(i,int):
  11. return(i)
  12. L = sorted(values, key=by_score)
  13. for i in range(len(L)):
  14. if isinstance(i,int) and low <= L[i][2] <= high:
  15. name.append(L[i][1])
  16. return name
  1. #原来SQL有这种操作
  2. connect = sqlite3.connect(db_file)
  3. cursor_score = connect.cursor()
  4. cursor_score.execute('select name from user where score>=? and score<=? order by score', (low, high))
  5. values = cursor_score.fetchall()
  6. cursor_score.close()
  7. connect.close()
  8. return [value[0] for value in values]
添加新批注
在作者公开此批注前,只有你和作者可见。
回复批注