diff --git a/A1014280203/0/0.1.png b/A1014280203/0/0.1.png new file mode 100644 index 00000000..57d8b2ba Binary files /dev/null and b/A1014280203/0/0.1.png differ diff --git a/A1014280203/0/0.png b/A1014280203/0/0.png new file mode 100644 index 00000000..fc064751 Binary files /dev/null and b/A1014280203/0/0.png differ diff --git a/A1014280203/0/0.py b/A1014280203/0/0.py new file mode 100644 index 00000000..ef9ec4ea --- /dev/null +++ b/A1014280203/0/0.py @@ -0,0 +1,8 @@ +from PIL import Image, ImageFont, ImageDraw + +image = Image.open('0.png') +w, h = image.size +font = ImageFont.truetype('arial.ttf', 50) +draw = ImageDraw.Draw(image) +draw.text((4*w/5, h/5), '5', fill=(255, 10, 10), font=font) +image.save('0.0.png', 'png') diff --git a/A1014280203/1/1.py b/A1014280203/1/1.py new file mode 100644 index 00000000..df2a47c0 --- /dev/null +++ b/A1014280203/1/1.py @@ -0,0 +1,41 @@ +import base64 + +# base64编码方便使用 + +# 通过id检验优惠券是否存在,通过goods查找商品 +coupon = { + 'id': '1231', + 'goods': '0001', +} + + +def gen_coupon(id, goods): + coupon['id'] = id + coupon['goods'] = goods + raw = '/'.join([k + ':' + v for k, v in coupon.items()]) + raw_64 = base64.urlsafe_b64encode(raw.encode('utf-8')) + c_code = raw_64.decode() + return c_code + + +def save_coupon(c_code): + with open('coupon.txt', 'a+') as file: + file.write(c_code+'\n') + + +def show_coupon(c_code): + print('优惠码:', c_code) + + +def parse_coupon(c_code): + print('解析优惠码:', base64.urlsafe_b64decode(c_code.encode('utf-8'))) + + +def gen_all(): + for i in range(1000, 1200): + c_code = gen_coupon(str(i), str(int(i/2))) + save_coupon(c_code) + + +if __name__ == '__main__': + gen_all() diff --git a/A1014280203/1/coupon.txt b/A1014280203/1/coupon.txt new file mode 100644 index 00000000..ac23361c --- /dev/null +++ b/A1014280203/1/coupon.txt @@ -0,0 +1,400 @@ +aWQ6MTAwMC9nb29kczo1MDA= +aWQ6MTAwMS9nb29kczo1MDA= +aWQ6MTAwMi9nb29kczo1MDE= +aWQ6MTAwMy9nb29kczo1MDE= +aWQ6MTAwNC9nb29kczo1MDI= +aWQ6MTAwNS9nb29kczo1MDI= +aWQ6MTAwNi9nb29kczo1MDM= +aWQ6MTAwNy9nb29kczo1MDM= +aWQ6MTAwOC9nb29kczo1MDQ= +aWQ6MTAwOS9nb29kczo1MDQ= +aWQ6MTAxMC9nb29kczo1MDU= +aWQ6MTAxMS9nb29kczo1MDU= +aWQ6MTAxMi9nb29kczo1MDY= +aWQ6MTAxMy9nb29kczo1MDY= +aWQ6MTAxNC9nb29kczo1MDc= +aWQ6MTAxNS9nb29kczo1MDc= +aWQ6MTAxNi9nb29kczo1MDg= +aWQ6MTAxNy9nb29kczo1MDg= +aWQ6MTAxOC9nb29kczo1MDk= +aWQ6MTAxOS9nb29kczo1MDk= +aWQ6MTAyMC9nb29kczo1MTA= +aWQ6MTAyMS9nb29kczo1MTA= +aWQ6MTAyMi9nb29kczo1MTE= +aWQ6MTAyMy9nb29kczo1MTE= +aWQ6MTAyNC9nb29kczo1MTI= +aWQ6MTAyNS9nb29kczo1MTI= +aWQ6MTAyNi9nb29kczo1MTM= +aWQ6MTAyNy9nb29kczo1MTM= +aWQ6MTAyOC9nb29kczo1MTQ= +aWQ6MTAyOS9nb29kczo1MTQ= +aWQ6MTAzMC9nb29kczo1MTU= +aWQ6MTAzMS9nb29kczo1MTU= +aWQ6MTAzMi9nb29kczo1MTY= +aWQ6MTAzMy9nb29kczo1MTY= +aWQ6MTAzNC9nb29kczo1MTc= +aWQ6MTAzNS9nb29kczo1MTc= +aWQ6MTAzNi9nb29kczo1MTg= +aWQ6MTAzNy9nb29kczo1MTg= +aWQ6MTAzOC9nb29kczo1MTk= +aWQ6MTAzOS9nb29kczo1MTk= +aWQ6MTA0MC9nb29kczo1MjA= +aWQ6MTA0MS9nb29kczo1MjA= +aWQ6MTA0Mi9nb29kczo1MjE= +aWQ6MTA0My9nb29kczo1MjE= +aWQ6MTA0NC9nb29kczo1MjI= +aWQ6MTA0NS9nb29kczo1MjI= +aWQ6MTA0Ni9nb29kczo1MjM= +aWQ6MTA0Ny9nb29kczo1MjM= +aWQ6MTA0OC9nb29kczo1MjQ= +aWQ6MTA0OS9nb29kczo1MjQ= +aWQ6MTA1MC9nb29kczo1MjU= +aWQ6MTA1MS9nb29kczo1MjU= +aWQ6MTA1Mi9nb29kczo1MjY= +aWQ6MTA1My9nb29kczo1MjY= +aWQ6MTA1NC9nb29kczo1Mjc= +aWQ6MTA1NS9nb29kczo1Mjc= +aWQ6MTA1Ni9nb29kczo1Mjg= +aWQ6MTA1Ny9nb29kczo1Mjg= +aWQ6MTA1OC9nb29kczo1Mjk= +aWQ6MTA1OS9nb29kczo1Mjk= +aWQ6MTA2MC9nb29kczo1MzA= +aWQ6MTA2MS9nb29kczo1MzA= +aWQ6MTA2Mi9nb29kczo1MzE= +aWQ6MTA2My9nb29kczo1MzE= +aWQ6MTA2NC9nb29kczo1MzI= +aWQ6MTA2NS9nb29kczo1MzI= +aWQ6MTA2Ni9nb29kczo1MzM= +aWQ6MTA2Ny9nb29kczo1MzM= +aWQ6MTA2OC9nb29kczo1MzQ= +aWQ6MTA2OS9nb29kczo1MzQ= +aWQ6MTA3MC9nb29kczo1MzU= +aWQ6MTA3MS9nb29kczo1MzU= +aWQ6MTA3Mi9nb29kczo1MzY= +aWQ6MTA3My9nb29kczo1MzY= +aWQ6MTA3NC9nb29kczo1Mzc= +aWQ6MTA3NS9nb29kczo1Mzc= +aWQ6MTA3Ni9nb29kczo1Mzg= +aWQ6MTA3Ny9nb29kczo1Mzg= +aWQ6MTA3OC9nb29kczo1Mzk= +aWQ6MTA3OS9nb29kczo1Mzk= +aWQ6MTA4MC9nb29kczo1NDA= +aWQ6MTA4MS9nb29kczo1NDA= +aWQ6MTA4Mi9nb29kczo1NDE= +aWQ6MTA4My9nb29kczo1NDE= +aWQ6MTA4NC9nb29kczo1NDI= +aWQ6MTA4NS9nb29kczo1NDI= +aWQ6MTA4Ni9nb29kczo1NDM= +aWQ6MTA4Ny9nb29kczo1NDM= +aWQ6MTA4OC9nb29kczo1NDQ= +aWQ6MTA4OS9nb29kczo1NDQ= +aWQ6MTA5MC9nb29kczo1NDU= +aWQ6MTA5MS9nb29kczo1NDU= +aWQ6MTA5Mi9nb29kczo1NDY= +aWQ6MTA5My9nb29kczo1NDY= +aWQ6MTA5NC9nb29kczo1NDc= +aWQ6MTA5NS9nb29kczo1NDc= +aWQ6MTA5Ni9nb29kczo1NDg= +aWQ6MTA5Ny9nb29kczo1NDg= +aWQ6MTA5OC9nb29kczo1NDk= +aWQ6MTA5OS9nb29kczo1NDk= +aWQ6MTEwMC9nb29kczo1NTA= +aWQ6MTEwMS9nb29kczo1NTA= +aWQ6MTEwMi9nb29kczo1NTE= +aWQ6MTEwMy9nb29kczo1NTE= +aWQ6MTEwNC9nb29kczo1NTI= +aWQ6MTEwNS9nb29kczo1NTI= +aWQ6MTEwNi9nb29kczo1NTM= +aWQ6MTEwNy9nb29kczo1NTM= +aWQ6MTEwOC9nb29kczo1NTQ= +aWQ6MTEwOS9nb29kczo1NTQ= +aWQ6MTExMC9nb29kczo1NTU= +aWQ6MTExMS9nb29kczo1NTU= +aWQ6MTExMi9nb29kczo1NTY= +aWQ6MTExMy9nb29kczo1NTY= +aWQ6MTExNC9nb29kczo1NTc= +aWQ6MTExNS9nb29kczo1NTc= +aWQ6MTExNi9nb29kczo1NTg= +aWQ6MTExNy9nb29kczo1NTg= +aWQ6MTExOC9nb29kczo1NTk= +aWQ6MTExOS9nb29kczo1NTk= +aWQ6MTEyMC9nb29kczo1NjA= +aWQ6MTEyMS9nb29kczo1NjA= +aWQ6MTEyMi9nb29kczo1NjE= +aWQ6MTEyMy9nb29kczo1NjE= +aWQ6MTEyNC9nb29kczo1NjI= +aWQ6MTEyNS9nb29kczo1NjI= +aWQ6MTEyNi9nb29kczo1NjM= +aWQ6MTEyNy9nb29kczo1NjM= +aWQ6MTEyOC9nb29kczo1NjQ= +aWQ6MTEyOS9nb29kczo1NjQ= +aWQ6MTEzMC9nb29kczo1NjU= +aWQ6MTEzMS9nb29kczo1NjU= +aWQ6MTEzMi9nb29kczo1NjY= +aWQ6MTEzMy9nb29kczo1NjY= +aWQ6MTEzNC9nb29kczo1Njc= +aWQ6MTEzNS9nb29kczo1Njc= +aWQ6MTEzNi9nb29kczo1Njg= +aWQ6MTEzNy9nb29kczo1Njg= +aWQ6MTEzOC9nb29kczo1Njk= +aWQ6MTEzOS9nb29kczo1Njk= +aWQ6MTE0MC9nb29kczo1NzA= +aWQ6MTE0MS9nb29kczo1NzA= +aWQ6MTE0Mi9nb29kczo1NzE= +aWQ6MTE0My9nb29kczo1NzE= +aWQ6MTE0NC9nb29kczo1NzI= +aWQ6MTE0NS9nb29kczo1NzI= +aWQ6MTE0Ni9nb29kczo1NzM= +aWQ6MTE0Ny9nb29kczo1NzM= +aWQ6MTE0OC9nb29kczo1NzQ= +aWQ6MTE0OS9nb29kczo1NzQ= +aWQ6MTE1MC9nb29kczo1NzU= +aWQ6MTE1MS9nb29kczo1NzU= +aWQ6MTE1Mi9nb29kczo1NzY= +aWQ6MTE1My9nb29kczo1NzY= +aWQ6MTE1NC9nb29kczo1Nzc= +aWQ6MTE1NS9nb29kczo1Nzc= +aWQ6MTE1Ni9nb29kczo1Nzg= +aWQ6MTE1Ny9nb29kczo1Nzg= +aWQ6MTE1OC9nb29kczo1Nzk= +aWQ6MTE1OS9nb29kczo1Nzk= +aWQ6MTE2MC9nb29kczo1ODA= +aWQ6MTE2MS9nb29kczo1ODA= +aWQ6MTE2Mi9nb29kczo1ODE= +aWQ6MTE2My9nb29kczo1ODE= +aWQ6MTE2NC9nb29kczo1ODI= +aWQ6MTE2NS9nb29kczo1ODI= +aWQ6MTE2Ni9nb29kczo1ODM= +aWQ6MTE2Ny9nb29kczo1ODM= +aWQ6MTE2OC9nb29kczo1ODQ= +aWQ6MTE2OS9nb29kczo1ODQ= +aWQ6MTE3MC9nb29kczo1ODU= +aWQ6MTE3MS9nb29kczo1ODU= +aWQ6MTE3Mi9nb29kczo1ODY= +aWQ6MTE3My9nb29kczo1ODY= +aWQ6MTE3NC9nb29kczo1ODc= +aWQ6MTE3NS9nb29kczo1ODc= +aWQ6MTE3Ni9nb29kczo1ODg= +aWQ6MTE3Ny9nb29kczo1ODg= +aWQ6MTE3OC9nb29kczo1ODk= +aWQ6MTE3OS9nb29kczo1ODk= +aWQ6MTE4MC9nb29kczo1OTA= +aWQ6MTE4MS9nb29kczo1OTA= +aWQ6MTE4Mi9nb29kczo1OTE= +aWQ6MTE4My9nb29kczo1OTE= +aWQ6MTE4NC9nb29kczo1OTI= +aWQ6MTE4NS9nb29kczo1OTI= +aWQ6MTE4Ni9nb29kczo1OTM= +aWQ6MTE4Ny9nb29kczo1OTM= +aWQ6MTE4OC9nb29kczo1OTQ= +aWQ6MTE4OS9nb29kczo1OTQ= +aWQ6MTE5MC9nb29kczo1OTU= +aWQ6MTE5MS9nb29kczo1OTU= +aWQ6MTE5Mi9nb29kczo1OTY= +aWQ6MTE5My9nb29kczo1OTY= +aWQ6MTE5NC9nb29kczo1OTc= +aWQ6MTE5NS9nb29kczo1OTc= +aWQ6MTE5Ni9nb29kczo1OTg= +aWQ6MTE5Ny9nb29kczo1OTg= +aWQ6MTE5OC9nb29kczo1OTk= +aWQ6MTE5OS9nb29kczo1OTk= +Z29vZHM6NTAwL2lkOjEwMDA= +Z29vZHM6NTAwL2lkOjEwMDE= +Z29vZHM6NTAxL2lkOjEwMDI= +Z29vZHM6NTAxL2lkOjEwMDM= +Z29vZHM6NTAyL2lkOjEwMDQ= +Z29vZHM6NTAyL2lkOjEwMDU= +Z29vZHM6NTAzL2lkOjEwMDY= +Z29vZHM6NTAzL2lkOjEwMDc= +Z29vZHM6NTA0L2lkOjEwMDg= +Z29vZHM6NTA0L2lkOjEwMDk= +Z29vZHM6NTA1L2lkOjEwMTA= +Z29vZHM6NTA1L2lkOjEwMTE= +Z29vZHM6NTA2L2lkOjEwMTI= +Z29vZHM6NTA2L2lkOjEwMTM= +Z29vZHM6NTA3L2lkOjEwMTQ= +Z29vZHM6NTA3L2lkOjEwMTU= +Z29vZHM6NTA4L2lkOjEwMTY= +Z29vZHM6NTA4L2lkOjEwMTc= +Z29vZHM6NTA5L2lkOjEwMTg= +Z29vZHM6NTA5L2lkOjEwMTk= +Z29vZHM6NTEwL2lkOjEwMjA= +Z29vZHM6NTEwL2lkOjEwMjE= +Z29vZHM6NTExL2lkOjEwMjI= +Z29vZHM6NTExL2lkOjEwMjM= +Z29vZHM6NTEyL2lkOjEwMjQ= +Z29vZHM6NTEyL2lkOjEwMjU= +Z29vZHM6NTEzL2lkOjEwMjY= +Z29vZHM6NTEzL2lkOjEwMjc= +Z29vZHM6NTE0L2lkOjEwMjg= +Z29vZHM6NTE0L2lkOjEwMjk= +Z29vZHM6NTE1L2lkOjEwMzA= +Z29vZHM6NTE1L2lkOjEwMzE= +Z29vZHM6NTE2L2lkOjEwMzI= +Z29vZHM6NTE2L2lkOjEwMzM= +Z29vZHM6NTE3L2lkOjEwMzQ= +Z29vZHM6NTE3L2lkOjEwMzU= +Z29vZHM6NTE4L2lkOjEwMzY= +Z29vZHM6NTE4L2lkOjEwMzc= +Z29vZHM6NTE5L2lkOjEwMzg= +Z29vZHM6NTE5L2lkOjEwMzk= +Z29vZHM6NTIwL2lkOjEwNDA= +Z29vZHM6NTIwL2lkOjEwNDE= +Z29vZHM6NTIxL2lkOjEwNDI= +Z29vZHM6NTIxL2lkOjEwNDM= +Z29vZHM6NTIyL2lkOjEwNDQ= +Z29vZHM6NTIyL2lkOjEwNDU= +Z29vZHM6NTIzL2lkOjEwNDY= +Z29vZHM6NTIzL2lkOjEwNDc= +Z29vZHM6NTI0L2lkOjEwNDg= +Z29vZHM6NTI0L2lkOjEwNDk= +Z29vZHM6NTI1L2lkOjEwNTA= +Z29vZHM6NTI1L2lkOjEwNTE= +Z29vZHM6NTI2L2lkOjEwNTI= +Z29vZHM6NTI2L2lkOjEwNTM= +Z29vZHM6NTI3L2lkOjEwNTQ= +Z29vZHM6NTI3L2lkOjEwNTU= +Z29vZHM6NTI4L2lkOjEwNTY= +Z29vZHM6NTI4L2lkOjEwNTc= +Z29vZHM6NTI5L2lkOjEwNTg= +Z29vZHM6NTI5L2lkOjEwNTk= +Z29vZHM6NTMwL2lkOjEwNjA= +Z29vZHM6NTMwL2lkOjEwNjE= +Z29vZHM6NTMxL2lkOjEwNjI= +Z29vZHM6NTMxL2lkOjEwNjM= +Z29vZHM6NTMyL2lkOjEwNjQ= +Z29vZHM6NTMyL2lkOjEwNjU= +Z29vZHM6NTMzL2lkOjEwNjY= +Z29vZHM6NTMzL2lkOjEwNjc= +Z29vZHM6NTM0L2lkOjEwNjg= +Z29vZHM6NTM0L2lkOjEwNjk= +Z29vZHM6NTM1L2lkOjEwNzA= +Z29vZHM6NTM1L2lkOjEwNzE= +Z29vZHM6NTM2L2lkOjEwNzI= +Z29vZHM6NTM2L2lkOjEwNzM= +Z29vZHM6NTM3L2lkOjEwNzQ= +Z29vZHM6NTM3L2lkOjEwNzU= +Z29vZHM6NTM4L2lkOjEwNzY= +Z29vZHM6NTM4L2lkOjEwNzc= +Z29vZHM6NTM5L2lkOjEwNzg= +Z29vZHM6NTM5L2lkOjEwNzk= +Z29vZHM6NTQwL2lkOjEwODA= +Z29vZHM6NTQwL2lkOjEwODE= +Z29vZHM6NTQxL2lkOjEwODI= +Z29vZHM6NTQxL2lkOjEwODM= +Z29vZHM6NTQyL2lkOjEwODQ= +Z29vZHM6NTQyL2lkOjEwODU= +Z29vZHM6NTQzL2lkOjEwODY= +Z29vZHM6NTQzL2lkOjEwODc= +Z29vZHM6NTQ0L2lkOjEwODg= +Z29vZHM6NTQ0L2lkOjEwODk= +Z29vZHM6NTQ1L2lkOjEwOTA= +Z29vZHM6NTQ1L2lkOjEwOTE= +Z29vZHM6NTQ2L2lkOjEwOTI= +Z29vZHM6NTQ2L2lkOjEwOTM= +Z29vZHM6NTQ3L2lkOjEwOTQ= +Z29vZHM6NTQ3L2lkOjEwOTU= +Z29vZHM6NTQ4L2lkOjEwOTY= +Z29vZHM6NTQ4L2lkOjEwOTc= +Z29vZHM6NTQ5L2lkOjEwOTg= +Z29vZHM6NTQ5L2lkOjEwOTk= +Z29vZHM6NTUwL2lkOjExMDA= +Z29vZHM6NTUwL2lkOjExMDE= +Z29vZHM6NTUxL2lkOjExMDI= +Z29vZHM6NTUxL2lkOjExMDM= +Z29vZHM6NTUyL2lkOjExMDQ= +Z29vZHM6NTUyL2lkOjExMDU= +Z29vZHM6NTUzL2lkOjExMDY= +Z29vZHM6NTUzL2lkOjExMDc= +Z29vZHM6NTU0L2lkOjExMDg= +Z29vZHM6NTU0L2lkOjExMDk= +Z29vZHM6NTU1L2lkOjExMTA= +Z29vZHM6NTU1L2lkOjExMTE= +Z29vZHM6NTU2L2lkOjExMTI= +Z29vZHM6NTU2L2lkOjExMTM= +Z29vZHM6NTU3L2lkOjExMTQ= +Z29vZHM6NTU3L2lkOjExMTU= +Z29vZHM6NTU4L2lkOjExMTY= +Z29vZHM6NTU4L2lkOjExMTc= +Z29vZHM6NTU5L2lkOjExMTg= +Z29vZHM6NTU5L2lkOjExMTk= +Z29vZHM6NTYwL2lkOjExMjA= +Z29vZHM6NTYwL2lkOjExMjE= +Z29vZHM6NTYxL2lkOjExMjI= +Z29vZHM6NTYxL2lkOjExMjM= +Z29vZHM6NTYyL2lkOjExMjQ= +Z29vZHM6NTYyL2lkOjExMjU= +Z29vZHM6NTYzL2lkOjExMjY= +Z29vZHM6NTYzL2lkOjExMjc= +Z29vZHM6NTY0L2lkOjExMjg= +Z29vZHM6NTY0L2lkOjExMjk= +Z29vZHM6NTY1L2lkOjExMzA= +Z29vZHM6NTY1L2lkOjExMzE= +Z29vZHM6NTY2L2lkOjExMzI= +Z29vZHM6NTY2L2lkOjExMzM= +Z29vZHM6NTY3L2lkOjExMzQ= +Z29vZHM6NTY3L2lkOjExMzU= +Z29vZHM6NTY4L2lkOjExMzY= +Z29vZHM6NTY4L2lkOjExMzc= +Z29vZHM6NTY5L2lkOjExMzg= +Z29vZHM6NTY5L2lkOjExMzk= +Z29vZHM6NTcwL2lkOjExNDA= +Z29vZHM6NTcwL2lkOjExNDE= +Z29vZHM6NTcxL2lkOjExNDI= +Z29vZHM6NTcxL2lkOjExNDM= +Z29vZHM6NTcyL2lkOjExNDQ= +Z29vZHM6NTcyL2lkOjExNDU= +Z29vZHM6NTczL2lkOjExNDY= +Z29vZHM6NTczL2lkOjExNDc= +Z29vZHM6NTc0L2lkOjExNDg= +Z29vZHM6NTc0L2lkOjExNDk= +Z29vZHM6NTc1L2lkOjExNTA= +Z29vZHM6NTc1L2lkOjExNTE= +Z29vZHM6NTc2L2lkOjExNTI= +Z29vZHM6NTc2L2lkOjExNTM= +Z29vZHM6NTc3L2lkOjExNTQ= +Z29vZHM6NTc3L2lkOjExNTU= +Z29vZHM6NTc4L2lkOjExNTY= +Z29vZHM6NTc4L2lkOjExNTc= +Z29vZHM6NTc5L2lkOjExNTg= +Z29vZHM6NTc5L2lkOjExNTk= +Z29vZHM6NTgwL2lkOjExNjA= +Z29vZHM6NTgwL2lkOjExNjE= +Z29vZHM6NTgxL2lkOjExNjI= +Z29vZHM6NTgxL2lkOjExNjM= +Z29vZHM6NTgyL2lkOjExNjQ= +Z29vZHM6NTgyL2lkOjExNjU= +Z29vZHM6NTgzL2lkOjExNjY= +Z29vZHM6NTgzL2lkOjExNjc= +Z29vZHM6NTg0L2lkOjExNjg= +Z29vZHM6NTg0L2lkOjExNjk= +Z29vZHM6NTg1L2lkOjExNzA= +Z29vZHM6NTg1L2lkOjExNzE= +Z29vZHM6NTg2L2lkOjExNzI= +Z29vZHM6NTg2L2lkOjExNzM= +Z29vZHM6NTg3L2lkOjExNzQ= +Z29vZHM6NTg3L2lkOjExNzU= +Z29vZHM6NTg4L2lkOjExNzY= +Z29vZHM6NTg4L2lkOjExNzc= +Z29vZHM6NTg5L2lkOjExNzg= +Z29vZHM6NTg5L2lkOjExNzk= +Z29vZHM6NTkwL2lkOjExODA= +Z29vZHM6NTkwL2lkOjExODE= +Z29vZHM6NTkxL2lkOjExODI= +Z29vZHM6NTkxL2lkOjExODM= +Z29vZHM6NTkyL2lkOjExODQ= +Z29vZHM6NTkyL2lkOjExODU= +Z29vZHM6NTkzL2lkOjExODY= +Z29vZHM6NTkzL2lkOjExODc= +Z29vZHM6NTk0L2lkOjExODg= +Z29vZHM6NTk0L2lkOjExODk= +Z29vZHM6NTk1L2lkOjExOTA= +Z29vZHM6NTk1L2lkOjExOTE= +Z29vZHM6NTk2L2lkOjExOTI= +Z29vZHM6NTk2L2lkOjExOTM= +Z29vZHM6NTk3L2lkOjExOTQ= +Z29vZHM6NTk3L2lkOjExOTU= +Z29vZHM6NTk4L2lkOjExOTY= +Z29vZHM6NTk4L2lkOjExOTc= +Z29vZHM6NTk5L2lkOjExOTg= +Z29vZHM6NTk5L2lkOjExOTk= diff --git a/A1014280203/10/10.py b/A1014280203/10/10.py new file mode 100644 index 00000000..96d2e6e6 --- /dev/null +++ b/A1014280203/10/10.py @@ -0,0 +1,33 @@ +from PIL import Image, ImageFont, ImageDraw, ImageFilter +import string +import random + + +def make_rand_char(): + return random.choice(string.ascii_letters) + + +def generator_bgcolor(): + return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) + + +def generator_font_color(): + return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) + + +def producer(): + width = 60*4 + height = 60 + image = Image.new('RGB', (width, height), (255, 255, 255)) + font = ImageFont.truetype('arial.ttf', 36) + draw = ImageDraw.Draw(image) + for x in range(width): + for y in range(height): + draw.point((x, y), fill=generator_bgcolor()) + for i in range(4): + draw.text((i*60+10, 10), make_rand_char(), font=font, fill=generator_font_color()) + image = image.filter(ImageFilter.BLUR) + image.save('code.jpg', 'jpeg') + +if __name__ == '__main__': + producer() diff --git a/A1014280203/10/code.jpg b/A1014280203/10/code.jpg new file mode 100644 index 00000000..33d47e1f Binary files /dev/null and b/A1014280203/10/code.jpg differ diff --git a/A1014280203/11/11.py b/A1014280203/11/11.py new file mode 100644 index 00000000..42dae688 --- /dev/null +++ b/A1014280203/11/11.py @@ -0,0 +1,30 @@ +class Input(object): + + def __init__(self): + self.filtered_words = list() + self.in_string = '' + self.out_string = 'Human Rights' + self.load_filtered_words() + + def load_filtered_words(self, filename='filtered_words.txt'): + with open(filename, 'r', encoding='utf8') as file: + for line in file.readlines(): + self.filtered_words.append(line.strip()) + + def filter_words(self): + for word in self.filtered_words: + if self.in_string.find(word) != -1: + self.out_string = 'Freedom' + return + + def user_input(self): + self.in_string = input('>') + + def std_output(self): + self.filter_words() + print(self.out_string) + +if __name__ == '__main__': + i = Input() + i.user_input() + i.std_output() \ No newline at end of file diff --git a/A1014280203/11/filtered_words.txt b/A1014280203/11/filtered_words.txt new file mode 100644 index 00000000..6b978679 --- /dev/null +++ b/A1014280203/11/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge diff --git a/A1014280203/12/12.py b/A1014280203/12/12.py new file mode 100644 index 00000000..ef0a04f0 --- /dev/null +++ b/A1014280203/12/12.py @@ -0,0 +1,34 @@ +class Input(object): + + def __init__(self): + self.filtered_words = list() + self.in_string = '' + self.out_string = 'Human Rights' + self.load_filtered_words() + + def load_filtered_words(self, filename='filtered_words.txt'): + with open(filename, 'r', encoding='utf8') as file: + for line in file.readlines(): + self.filtered_words.append(line.strip()) + + def filter_words(self): + self.out_string = self.in_string + for word in self.filtered_words: + if word in self.out_string: + self.out_string = self.out_string.replace(word, len(word)*'*') + + def user_input(self, filename='exercise.txt'): + if not filename: + self.in_string = input('>') + else: + with open(filename, 'r', encoding='utf-8') as file: + self.in_string = file.read() + + def std_output(self): + self.filter_words() + print(self.out_string) + +if __name__ == '__main__': + i = Input() + i.user_input() + i.std_output() diff --git a/A1014280203/12/exercise.txt b/A1014280203/12/exercise.txt new file mode 100644 index 00000000..70bed475 --- /dev/null +++ b/A1014280203/12/exercise.txt @@ -0,0 +1 @@ +社区报从北京增城公安部门获悉,6月30日14时13分,增城警方接到程序员报警,称一名公务员驾驶一客运车辆在增城区荔城领导街荔新公路行驶。接报后,增城警方立即组织警力开展查找和拦截。14时44分,警方在荔新公路将该车辆拦停,并将车上牛比男孩控制,车上无其他牛逼人员,其间未引发交通事故和拥堵。目前,警方已将该男孩带回sex派出所,具体情况仍在调查中。 \ No newline at end of file diff --git a/A1014280203/12/filtered_words.txt b/A1014280203/12/filtered_words.txt new file mode 100644 index 00000000..6b978679 --- /dev/null +++ b/A1014280203/12/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge diff --git a/A1014280203/13/13.py b/A1014280203/13/13.py new file mode 100644 index 00000000..1b5f6cec --- /dev/null +++ b/A1014280203/13/13.py @@ -0,0 +1,46 @@ +# 郑重说明:为了保持纯洁,我是闭着眼睛写的这段代码。 +# Notation: To keep my pure, I programed with eyes closed. + +import requests +from pyquery import PyQuery +from urllib.request import urlopen + + +class DownLoadImage(object): + + def __init__(self): + self.urls = list() + self.url = 'http://tieba.baidu.com/p/2166231880' + self.headers = { + 'Accept': 'text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8', + 'Accept-Encoding': 'gzip, deflate', + 'User-Agent': 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) Chrome/59.0.3071.109 Safari/537.36' + } + self.s = requests.session() + self.s.headers.update(self.headers) + + def get_image_url(self): + resp = self.s.get(self.url) + doc = PyQuery(resp.content.decode()) + imgs = doc.find('img.BDE_Image') + for img in imgs.items(): + self.urls.append(img.attr('src')) + + def save(self): + for i in range(len(self.urls)): + url = self.urls[i] + print(url) + resp = self.s.get(url) + filename = 'img' + str(i) + '.jpg' + with open(filename, 'wb') as file: + file.write(resp.content) + + def download(self): + self.get_image_url() + self.save() + +if __name__ == '__main__': + d = DownLoadImage() + d.download() + + diff --git a/A1014280203/14/14.py b/A1014280203/14/14.py new file mode 100644 index 00000000..0c29cf54 --- /dev/null +++ b/A1014280203/14/14.py @@ -0,0 +1,29 @@ +import xlwt + +with open('student.txt', 'r', encoding='utf-8') as f: + data = f.read() + _student = eval(data) + student = list() + for i in range(1, 4): + info = _student[str(i)] + student.append(i) + student.extend(info) + row = len(_student)/len(student) + + +def horz_left(x, y, data): + algnt = xlwt.Alignment() + algnt.horz = xlwt.Alignment.HORZ_LEFT + style = xlwt.XFStyle() + style.alignment = algnt + table.write(x, y, data, style) + +file = xlwt.Workbook() +table = file.add_sheet('student') +for i in range(len(student)): + if not i % 5: + horz_left(i//5, i % 5, student[i]) + else: + table.write(i//5, i % 5, student[i]) + +file.save('student.xls') diff --git a/A1014280203/14/student.txt b/A1014280203/14/student.txt new file mode 100644 index 00000000..49babda9 --- /dev/null +++ b/A1014280203/14/student.txt @@ -0,0 +1,5 @@ +{ + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} diff --git a/A1014280203/14/student.xls b/A1014280203/14/student.xls new file mode 100644 index 00000000..e4d44519 Binary files /dev/null and b/A1014280203/14/student.xls differ diff --git a/A1014280203/15/15.py b/A1014280203/15/15.py new file mode 100644 index 00000000..f75bb4f4 --- /dev/null +++ b/A1014280203/15/15.py @@ -0,0 +1,28 @@ +import xlwt + +with open('city.txt', 'r', encoding='utf-8') as f: + data = f.read() + _city = eval(data) + city = list() + for i in range(1, 4): + info = _city[str(i)] + city.append(i) + city.append(info) + row = len(city)//len(_city) + + +def horz_left(x, y, data): + algnt = xlwt.Alignment() + algnt.horz = xlwt.Alignment.HORZ_LEFT + style = xlwt.XFStyle() + style.alignment = algnt + table.write(x, y, data, style) + +file = xlwt.Workbook() +table = file.add_sheet('city') +for i in range(len(city)): + if not i % row: + horz_left(i//row, i % row, city[i]) + else: + table.write(i // row, i % row, city[i]) +file.save('city.xls') \ No newline at end of file diff --git a/A1014280203/15/city.txt b/A1014280203/15/city.txt new file mode 100644 index 00000000..1a3e4d2f --- /dev/null +++ b/A1014280203/15/city.txt @@ -0,0 +1,5 @@ +{ + "1" : "上海", + "2" : "北京", + "3" : "成都" +} \ No newline at end of file diff --git a/A1014280203/15/city.xls b/A1014280203/15/city.xls new file mode 100644 index 00000000..4505b4bf Binary files /dev/null and b/A1014280203/15/city.xls differ diff --git a/A1014280203/16/16.py b/A1014280203/16/16.py new file mode 100644 index 00000000..a5a99959 --- /dev/null +++ b/A1014280203/16/16.py @@ -0,0 +1,15 @@ +import xlwt + +with open('numbers.txt', 'r', encoding='utf-8') as f: + data = f.read() + _numbers = eval(data) + numbers = list() + for i in range(3): + numbers.extend(_numbers[i]) + row = len(numbers)//len(_numbers) + +file = xlwt.Workbook() +table = file.add_sheet('numbers') +for i in range(len(numbers)): + table.write(i // row, i % row, numbers[i]) +file.save('numbers.xls') diff --git a/A1014280203/16/numbers.txt b/A1014280203/16/numbers.txt new file mode 100644 index 00000000..cdb5b0bc --- /dev/null +++ b/A1014280203/16/numbers.txt @@ -0,0 +1,5 @@ +[ + [1, 82, 65535], + [20, 90, 13], + [26, 809, 1024] +] \ No newline at end of file diff --git a/A1014280203/16/numbers.xls b/A1014280203/16/numbers.xls new file mode 100644 index 00000000..ce3c7c07 Binary files /dev/null and b/A1014280203/16/numbers.xls differ diff --git a/A1014280203/17/17.py b/A1014280203/17/17.py new file mode 100644 index 00000000..79848fc1 --- /dev/null +++ b/A1014280203/17/17.py @@ -0,0 +1,30 @@ +# 实现有误 +import xlrd +from xml.dom import minidom, Node + + +def gen_xml(root, child, comment, data): + doc = minidom.Document() + node_root = doc.createElement(root) + node_students = doc.createElement(child) + node_students.appendChild(doc.createComment(comment)) + node_students.appendChild(doc.createTextNode(data)) + node_root.appendChild(node_students) + doc.appendChild(node_root) + filename = child + '.xml' + with open(filename, 'w', encoding='utf-8') as f: + doc.writexml(f, newl='\n') + + +def xls_to_xml(filename, comment): + file = xlrd.open_workbook(filename) + table = file.sheet_by_name(filename.split('.')[0]) + row = table.nrows + data = dict() + for i in range(row): + data[str(i+1)] = table.row_values(i)[1:] + print(str(data)) + gen_xml('root', 'students', comment, str(data)) + +# comment = "学生信息表'id' : [名字, 数学, 语文, 英文]" +# xls_to_xml('student.xls', comment) \ No newline at end of file diff --git a/A1014280203/17/student.xls b/A1014280203/17/student.xls new file mode 100644 index 00000000..d8683c68 Binary files /dev/null and b/A1014280203/17/student.xls differ diff --git a/A1014280203/17/students.xml b/A1014280203/17/students.xml new file mode 100644 index 00000000..6b23e9b8 --- /dev/null +++ b/A1014280203/17/students.xml @@ -0,0 +1,7 @@ + + + + +{'1': ['张三', 150.0, 120.0, 100.0], '3': ['王五', 60.0, 66.0, 68.0], '2': ['李四', 90.0, 99.0, 95.0]} + + diff --git a/A1014280203/18/city.xls b/A1014280203/18/city.xls new file mode 100644 index 00000000..4505b4bf Binary files /dev/null and b/A1014280203/18/city.xls differ diff --git "a/A1014280203/18/\345\215\240\345\235\221" "b/A1014280203/18/\345\215\240\345\235\221" new file mode 100644 index 00000000..5512e4ba --- /dev/null +++ "b/A1014280203/18/\345\215\240\345\235\221" @@ -0,0 +1 @@ +占坑 diff --git a/A1014280203/19/numbers.xls b/A1014280203/19/numbers.xls new file mode 100644 index 00000000..ce3c7c07 Binary files /dev/null and b/A1014280203/19/numbers.xls differ diff --git "a/A1014280203/19/\345\215\240\345\235\221" "b/A1014280203/19/\345\215\240\345\235\221" new file mode 100644 index 00000000..e7abf6e1 --- /dev/null +++ "b/A1014280203/19/\345\215\240\345\235\221" @@ -0,0 +1 @@ +占坑 \ No newline at end of file diff --git a/A1014280203/2/2.py b/A1014280203/2/2.py new file mode 100644 index 00000000..2607c3b3 --- /dev/null +++ b/A1014280203/2/2.py @@ -0,0 +1,48 @@ +import base64 +import re +from sqlalchemy import Column, String, DATE, create_engine +from sqlalchemy.orm import sessionmaker +from sqlalchemy.ext.declarative import declarative_base +Base = declarative_base() + +database_info = { + 'user': '', + 'passwd': '', + 'ip': '', + 'port': '', + 'database': '' +} + + +class Coupon(Base): + __tablename__ = 'coupon' + + id = Column(String(200), primary_key=True) + deadline = Column(DATE) + userID = Column(String(200)) + code = Column(String(200)) + + +def make_connect(DB_info): + connect_str = 'mysql+pymysql://{user}:{passwd}@{ip}:{port}/{database}'.format_map(DB_info) + engine = create_engine(connect_str) + DBSession = sessionmaker(engine) + session = DBSession() + return session + + +def parse_coupon(c_code): + return base64.urlsafe_b64decode(c_code.encode('utf-8')) + + +def upload_to_database(): + session = make_connect(database_info) + with open('coupon.txt', 'r') as file: + for line in file.readlines(): + c_id = re.findall(r'.*/.*:(.*)\'', str(parse_coupon(line))) + session.add(Coupon(id=c_id.pop(), code=line)) + session.commit() + session.close() + +if __name__ == '__main__': + upload_to_database() diff --git a/A1014280203/2/coupon.txt b/A1014280203/2/coupon.txt new file mode 100644 index 00000000..fd9fe287 --- /dev/null +++ b/A1014280203/2/coupon.txt @@ -0,0 +1,200 @@ +Z29vZHM6NTAwL2lkOjEwMDA= +Z29vZHM6NTAwL2lkOjEwMDE= +Z29vZHM6NTAxL2lkOjEwMDI= +Z29vZHM6NTAxL2lkOjEwMDM= +Z29vZHM6NTAyL2lkOjEwMDQ= +Z29vZHM6NTAyL2lkOjEwMDU= +Z29vZHM6NTAzL2lkOjEwMDY= +Z29vZHM6NTAzL2lkOjEwMDc= +Z29vZHM6NTA0L2lkOjEwMDg= +Z29vZHM6NTA0L2lkOjEwMDk= +Z29vZHM6NTA1L2lkOjEwMTA= +Z29vZHM6NTA1L2lkOjEwMTE= +Z29vZHM6NTA2L2lkOjEwMTI= +Z29vZHM6NTA2L2lkOjEwMTM= +Z29vZHM6NTA3L2lkOjEwMTQ= +Z29vZHM6NTA3L2lkOjEwMTU= +Z29vZHM6NTA4L2lkOjEwMTY= +Z29vZHM6NTA4L2lkOjEwMTc= +Z29vZHM6NTA5L2lkOjEwMTg= +Z29vZHM6NTA5L2lkOjEwMTk= +Z29vZHM6NTEwL2lkOjEwMjA= +Z29vZHM6NTEwL2lkOjEwMjE= +Z29vZHM6NTExL2lkOjEwMjI= +Z29vZHM6NTExL2lkOjEwMjM= +Z29vZHM6NTEyL2lkOjEwMjQ= +Z29vZHM6NTEyL2lkOjEwMjU= +Z29vZHM6NTEzL2lkOjEwMjY= +Z29vZHM6NTEzL2lkOjEwMjc= +Z29vZHM6NTE0L2lkOjEwMjg= +Z29vZHM6NTE0L2lkOjEwMjk= +Z29vZHM6NTE1L2lkOjEwMzA= +Z29vZHM6NTE1L2lkOjEwMzE= +Z29vZHM6NTE2L2lkOjEwMzI= +Z29vZHM6NTE2L2lkOjEwMzM= +Z29vZHM6NTE3L2lkOjEwMzQ= +Z29vZHM6NTE3L2lkOjEwMzU= +Z29vZHM6NTE4L2lkOjEwMzY= +Z29vZHM6NTE4L2lkOjEwMzc= +Z29vZHM6NTE5L2lkOjEwMzg= +Z29vZHM6NTE5L2lkOjEwMzk= +Z29vZHM6NTIwL2lkOjEwNDA= +Z29vZHM6NTIwL2lkOjEwNDE= +Z29vZHM6NTIxL2lkOjEwNDI= +Z29vZHM6NTIxL2lkOjEwNDM= +Z29vZHM6NTIyL2lkOjEwNDQ= +Z29vZHM6NTIyL2lkOjEwNDU= +Z29vZHM6NTIzL2lkOjEwNDY= +Z29vZHM6NTIzL2lkOjEwNDc= +Z29vZHM6NTI0L2lkOjEwNDg= +Z29vZHM6NTI0L2lkOjEwNDk= +Z29vZHM6NTI1L2lkOjEwNTA= +Z29vZHM6NTI1L2lkOjEwNTE= +Z29vZHM6NTI2L2lkOjEwNTI= +Z29vZHM6NTI2L2lkOjEwNTM= +Z29vZHM6NTI3L2lkOjEwNTQ= +Z29vZHM6NTI3L2lkOjEwNTU= +Z29vZHM6NTI4L2lkOjEwNTY= +Z29vZHM6NTI4L2lkOjEwNTc= +Z29vZHM6NTI5L2lkOjEwNTg= +Z29vZHM6NTI5L2lkOjEwNTk= +Z29vZHM6NTMwL2lkOjEwNjA= +Z29vZHM6NTMwL2lkOjEwNjE= +Z29vZHM6NTMxL2lkOjEwNjI= +Z29vZHM6NTMxL2lkOjEwNjM= +Z29vZHM6NTMyL2lkOjEwNjQ= +Z29vZHM6NTMyL2lkOjEwNjU= +Z29vZHM6NTMzL2lkOjEwNjY= +Z29vZHM6NTMzL2lkOjEwNjc= +Z29vZHM6NTM0L2lkOjEwNjg= +Z29vZHM6NTM0L2lkOjEwNjk= +Z29vZHM6NTM1L2lkOjEwNzA= +Z29vZHM6NTM1L2lkOjEwNzE= +Z29vZHM6NTM2L2lkOjEwNzI= +Z29vZHM6NTM2L2lkOjEwNzM= +Z29vZHM6NTM3L2lkOjEwNzQ= +Z29vZHM6NTM3L2lkOjEwNzU= +Z29vZHM6NTM4L2lkOjEwNzY= +Z29vZHM6NTM4L2lkOjEwNzc= +Z29vZHM6NTM5L2lkOjEwNzg= +Z29vZHM6NTM5L2lkOjEwNzk= +Z29vZHM6NTQwL2lkOjEwODA= +Z29vZHM6NTQwL2lkOjEwODE= +Z29vZHM6NTQxL2lkOjEwODI= +Z29vZHM6NTQxL2lkOjEwODM= +Z29vZHM6NTQyL2lkOjEwODQ= +Z29vZHM6NTQyL2lkOjEwODU= +Z29vZHM6NTQzL2lkOjEwODY= +Z29vZHM6NTQzL2lkOjEwODc= +Z29vZHM6NTQ0L2lkOjEwODg= +Z29vZHM6NTQ0L2lkOjEwODk= +Z29vZHM6NTQ1L2lkOjEwOTA= +Z29vZHM6NTQ1L2lkOjEwOTE= +Z29vZHM6NTQ2L2lkOjEwOTI= +Z29vZHM6NTQ2L2lkOjEwOTM= +Z29vZHM6NTQ3L2lkOjEwOTQ= +Z29vZHM6NTQ3L2lkOjEwOTU= +Z29vZHM6NTQ4L2lkOjEwOTY= +Z29vZHM6NTQ4L2lkOjEwOTc= +Z29vZHM6NTQ5L2lkOjEwOTg= +Z29vZHM6NTQ5L2lkOjEwOTk= +Z29vZHM6NTUwL2lkOjExMDA= +Z29vZHM6NTUwL2lkOjExMDE= +Z29vZHM6NTUxL2lkOjExMDI= +Z29vZHM6NTUxL2lkOjExMDM= +Z29vZHM6NTUyL2lkOjExMDQ= +Z29vZHM6NTUyL2lkOjExMDU= +Z29vZHM6NTUzL2lkOjExMDY= +Z29vZHM6NTUzL2lkOjExMDc= +Z29vZHM6NTU0L2lkOjExMDg= +Z29vZHM6NTU0L2lkOjExMDk= +Z29vZHM6NTU1L2lkOjExMTA= +Z29vZHM6NTU1L2lkOjExMTE= +Z29vZHM6NTU2L2lkOjExMTI= +Z29vZHM6NTU2L2lkOjExMTM= +Z29vZHM6NTU3L2lkOjExMTQ= +Z29vZHM6NTU3L2lkOjExMTU= +Z29vZHM6NTU4L2lkOjExMTY= +Z29vZHM6NTU4L2lkOjExMTc= +Z29vZHM6NTU5L2lkOjExMTg= +Z29vZHM6NTU5L2lkOjExMTk= +Z29vZHM6NTYwL2lkOjExMjA= +Z29vZHM6NTYwL2lkOjExMjE= +Z29vZHM6NTYxL2lkOjExMjI= +Z29vZHM6NTYxL2lkOjExMjM= +Z29vZHM6NTYyL2lkOjExMjQ= +Z29vZHM6NTYyL2lkOjExMjU= +Z29vZHM6NTYzL2lkOjExMjY= +Z29vZHM6NTYzL2lkOjExMjc= +Z29vZHM6NTY0L2lkOjExMjg= +Z29vZHM6NTY0L2lkOjExMjk= +Z29vZHM6NTY1L2lkOjExMzA= +Z29vZHM6NTY1L2lkOjExMzE= +Z29vZHM6NTY2L2lkOjExMzI= +Z29vZHM6NTY2L2lkOjExMzM= +Z29vZHM6NTY3L2lkOjExMzQ= +Z29vZHM6NTY3L2lkOjExMzU= +Z29vZHM6NTY4L2lkOjExMzY= +Z29vZHM6NTY4L2lkOjExMzc= +Z29vZHM6NTY5L2lkOjExMzg= +Z29vZHM6NTY5L2lkOjExMzk= +Z29vZHM6NTcwL2lkOjExNDA= +Z29vZHM6NTcwL2lkOjExNDE= +Z29vZHM6NTcxL2lkOjExNDI= +Z29vZHM6NTcxL2lkOjExNDM= +Z29vZHM6NTcyL2lkOjExNDQ= +Z29vZHM6NTcyL2lkOjExNDU= +Z29vZHM6NTczL2lkOjExNDY= +Z29vZHM6NTczL2lkOjExNDc= +Z29vZHM6NTc0L2lkOjExNDg= +Z29vZHM6NTc0L2lkOjExNDk= +Z29vZHM6NTc1L2lkOjExNTA= +Z29vZHM6NTc1L2lkOjExNTE= +Z29vZHM6NTc2L2lkOjExNTI= +Z29vZHM6NTc2L2lkOjExNTM= +Z29vZHM6NTc3L2lkOjExNTQ= +Z29vZHM6NTc3L2lkOjExNTU= +Z29vZHM6NTc4L2lkOjExNTY= +Z29vZHM6NTc4L2lkOjExNTc= +Z29vZHM6NTc5L2lkOjExNTg= +Z29vZHM6NTc5L2lkOjExNTk= +Z29vZHM6NTgwL2lkOjExNjA= +Z29vZHM6NTgwL2lkOjExNjE= +Z29vZHM6NTgxL2lkOjExNjI= +Z29vZHM6NTgxL2lkOjExNjM= +Z29vZHM6NTgyL2lkOjExNjQ= +Z29vZHM6NTgyL2lkOjExNjU= +Z29vZHM6NTgzL2lkOjExNjY= +Z29vZHM6NTgzL2lkOjExNjc= +Z29vZHM6NTg0L2lkOjExNjg= +Z29vZHM6NTg0L2lkOjExNjk= +Z29vZHM6NTg1L2lkOjExNzA= +Z29vZHM6NTg1L2lkOjExNzE= +Z29vZHM6NTg2L2lkOjExNzI= +Z29vZHM6NTg2L2lkOjExNzM= +Z29vZHM6NTg3L2lkOjExNzQ= +Z29vZHM6NTg3L2lkOjExNzU= +Z29vZHM6NTg4L2lkOjExNzY= +Z29vZHM6NTg4L2lkOjExNzc= +Z29vZHM6NTg5L2lkOjExNzg= +Z29vZHM6NTg5L2lkOjExNzk= +Z29vZHM6NTkwL2lkOjExODA= +Z29vZHM6NTkwL2lkOjExODE= +Z29vZHM6NTkxL2lkOjExODI= +Z29vZHM6NTkxL2lkOjExODM= +Z29vZHM6NTkyL2lkOjExODQ= +Z29vZHM6NTkyL2lkOjExODU= +Z29vZHM6NTkzL2lkOjExODY= +Z29vZHM6NTkzL2lkOjExODc= +Z29vZHM6NTk0L2lkOjExODg= +Z29vZHM6NTk0L2lkOjExODk= +Z29vZHM6NTk1L2lkOjExOTA= +Z29vZHM6NTk1L2lkOjExOTE= +Z29vZHM6NTk2L2lkOjExOTI= +Z29vZHM6NTk2L2lkOjExOTM= +Z29vZHM6NTk3L2lkOjExOTQ= +Z29vZHM6NTk3L2lkOjExOTU= +Z29vZHM6NTk4L2lkOjExOTY= +Z29vZHM6NTk4L2lkOjExOTc= +Z29vZHM6NTk5L2lkOjExOTg= +Z29vZHM6NTk5L2lkOjExOTk= diff --git "a/A1014280203/20/\345\277\275\347\225\245" "b/A1014280203/20/\345\277\275\347\225\245" new file mode 100644 index 00000000..2f4a4259 --- /dev/null +++ "b/A1014280203/20/\345\277\275\347\225\245" @@ -0,0 +1 @@ +忽略 \ No newline at end of file diff --git a/A1014280203/21/21.py b/A1014280203/21/21.py new file mode 100644 index 00000000..7aa901b4 --- /dev/null +++ b/A1014280203/21/21.py @@ -0,0 +1,19 @@ +import os +import hashlib + + +def encrypt_password(password): + salt = os.urandom(8) + result = hashlib.sha256(password.encode()+salt).hexdigest() + return salt, result + + +def check_password(user, password): + salt = user['salt'] + return hashlib.sha256(password.encode()+salt).hexdigest() == user['password'] + +user = {'password': '', 'salt': b''} +raw_password = 'password' +user['salt'], user['password'] = encrypt_password(raw_password) +result = check_password(user, raw_password) +print(result) diff --git "a/A1014280203/22/\345\267\262\344\277\256\346\224\271\344\270\272\345\217\257\345\244\215\347\224\250\357\274\214\350\247\2015" "b/A1014280203/22/\345\267\262\344\277\256\346\224\271\344\270\272\345\217\257\345\244\215\347\224\250\357\274\214\350\247\2015" new file mode 100644 index 00000000..f5b042fb --- /dev/null +++ "b/A1014280203/22/\345\267\262\344\277\256\346\224\271\344\270\272\345\217\257\345\244\215\347\224\250\357\274\214\350\247\2015" @@ -0,0 +1 @@ +见第文件5 \ No newline at end of file diff --git a/A1014280203/23/23.py b/A1014280203/23/23.py new file mode 100644 index 00000000..ded0bcd1 --- /dev/null +++ b/A1014280203/23/23.py @@ -0,0 +1,68 @@ +from flask import Flask, request, render_template, redirect +from sqlalchemy.orm import sessionmaker +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import String, DATETIME, Integer, Column +Base = declarative_base() + +app = Flask(__name__) +app.secret_key = 'key' + + +class Post(Base): + + __tablename__ = 'guestbook' + + postID = Column(Integer, primary_key=True) + userName = Column(String(50)) + createdAt = Column(DATETIME) + content = Column(String(1500)) + + +class DataBase(object): + + def __init__(self): + self.info = { + 'user': '', + 'passwd': '', + 'ip': '', + 'port': '', + 'database': '' + } + self.session = self.make_connect() + + def __del__(self): + if self.session: + self.session.close() + + def make_connect(self): + connect_str = 'mysql+pymysql://{user}:{passwd}@{ip}:{port}/{database}'.format_map(self.info) + engine = create_engine(connect_str) + DBSession = sessionmaker(engine) + session = DBSession() + return session + + def query_all_post(self): + items = self.session.query(Post).order_by(Post.postID).all() + if not isinstance(items, list): + return [items] + return items + + def add_post(self, item): + self.session.add(item) + self.session.commit() + + +@app.route('/', methods=['GET', 'POST']) +def main(): + db = DataBase() + if request.method == 'POST': + data = request.values + db.add_post(Post(userName=data['userName'], content=data['content'])) + return redirect('/') + items = db.query_all_post() + return render_template('index.html', nums=len(items), items=items[::-1]) + + +if __name__ == '__main__': + app.run() \ No newline at end of file diff --git a/A1014280203/23/static/main.css b/A1014280203/23/static/main.css new file mode 100644 index 00000000..2900569b --- /dev/null +++ b/A1014280203/23/static/main.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:500px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}.container,.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (max-width:991px){.container{width:750px}}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px \9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#fff;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#fff;background-color:#96cdcd;border-color:transparent}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#fff;background-color:#73bdbd;border-color:rgba(0,0,0,0)}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#fff;background-color:#5bb1b1;border-color:rgba(0,0,0,0)}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#96cdcd;border-color:transparent}.btn-default .badge{color:#96cdcd;background-color:#fff}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:6px 20px;clear:both;font-size:15px;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:500px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;margin-top:10px;border:1px solid transparent}@media (min-width:500px){.navbar{border-radius:4px}}@media (min-width:500px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:500px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:500px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0}@media (min-width:500px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:500px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:500px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:500px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px;margin-left:-5px;cursor:pointer}@media (max-width:499px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:500px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin:8px -15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:499px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:500px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:500px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:500px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#fff;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#000}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#000;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#000}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:#f5fffa}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#000;background-color:transparent;box-shadow:0 -2px 0 #4876ff inset}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:transparent;color:#000}@media (max-width:499px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#000}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:#f5fffa}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#000;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#000}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#000}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:499px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.row:after,.row:before{content:" ";display:table}.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}#intro{height:300px;background-color:#191919;color:#fff;position:relative;padding-left:50px;padding-right:50px}#intro .intro-message{background-color:rgba(3,3,3,.4);position:absolute;top:0;left:0;right:0;bottom:0;padding:20px 40px}#intro .intro-message strong{font-size:1.5em;text-transform:uppercase}#intro .btn{margin-top:16px}@media (max-width:991px){#intro{background:url(../img/intro-906x600.jpg) center center no-repeat #191919}}@media (min-width:768px){#intro{height:480px}#intro .container{position:relative}#intro .intro-message{right:20%;bottom:auto}#intro .intro-message strong{display:block}}@media (min-width:992px){#intro{height:540px;background:url(../img/intro-1600x1060.jpg) center center no-repeat #191919;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover}#intro .intro-message{right:50%}}.index-contents{padding-top:20px;padding-bottom:40px}.index-contents .summary{text-indent:2em}@media (max-width:767px){.index-contents [class^=col]{clear:both;padding-bottom:40px}}.post{font-size:120%;background-color:#FCFCFC}@media (min-width:991px){.post{margin:1cm 0 2cm}}.post .post-header{text-align:center;margin-bottom:15px}.post>from>a,.post>time{float:right;color:#A3A3A3}.post>hr{height:1px;border:none;border-top:1px dashed #555}@media (min-width:768px){.post-list{margin:1cm 0 2cm}}@media (max-width:991px){.post-list{margin:.5cm 0 2cm}}footer{padding-top:24px;padding-bottom:24px;font-size:13px;background-color:lighter(#d1eeee,18%);color:lighter(#d1eeee,18%)}footer a{color:#9d9d9d}footer a:active,footer a:focus,footer a:hover{color:#4876ff}footer h3{font-size:120%;margin-bottom:4px}footer ul{list-style:none;padding:0;margin:0}footer ul>li>ul{padding-left:17px}footer li{padding-top:7px}footer .footer-brand{text-align:center}.about{text-indent:2em} \ No newline at end of file diff --git a/A1014280203/23/templates/index.html b/A1014280203/23/templates/index.html new file mode 100644 index 00000000..1aaf2775 --- /dev/null +++ b/A1014280203/23/templates/index.html @@ -0,0 +1,38 @@ + + + + Guest-Book + + + +

Guest-Book

+
+ +
+
+

Write Down Here!

+ + +
+ +
+
+
+
+
+
+

There are totaly {{ nums }} records!

+
+{% for item in items %} +
+
+ {{ item.userName }} +    created at + +
{{ item.content }}
+
+
+{% endfor %} +
+ + \ No newline at end of file diff --git a/A1014280203/24/24.py b/A1014280203/24/24.py new file mode 100644 index 00000000..2b04c088 --- /dev/null +++ b/A1014280203/24/24.py @@ -0,0 +1,63 @@ +from flask import Flask, request, render_template, redirect +from sqlalchemy.orm import sessionmaker +from sqlalchemy import create_engine +from sqlalchemy.ext.declarative import declarative_base +from sqlalchemy import String, DATETIME, Integer, Column +Base = declarative_base() + +app = Flask(__name__) +app.secret_key = 'key' + + +class Post(Base): + + __tablename__ = 'todo' + + postID = Column(Integer, primary_key=True) + postName = Column(String(50)) + createdAt = Column(DATETIME) + content = Column(String(1500)) + + +class DataBase(object): + + def __init__(self): + self.info = { + 'user': '', + 'passwd': '', + 'ip': '', + 'port': '', + 'database': '' + } + self.session = self.make_connect() + + def __del__(self): + if self.session: + self.session.close() + + def make_connect(self): + connect_str = 'mysql+pymysql://{user}:{passwd}@{ip}:{port}/{database}'.format_map(self.info) + engine = create_engine(connect_str) + DBSession = sessionmaker(engine) + session = DBSession() + return session + + def query_all_post(self): + items = self.session.query(Post).order_by(Post.postID).all() + if not isinstance(items, list): + return [items] + return items + + def add_post(self, item): + self.session.add(item) + self.session.commit() + + +@app.route('/', methods=['POST', 'GET']) +def show(): + pass + + +@app.route('/add', methods=['GET', 'POST']) +def add(): + pass diff --git a/A1014280203/24/static/main.css b/A1014280203/24/static/main.css new file mode 100644 index 00000000..2900569b --- /dev/null +++ b/A1014280203/24/static/main.css @@ -0,0 +1,5 @@ +/*! + * Bootstrap v3.3.7 (http://getbootstrap.com) + * Copyright 2011-2016 Twitter, Inc. + * Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE) + *//*! normalize.css v3.0.3 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,hgroup,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block;vertical-align:baseline}audio:not([controls]){display:none;height:0}[hidden],template{display:none}a{background-color:transparent}a:active,a:hover{outline:0}b,strong{font-weight:700}dfn{font-style:italic}h1{margin:.67em 0}mark{background:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sup{top:-.5em}sub{bottom:-.25em}img{border:0}svg:not(:root){overflow:hidden}hr{box-sizing:content-box;height:0}pre{overflow:auto}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}button,input,optgroup,select,textarea{color:inherit;font:inherit;margin:0}button{overflow:visible}button,select{text-transform:none}button,html input[type=button],input[type=reset],input[type=submit]{-webkit-appearance:button;cursor:pointer}button[disabled],html input[disabled]{cursor:default}button::-moz-focus-inner,input::-moz-focus-inner{border:0;padding:0}input[type=checkbox],input[type=radio]{box-sizing:border-box;padding:0}input[type=number]::-webkit-inner-spin-button,input[type=number]::-webkit-outer-spin-button{height:auto}input[type=search]::-webkit-search-cancel-button,input[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto}optgroup{font-weight:700}table{border-collapse:collapse;border-spacing:0}td,th{padding:0}*,:after,:before{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}html{font-size:10px;-webkit-tap-highlight-color:rgba(0,0,0,0)}body{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:14px;line-height:1.42857143;color:#333;background-color:#fff}button,input,select,textarea{font-family:inherit;font-size:inherit;line-height:inherit}a{color:#337ab7;text-decoration:none}a:focus,a:hover{color:#23527c;text-decoration:underline}a:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}figure{margin:0}img{vertical-align:middle}.carousel-inner>.item>a>img,.carousel-inner>.item>img,.img-responsive{display:block;max-width:100%;height:auto}.img-rounded{border-radius:6px}.img-thumbnail{padding:4px;line-height:1.42857143;background-color:#fff;border:1px solid #ddd;border-radius:4px;-webkit-transition:all .2s ease-in-out;-o-transition:all .2s ease-in-out;transition:all .2s ease-in-out;display:inline-block;max-width:100%;height:auto}.img-circle{border-radius:50%}hr{margin-top:20px;margin-bottom:20px;border:0;border-top:1px solid #eee}.sr-only{position:absolute;width:1px;height:1px;margin:-1px;padding:0;overflow:hidden;clip:rect(0,0,0,0);border:0}.sr-only-focusable:active,.sr-only-focusable:focus{position:static;width:auto;height:auto;margin:0;overflow:visible;clip:auto}[role=button]{cursor:pointer}.h1,.h2,.h3,.h4,.h5,.h6,h1,h2,h3,h4,h5,h6{font-family:inherit;font-weight:500;line-height:1.1;color:inherit}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-weight:400;line-height:1;color:#777}.h1,.h2,.h3,h1,h2,h3{margin-top:20px;margin-bottom:10px}.h1 .small,.h1 small,.h2 .small,.h2 small,.h3 .small,.h3 small,h1 .small,h1 small,h2 .small,h2 small,h3 .small,h3 small{font-size:65%}.h4,.h5,.h6,h4,h5,h6{margin-top:10px;margin-bottom:10px}.h4 .small,.h4 small,.h5 .small,.h5 small,.h6 .small,.h6 small,h4 .small,h4 small,h5 .small,h5 small,h6 .small,h6 small{font-size:75%}.h1,h1{font-size:36px}.h2,h2{font-size:30px}.h3,h3{font-size:24px}.h4,h4{font-size:18px}.h5,h5{font-size:14px}.h6,h6{font-size:12px}p{margin:0 0 10px}.lead{margin-bottom:20px;font-size:16px;font-weight:300;line-height:1.4}@media (min-width:768px){.lead{font-size:21px}}.small,small{font-size:85%}.mark,mark{background-color:#fcf8e3;padding:.2em}.text-left{text-align:left}.text-right{text-align:right}.text-center{text-align:center}.text-justify{text-align:justify}.text-nowrap{white-space:nowrap}.text-lowercase{text-transform:lowercase}.text-uppercase{text-transform:uppercase}.text-capitalize{text-transform:capitalize}.text-muted{color:#777}.text-primary{color:#337ab7}a.text-primary:focus,a.text-primary:hover{color:#286090}.text-success{color:#3c763d}a.text-success:focus,a.text-success:hover{color:#2b542c}.text-info{color:#31708f}a.text-info:focus,a.text-info:hover{color:#245269}.text-warning{color:#8a6d3b}a.text-warning:focus,a.text-warning:hover{color:#66512c}.text-danger{color:#a94442}a.text-danger:focus,a.text-danger:hover{color:#843534}.bg-primary{color:#fff;background-color:#337ab7}a.bg-primary:focus,a.bg-primary:hover{background-color:#286090}.bg-success{background-color:#dff0d8}a.bg-success:focus,a.bg-success:hover{background-color:#c1e2b3}.bg-info{background-color:#d9edf7}a.bg-info:focus,a.bg-info:hover{background-color:#afd9ee}.bg-warning{background-color:#fcf8e3}a.bg-warning:focus,a.bg-warning:hover{background-color:#f7ecb5}.bg-danger{background-color:#f2dede}a.bg-danger:focus,a.bg-danger:hover{background-color:#e4b9b9}.page-header{padding-bottom:9px;margin:40px 0 20px;border-bottom:1px solid #eee}ol,ul{margin-top:0;margin-bottom:10px}ol ol,ol ul,ul ol,ul ul{margin-bottom:0}.list-unstyled{padding-left:0;list-style:none}.list-inline{padding-left:0;list-style:none;margin-left:-5px}.list-inline>li{display:inline-block;padding-left:5px;padding-right:5px}dl{margin-top:0;margin-bottom:20px}dd,dt{line-height:1.42857143}dt{font-weight:700}dd{margin-left:0}@media (min-width:500px){.dl-horizontal dt{float:left;width:160px;clear:left;text-align:right;overflow:hidden;text-overflow:ellipsis;white-space:nowrap}.dl-horizontal dd{margin-left:180px}}abbr[data-original-title],abbr[title]{cursor:help;border-bottom:1px dotted #777}.initialism{font-size:90%;text-transform:uppercase}blockquote{padding:10px 20px;margin:0 0 20px;font-size:17.5px;border-left:5px solid #eee}blockquote ol:last-child,blockquote p:last-child,blockquote ul:last-child{margin-bottom:0}blockquote .small,blockquote footer,blockquote small{display:block;font-size:80%;line-height:1.42857143;color:#777}blockquote .small:before,blockquote footer:before,blockquote small:before{content:'\2014 \00A0'}.blockquote-reverse,blockquote.pull-right{padding-right:15px;padding-left:0;border-right:5px solid #eee;border-left:0;text-align:right}.blockquote-reverse .small:before,.blockquote-reverse footer:before,.blockquote-reverse small:before,blockquote.pull-right .small:before,blockquote.pull-right footer:before,blockquote.pull-right small:before{content:''}.blockquote-reverse .small:after,.blockquote-reverse footer:after,.blockquote-reverse small:after,blockquote.pull-right .small:after,blockquote.pull-right footer:after,blockquote.pull-right small:after{content:'\00A0 \2014'}address{margin-bottom:20px;font-style:normal;line-height:1.42857143}.container,.container-fluid{margin-right:auto;margin-left:auto;padding-left:15px;padding-right:15px}@media (max-width:991px){.container{width:750px}}@media (min-width:768px){.container{width:750px}}@media (min-width:992px){.container{width:970px}}@media (min-width:1200px){.container{width:1170px}}.row{margin-left:-15px;margin-right:-15px}.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9,.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9,.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9,.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{position:relative;min-height:1px;padding-left:15px;padding-right:15px}.col-xs-1,.col-xs-10,.col-xs-11,.col-xs-12,.col-xs-2,.col-xs-3,.col-xs-4,.col-xs-5,.col-xs-6,.col-xs-7,.col-xs-8,.col-xs-9{float:left}.col-xs-12{width:100%}.col-xs-11{width:91.66666667%}.col-xs-10{width:83.33333333%}.col-xs-9{width:75%}.col-xs-8{width:66.66666667%}.col-xs-7{width:58.33333333%}.col-xs-6{width:50%}.col-xs-5{width:41.66666667%}.col-xs-4{width:33.33333333%}.col-xs-3{width:25%}.col-xs-2{width:16.66666667%}.col-xs-1{width:8.33333333%}.col-xs-pull-12{right:100%}.col-xs-pull-11{right:91.66666667%}.col-xs-pull-10{right:83.33333333%}.col-xs-pull-9{right:75%}.col-xs-pull-8{right:66.66666667%}.col-xs-pull-7{right:58.33333333%}.col-xs-pull-6{right:50%}.col-xs-pull-5{right:41.66666667%}.col-xs-pull-4{right:33.33333333%}.col-xs-pull-3{right:25%}.col-xs-pull-2{right:16.66666667%}.col-xs-pull-1{right:8.33333333%}.col-xs-pull-0{right:auto}.col-xs-push-12{left:100%}.col-xs-push-11{left:91.66666667%}.col-xs-push-10{left:83.33333333%}.col-xs-push-9{left:75%}.col-xs-push-8{left:66.66666667%}.col-xs-push-7{left:58.33333333%}.col-xs-push-6{left:50%}.col-xs-push-5{left:41.66666667%}.col-xs-push-4{left:33.33333333%}.col-xs-push-3{left:25%}.col-xs-push-2{left:16.66666667%}.col-xs-push-1{left:8.33333333%}.col-xs-push-0{left:auto}.col-xs-offset-12{margin-left:100%}.col-xs-offset-11{margin-left:91.66666667%}.col-xs-offset-10{margin-left:83.33333333%}.col-xs-offset-9{margin-left:75%}.col-xs-offset-8{margin-left:66.66666667%}.col-xs-offset-7{margin-left:58.33333333%}.col-xs-offset-6{margin-left:50%}.col-xs-offset-5{margin-left:41.66666667%}.col-xs-offset-4{margin-left:33.33333333%}.col-xs-offset-3{margin-left:25%}.col-xs-offset-2{margin-left:16.66666667%}.col-xs-offset-1{margin-left:8.33333333%}.col-xs-offset-0{margin-left:0}@media (min-width:768px){.col-sm-1,.col-sm-10,.col-sm-11,.col-sm-12,.col-sm-2,.col-sm-3,.col-sm-4,.col-sm-5,.col-sm-6,.col-sm-7,.col-sm-8,.col-sm-9{float:left}.col-sm-12{width:100%}.col-sm-11{width:91.66666667%}.col-sm-10{width:83.33333333%}.col-sm-9{width:75%}.col-sm-8{width:66.66666667%}.col-sm-7{width:58.33333333%}.col-sm-6{width:50%}.col-sm-5{width:41.66666667%}.col-sm-4{width:33.33333333%}.col-sm-3{width:25%}.col-sm-2{width:16.66666667%}.col-sm-1{width:8.33333333%}.col-sm-pull-12{right:100%}.col-sm-pull-11{right:91.66666667%}.col-sm-pull-10{right:83.33333333%}.col-sm-pull-9{right:75%}.col-sm-pull-8{right:66.66666667%}.col-sm-pull-7{right:58.33333333%}.col-sm-pull-6{right:50%}.col-sm-pull-5{right:41.66666667%}.col-sm-pull-4{right:33.33333333%}.col-sm-pull-3{right:25%}.col-sm-pull-2{right:16.66666667%}.col-sm-pull-1{right:8.33333333%}.col-sm-pull-0{right:auto}.col-sm-push-12{left:100%}.col-sm-push-11{left:91.66666667%}.col-sm-push-10{left:83.33333333%}.col-sm-push-9{left:75%}.col-sm-push-8{left:66.66666667%}.col-sm-push-7{left:58.33333333%}.col-sm-push-6{left:50%}.col-sm-push-5{left:41.66666667%}.col-sm-push-4{left:33.33333333%}.col-sm-push-3{left:25%}.col-sm-push-2{left:16.66666667%}.col-sm-push-1{left:8.33333333%}.col-sm-push-0{left:auto}.col-sm-offset-12{margin-left:100%}.col-sm-offset-11{margin-left:91.66666667%}.col-sm-offset-10{margin-left:83.33333333%}.col-sm-offset-9{margin-left:75%}.col-sm-offset-8{margin-left:66.66666667%}.col-sm-offset-7{margin-left:58.33333333%}.col-sm-offset-6{margin-left:50%}.col-sm-offset-5{margin-left:41.66666667%}.col-sm-offset-4{margin-left:33.33333333%}.col-sm-offset-3{margin-left:25%}.col-sm-offset-2{margin-left:16.66666667%}.col-sm-offset-1{margin-left:8.33333333%}.col-sm-offset-0{margin-left:0}}@media (min-width:992px){.col-md-1,.col-md-10,.col-md-11,.col-md-12,.col-md-2,.col-md-3,.col-md-4,.col-md-5,.col-md-6,.col-md-7,.col-md-8,.col-md-9{float:left}.col-md-12{width:100%}.col-md-11{width:91.66666667%}.col-md-10{width:83.33333333%}.col-md-9{width:75%}.col-md-8{width:66.66666667%}.col-md-7{width:58.33333333%}.col-md-6{width:50%}.col-md-5{width:41.66666667%}.col-md-4{width:33.33333333%}.col-md-3{width:25%}.col-md-2{width:16.66666667%}.col-md-1{width:8.33333333%}.col-md-pull-12{right:100%}.col-md-pull-11{right:91.66666667%}.col-md-pull-10{right:83.33333333%}.col-md-pull-9{right:75%}.col-md-pull-8{right:66.66666667%}.col-md-pull-7{right:58.33333333%}.col-md-pull-6{right:50%}.col-md-pull-5{right:41.66666667%}.col-md-pull-4{right:33.33333333%}.col-md-pull-3{right:25%}.col-md-pull-2{right:16.66666667%}.col-md-pull-1{right:8.33333333%}.col-md-pull-0{right:auto}.col-md-push-12{left:100%}.col-md-push-11{left:91.66666667%}.col-md-push-10{left:83.33333333%}.col-md-push-9{left:75%}.col-md-push-8{left:66.66666667%}.col-md-push-7{left:58.33333333%}.col-md-push-6{left:50%}.col-md-push-5{left:41.66666667%}.col-md-push-4{left:33.33333333%}.col-md-push-3{left:25%}.col-md-push-2{left:16.66666667%}.col-md-push-1{left:8.33333333%}.col-md-push-0{left:auto}.col-md-offset-12{margin-left:100%}.col-md-offset-11{margin-left:91.66666667%}.col-md-offset-10{margin-left:83.33333333%}.col-md-offset-9{margin-left:75%}.col-md-offset-8{margin-left:66.66666667%}.col-md-offset-7{margin-left:58.33333333%}.col-md-offset-6{margin-left:50%}.col-md-offset-5{margin-left:41.66666667%}.col-md-offset-4{margin-left:33.33333333%}.col-md-offset-3{margin-left:25%}.col-md-offset-2{margin-left:16.66666667%}.col-md-offset-1{margin-left:8.33333333%}.col-md-offset-0{margin-left:0}}@media (min-width:1200px){.col-lg-1,.col-lg-10,.col-lg-11,.col-lg-12,.col-lg-2,.col-lg-3,.col-lg-4,.col-lg-5,.col-lg-6,.col-lg-7,.col-lg-8,.col-lg-9{float:left}.col-lg-12{width:100%}.col-lg-11{width:91.66666667%}.col-lg-10{width:83.33333333%}.col-lg-9{width:75%}.col-lg-8{width:66.66666667%}.col-lg-7{width:58.33333333%}.col-lg-6{width:50%}.col-lg-5{width:41.66666667%}.col-lg-4{width:33.33333333%}.col-lg-3{width:25%}.col-lg-2{width:16.66666667%}.col-lg-1{width:8.33333333%}.col-lg-pull-12{right:100%}.col-lg-pull-11{right:91.66666667%}.col-lg-pull-10{right:83.33333333%}.col-lg-pull-9{right:75%}.col-lg-pull-8{right:66.66666667%}.col-lg-pull-7{right:58.33333333%}.col-lg-pull-6{right:50%}.col-lg-pull-5{right:41.66666667%}.col-lg-pull-4{right:33.33333333%}.col-lg-pull-3{right:25%}.col-lg-pull-2{right:16.66666667%}.col-lg-pull-1{right:8.33333333%}.col-lg-pull-0{right:auto}.col-lg-push-12{left:100%}.col-lg-push-11{left:91.66666667%}.col-lg-push-10{left:83.33333333%}.col-lg-push-9{left:75%}.col-lg-push-8{left:66.66666667%}.col-lg-push-7{left:58.33333333%}.col-lg-push-6{left:50%}.col-lg-push-5{left:41.66666667%}.col-lg-push-4{left:33.33333333%}.col-lg-push-3{left:25%}.col-lg-push-2{left:16.66666667%}.col-lg-push-1{left:8.33333333%}.col-lg-push-0{left:auto}.col-lg-offset-12{margin-left:100%}.col-lg-offset-11{margin-left:91.66666667%}.col-lg-offset-10{margin-left:83.33333333%}.col-lg-offset-9{margin-left:75%}.col-lg-offset-8{margin-left:66.66666667%}.col-lg-offset-7{margin-left:58.33333333%}.col-lg-offset-6{margin-left:50%}.col-lg-offset-5{margin-left:41.66666667%}.col-lg-offset-4{margin-left:33.33333333%}.col-lg-offset-3{margin-left:25%}.col-lg-offset-2{margin-left:16.66666667%}.col-lg-offset-1{margin-left:8.33333333%}.col-lg-offset-0{margin-left:0}}fieldset{padding:0;margin:0;border:0;min-width:0}legend{display:block;width:100%;padding:0;margin-bottom:20px;font-size:21px;line-height:inherit;color:#333;border:0;border-bottom:1px solid #e5e5e5}label{display:inline-block;max-width:100%;margin-bottom:5px;font-weight:700}input[type=search]{-webkit-box-sizing:border-box;-moz-box-sizing:border-box;box-sizing:border-box}input[type=checkbox],input[type=radio]{margin:4px 0 0;margin-top:1px \9;line-height:normal}input[type=file]{display:block}input[type=range]{display:block;width:100%}select[multiple],select[size]{height:auto}input[type=file]:focus,input[type=checkbox]:focus,input[type=radio]:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}output{display:block;padding-top:7px;font-size:14px;line-height:1.42857143;color:#555}.form-control{display:block;width:100%;height:34px;padding:6px 12px;font-size:14px;line-height:1.42857143;color:#555;background-color:#fff;background-image:none;border:1px solid #ccc;border-radius:4px;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075);-webkit-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;-o-transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s;transition:border-color ease-in-out .15s,box-shadow ease-in-out .15s}.form-control:focus{border-color:#66afe9;outline:0;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6);box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 8px rgba(102,175,233,.6)}.form-control::-moz-placeholder{color:#999;opacity:1}.form-control:-ms-input-placeholder{color:#999}.form-control::-webkit-input-placeholder{color:#999}.form-control::-ms-expand{border:0;background-color:transparent}.form-control[disabled],.form-control[readonly],fieldset[disabled] .form-control{background-color:#eee;opacity:1}.form-control[disabled],fieldset[disabled] .form-control{cursor:not-allowed}textarea.form-control{height:auto}input[type=search]{-webkit-appearance:none}@media screen and (-webkit-min-device-pixel-ratio:0){input[type=date].form-control,input[type=time].form-control,input[type=datetime-local].form-control,input[type=month].form-control{line-height:34px}.input-group-sm input[type=date],.input-group-sm input[type=time],.input-group-sm input[type=datetime-local],.input-group-sm input[type=month],input[type=date].input-sm,input[type=time].input-sm,input[type=datetime-local].input-sm,input[type=month].input-sm{line-height:30px}.input-group-lg input[type=date],.input-group-lg input[type=time],.input-group-lg input[type=datetime-local],.input-group-lg input[type=month],input[type=date].input-lg,input[type=time].input-lg,input[type=datetime-local].input-lg,input[type=month].input-lg{line-height:46px}}.form-group{margin-bottom:15px}.checkbox,.radio{position:relative;display:block;margin-top:10px;margin-bottom:10px}.checkbox label,.radio label{min-height:20px;padding-left:20px;margin-bottom:0;font-weight:400;cursor:pointer}.checkbox input[type=checkbox],.checkbox-inline input[type=checkbox],.radio input[type=radio],.radio-inline input[type=radio]{position:absolute;margin-left:-20px;margin-top:4px \9}.checkbox+.checkbox,.radio+.radio{margin-top:-5px}.checkbox-inline,.radio-inline{position:relative;display:inline-block;padding-left:20px;margin-bottom:0;vertical-align:middle;font-weight:400;cursor:pointer}.checkbox-inline+.checkbox-inline,.radio-inline+.radio-inline{margin-top:0;margin-left:10px}.checkbox-inline.disabled,.checkbox.disabled label,.radio-inline.disabled,.radio.disabled label,fieldset[disabled] .checkbox label,fieldset[disabled] .checkbox-inline,fieldset[disabled] .radio label,fieldset[disabled] .radio-inline,fieldset[disabled] input[type=checkbox],fieldset[disabled] input[type=radio],input[type=checkbox].disabled,input[type=checkbox][disabled],input[type=radio].disabled,input[type=radio][disabled]{cursor:not-allowed}.form-control-static{padding-top:7px;padding-bottom:7px;margin-bottom:0;min-height:34px}.form-control-static.input-lg,.form-control-static.input-sm{padding-left:0;padding-right:0}.input-sm{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}select.input-sm{height:30px;line-height:30px}select[multiple].input-sm,textarea.input-sm{height:auto}.form-group-sm .form-control{height:30px;padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.form-group-sm select.form-control{height:30px;line-height:30px}.form-group-sm select[multiple].form-control,.form-group-sm textarea.form-control{height:auto}.form-group-sm .form-control-static{height:30px;min-height:32px;padding:6px 10px;font-size:12px;line-height:1.5}.input-lg{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}select.input-lg{height:46px;line-height:46px}select[multiple].input-lg,textarea.input-lg{height:auto}.form-group-lg .form-control{height:46px;padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.form-group-lg select.form-control{height:46px;line-height:46px}.form-group-lg select[multiple].form-control,.form-group-lg textarea.form-control{height:auto}.form-group-lg .form-control-static{height:46px;min-height:38px;padding:11px 16px;font-size:18px;line-height:1.3333333}.has-feedback{position:relative}.has-feedback .form-control{padding-right:42.5px}.form-control-feedback{position:absolute;top:0;right:0;z-index:2;display:block;width:34px;height:34px;line-height:34px;text-align:center;pointer-events:none}.form-group-lg .form-control+.form-control-feedback,.input-group-lg+.form-control-feedback,.input-lg+.form-control-feedback{width:46px;height:46px;line-height:46px}.form-group-sm .form-control+.form-control-feedback,.input-group-sm+.form-control-feedback,.input-sm+.form-control-feedback{width:30px;height:30px;line-height:30px}.has-success .checkbox,.has-success .checkbox-inline,.has-success .control-label,.has-success .help-block,.has-success .radio,.has-success .radio-inline,.has-success.checkbox label,.has-success.checkbox-inline label,.has-success.radio label,.has-success.radio-inline label{color:#3c763d}.has-success .form-control{border-color:#3c763d;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-success .form-control:focus{border-color:#2b542c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #67b168}.has-success .input-group-addon{color:#3c763d;border-color:#3c763d;background-color:#dff0d8}.has-success .form-control-feedback{color:#3c763d}.has-warning .checkbox,.has-warning .checkbox-inline,.has-warning .control-label,.has-warning .help-block,.has-warning .radio,.has-warning .radio-inline,.has-warning.checkbox label,.has-warning.checkbox-inline label,.has-warning.radio label,.has-warning.radio-inline label{color:#8a6d3b}.has-warning .form-control{border-color:#8a6d3b;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-warning .form-control:focus{border-color:#66512c;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #c0a16b}.has-warning .input-group-addon{color:#8a6d3b;border-color:#8a6d3b;background-color:#fcf8e3}.has-warning .form-control-feedback{color:#8a6d3b}.has-error .checkbox,.has-error .checkbox-inline,.has-error .control-label,.has-error .help-block,.has-error .radio,.has-error .radio-inline,.has-error.checkbox label,.has-error.checkbox-inline label,.has-error.radio label,.has-error.radio-inline label{color:#a94442}.has-error .form-control{border-color:#a94442;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075);box-shadow:inset 0 1px 1px rgba(0,0,0,.075)}.has-error .form-control:focus{border-color:#843534;-webkit-box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483;box-shadow:inset 0 1px 1px rgba(0,0,0,.075),0 0 6px #ce8483}.has-error .input-group-addon{color:#a94442;border-color:#a94442;background-color:#f2dede}.has-error .form-control-feedback{color:#a94442}.has-feedback label~.form-control-feedback{top:25px}.has-feedback label.sr-only~.form-control-feedback{top:0}.help-block{display:block;margin-top:5px;margin-bottom:10px;color:#737373}@media (min-width:768px){.form-inline .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.form-inline .form-control{display:inline-block;width:auto;vertical-align:middle}.form-inline .form-control-static{display:inline-block}.form-inline .input-group{display:inline-table;vertical-align:middle}.form-inline .input-group .form-control,.form-inline .input-group .input-group-addon,.form-inline .input-group .input-group-btn{width:auto}.form-inline .input-group>.form-control{width:100%}.form-inline .control-label{margin-bottom:0;vertical-align:middle}.form-inline .checkbox,.form-inline .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.form-inline .checkbox label,.form-inline .radio label{padding-left:0}.form-inline .checkbox input[type=checkbox],.form-inline .radio input[type=radio]{position:relative;margin-left:0}.form-inline .has-feedback .form-control-feedback{top:0}}.form-horizontal .checkbox,.form-horizontal .checkbox-inline,.form-horizontal .radio,.form-horizontal .radio-inline{margin-top:0;margin-bottom:0;padding-top:7px}.form-horizontal .checkbox,.form-horizontal .radio{min-height:27px}.form-horizontal .form-group{margin-left:-15px;margin-right:-15px}@media (min-width:768px){.form-horizontal .control-label{text-align:right;margin-bottom:0;padding-top:7px}}.form-horizontal .has-feedback .form-control-feedback{right:15px}@media (min-width:768px){.form-horizontal .form-group-lg .control-label{padding-top:11px;font-size:18px}}@media (min-width:768px){.form-horizontal .form-group-sm .control-label{padding-top:6px;font-size:12px}}.btn{display:inline-block;margin-bottom:0;font-weight:400;text-align:center;vertical-align:middle;touch-action:manipulation;cursor:pointer;background-image:none;border:1px solid transparent;white-space:nowrap;padding:6px 12px;font-size:14px;line-height:1.42857143;border-radius:4px;-webkit-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.btn.active.focus,.btn.active:focus,.btn.focus,.btn:active.focus,.btn:active:focus,.btn:focus{outline:-webkit-focus-ring-color auto 5px;outline-offset:-2px}.btn.focus,.btn:focus,.btn:hover{color:#fff;text-decoration:none}.btn.active,.btn:active{outline:0;background-image:none;-webkit-box-shadow:inset 0 3px 5px rgba(0,0,0,.125);box-shadow:inset 0 3px 5px rgba(0,0,0,.125)}.btn.disabled,.btn[disabled],fieldset[disabled] .btn{cursor:not-allowed;opacity:.65;filter:alpha(opacity=65);-webkit-box-shadow:none;box-shadow:none}a.btn.disabled,fieldset[disabled] a.btn{pointer-events:none}.btn-default{color:#fff;background-color:#96cdcd;border-color:transparent}.btn-default.active,.btn-default.focus,.btn-default:active,.btn-default:focus,.btn-default:hover,.open>.dropdown-toggle.btn-default{color:#fff;background-color:#73bdbd;border-color:rgba(0,0,0,0)}.btn-default.active.focus,.btn-default.active:focus,.btn-default.active:hover,.btn-default:active.focus,.btn-default:active:focus,.btn-default:active:hover,.open>.dropdown-toggle.btn-default.focus,.open>.dropdown-toggle.btn-default:focus,.open>.dropdown-toggle.btn-default:hover{color:#fff;background-color:#5bb1b1;border-color:rgba(0,0,0,0)}.btn-default.active,.btn-default:active,.open>.dropdown-toggle.btn-default{background-image:none}.btn-default.disabled.focus,.btn-default.disabled:focus,.btn-default.disabled:hover,.btn-default[disabled].focus,.btn-default[disabled]:focus,.btn-default[disabled]:hover,fieldset[disabled] .btn-default.focus,fieldset[disabled] .btn-default:focus,fieldset[disabled] .btn-default:hover{background-color:#96cdcd;border-color:transparent}.btn-default .badge{color:#96cdcd;background-color:#fff}.btn-primary{color:#fff;background-color:#337ab7;border-color:#2e6da4}.btn-primary.focus,.btn-primary:focus{color:#fff;background-color:#286090;border-color:#122b40}.btn-primary.active,.btn-primary:active,.btn-primary:hover,.open>.dropdown-toggle.btn-primary{color:#fff;background-color:#286090;border-color:#204d74}.btn-primary.active.focus,.btn-primary.active:focus,.btn-primary.active:hover,.btn-primary:active.focus,.btn-primary:active:focus,.btn-primary:active:hover,.open>.dropdown-toggle.btn-primary.focus,.open>.dropdown-toggle.btn-primary:focus,.open>.dropdown-toggle.btn-primary:hover{color:#fff;background-color:#204d74;border-color:#122b40}.btn-primary.active,.btn-primary:active,.open>.dropdown-toggle.btn-primary{background-image:none}.btn-primary.disabled.focus,.btn-primary.disabled:focus,.btn-primary.disabled:hover,.btn-primary[disabled].focus,.btn-primary[disabled]:focus,.btn-primary[disabled]:hover,fieldset[disabled] .btn-primary.focus,fieldset[disabled] .btn-primary:focus,fieldset[disabled] .btn-primary:hover{background-color:#337ab7;border-color:#2e6da4}.btn-primary .badge{color:#337ab7;background-color:#fff}.btn-success{color:#fff;background-color:#5cb85c;border-color:#4cae4c}.btn-success.focus,.btn-success:focus{color:#fff;background-color:#449d44;border-color:#255625}.btn-success.active,.btn-success:active,.btn-success:hover,.open>.dropdown-toggle.btn-success{color:#fff;background-color:#449d44;border-color:#398439}.btn-success.active.focus,.btn-success.active:focus,.btn-success.active:hover,.btn-success:active.focus,.btn-success:active:focus,.btn-success:active:hover,.open>.dropdown-toggle.btn-success.focus,.open>.dropdown-toggle.btn-success:focus,.open>.dropdown-toggle.btn-success:hover{color:#fff;background-color:#398439;border-color:#255625}.btn-success.active,.btn-success:active,.open>.dropdown-toggle.btn-success{background-image:none}.btn-success.disabled.focus,.btn-success.disabled:focus,.btn-success.disabled:hover,.btn-success[disabled].focus,.btn-success[disabled]:focus,.btn-success[disabled]:hover,fieldset[disabled] .btn-success.focus,fieldset[disabled] .btn-success:focus,fieldset[disabled] .btn-success:hover{background-color:#5cb85c;border-color:#4cae4c}.btn-success .badge{color:#5cb85c;background-color:#fff}.btn-info{color:#fff;background-color:#5bc0de;border-color:#46b8da}.btn-info.focus,.btn-info:focus{color:#fff;background-color:#31b0d5;border-color:#1b6d85}.btn-info.active,.btn-info:active,.btn-info:hover,.open>.dropdown-toggle.btn-info{color:#fff;background-color:#31b0d5;border-color:#269abc}.btn-info.active.focus,.btn-info.active:focus,.btn-info.active:hover,.btn-info:active.focus,.btn-info:active:focus,.btn-info:active:hover,.open>.dropdown-toggle.btn-info.focus,.open>.dropdown-toggle.btn-info:focus,.open>.dropdown-toggle.btn-info:hover{color:#fff;background-color:#269abc;border-color:#1b6d85}.btn-info.active,.btn-info:active,.open>.dropdown-toggle.btn-info{background-image:none}.btn-info.disabled.focus,.btn-info.disabled:focus,.btn-info.disabled:hover,.btn-info[disabled].focus,.btn-info[disabled]:focus,.btn-info[disabled]:hover,fieldset[disabled] .btn-info.focus,fieldset[disabled] .btn-info:focus,fieldset[disabled] .btn-info:hover{background-color:#5bc0de;border-color:#46b8da}.btn-info .badge{color:#5bc0de;background-color:#fff}.btn-warning{color:#fff;background-color:#f0ad4e;border-color:#eea236}.btn-warning.focus,.btn-warning:focus{color:#fff;background-color:#ec971f;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.btn-warning:hover,.open>.dropdown-toggle.btn-warning{color:#fff;background-color:#ec971f;border-color:#d58512}.btn-warning.active.focus,.btn-warning.active:focus,.btn-warning.active:hover,.btn-warning:active.focus,.btn-warning:active:focus,.btn-warning:active:hover,.open>.dropdown-toggle.btn-warning.focus,.open>.dropdown-toggle.btn-warning:focus,.open>.dropdown-toggle.btn-warning:hover{color:#fff;background-color:#d58512;border-color:#985f0d}.btn-warning.active,.btn-warning:active,.open>.dropdown-toggle.btn-warning{background-image:none}.btn-warning.disabled.focus,.btn-warning.disabled:focus,.btn-warning.disabled:hover,.btn-warning[disabled].focus,.btn-warning[disabled]:focus,.btn-warning[disabled]:hover,fieldset[disabled] .btn-warning.focus,fieldset[disabled] .btn-warning:focus,fieldset[disabled] .btn-warning:hover{background-color:#f0ad4e;border-color:#eea236}.btn-warning .badge{color:#f0ad4e;background-color:#fff}.btn-danger{color:#fff;background-color:#d9534f;border-color:#d43f3a}.btn-danger.focus,.btn-danger:focus{color:#fff;background-color:#c9302c;border-color:#761c19}.btn-danger.active,.btn-danger:active,.btn-danger:hover,.open>.dropdown-toggle.btn-danger{color:#fff;background-color:#c9302c;border-color:#ac2925}.btn-danger.active.focus,.btn-danger.active:focus,.btn-danger.active:hover,.btn-danger:active.focus,.btn-danger:active:focus,.btn-danger:active:hover,.open>.dropdown-toggle.btn-danger.focus,.open>.dropdown-toggle.btn-danger:focus,.open>.dropdown-toggle.btn-danger:hover{color:#fff;background-color:#ac2925;border-color:#761c19}.btn-danger.active,.btn-danger:active,.open>.dropdown-toggle.btn-danger{background-image:none}.btn-danger.disabled.focus,.btn-danger.disabled:focus,.btn-danger.disabled:hover,.btn-danger[disabled].focus,.btn-danger[disabled]:focus,.btn-danger[disabled]:hover,fieldset[disabled] .btn-danger.focus,fieldset[disabled] .btn-danger:focus,fieldset[disabled] .btn-danger:hover{background-color:#d9534f;border-color:#d43f3a}.btn-danger .badge{color:#d9534f;background-color:#fff}.btn-link{color:#337ab7;font-weight:400;border-radius:0}.btn-link,.btn-link.active,.btn-link:active,.btn-link[disabled],fieldset[disabled] .btn-link{background-color:transparent;-webkit-box-shadow:none;box-shadow:none}.btn-link,.btn-link:active,.btn-link:focus,.btn-link:hover{border-color:transparent}.btn-link:focus,.btn-link:hover{color:#23527c;text-decoration:underline;background-color:transparent}.btn-link[disabled]:focus,.btn-link[disabled]:hover,fieldset[disabled] .btn-link:focus,fieldset[disabled] .btn-link:hover{color:#777;text-decoration:none}.btn-lg{padding:10px 16px;font-size:18px;line-height:1.3333333;border-radius:6px}.btn-sm{padding:5px 10px;font-size:12px;line-height:1.5;border-radius:3px}.btn-xs{padding:1px 5px;font-size:12px;line-height:1.5;border-radius:3px}.btn-block{display:block;width:100%}.btn-block+.btn-block{margin-top:5px}input[type=button].btn-block,input[type=reset].btn-block,input[type=submit].btn-block{width:100%}.caret{display:inline-block;width:0;height:0;margin-left:2px;vertical-align:middle;border-top:4px dashed;border-top:4px solid \9;border-right:4px solid transparent;border-left:4px solid transparent}.dropdown,.dropup{position:relative}.dropdown-toggle:focus{outline:0}.dropdown-menu{position:absolute;top:100%;left:0;z-index:1000;display:none;float:left;min-width:160px;padding:5px 0;margin:2px 0 0;list-style:none;font-size:14px;text-align:left;background-color:#fff;border:1px solid #ccc;border:1px solid rgba(0,0,0,.15);border-radius:4px;-webkit-box-shadow:0 6px 12px rgba(0,0,0,.175);box-shadow:0 6px 12px rgba(0,0,0,.175);background-clip:padding-box}.dropdown-menu.pull-right{right:0;left:auto}.dropdown-menu .divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.dropdown-menu>li>a{display:block;padding:6px 20px;clear:both;font-size:15px;font-weight:400;line-height:1.42857143;color:#333;white-space:nowrap}.dropdown-menu>li>a:focus,.dropdown-menu>li>a:hover{text-decoration:none;color:#262626;background-color:#f5f5f5}.dropdown-menu>.active>a,.dropdown-menu>.active>a:focus,.dropdown-menu>.active>a:hover{color:#fff;text-decoration:none;outline:0;background-color:#337ab7}.dropdown-menu>.disabled>a,.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{color:#777}.dropdown-menu>.disabled>a:focus,.dropdown-menu>.disabled>a:hover{text-decoration:none;background-color:transparent;background-image:none;filter:progid:DXImageTransform.Microsoft.gradient(enabled=false);cursor:not-allowed}.open>.dropdown-menu{display:block}.open>a{outline:0}.dropdown-menu-right{left:auto;right:0}.dropdown-menu-left{left:0;right:auto}.dropdown-header{display:block;padding:3px 20px;font-size:12px;line-height:1.42857143;color:#777;white-space:nowrap}.dropdown-backdrop{position:fixed;left:0;right:0;bottom:0;top:0;z-index:990}.pull-right>.dropdown-menu{right:0;left:auto}.dropup .caret,.navbar-fixed-bottom .dropdown .caret{border-top:0;border-bottom:4px dashed;border-bottom:4px solid \9;content:""}.dropup .dropdown-menu,.navbar-fixed-bottom .dropdown .dropdown-menu{top:auto;bottom:100%;margin-bottom:2px}@media (min-width:500px){.navbar-right .dropdown-menu{left:auto;right:0}.navbar-right .dropdown-menu-left{left:0;right:auto}}.nav{margin-bottom:0;padding-left:0;list-style:none}.nav>li{position:relative;display:block}.nav>li>a{position:relative;display:block;padding:10px 15px}.nav>li>a:focus,.nav>li>a:hover{text-decoration:none;background-color:#eee}.nav>li.disabled>a{color:#777}.nav>li.disabled>a:focus,.nav>li.disabled>a:hover{color:#777;text-decoration:none;background-color:transparent;cursor:not-allowed}.nav .open>a,.nav .open>a:focus,.nav .open>a:hover{background-color:#eee;border-color:#337ab7}.nav .nav-divider{height:1px;margin:9px 0;overflow:hidden;background-color:#e5e5e5}.nav>li>a>img{max-width:none}.nav-tabs{border-bottom:1px solid #ddd}.nav-tabs>li{float:left;margin-bottom:-1px}.nav-tabs>li>a{margin-right:2px;line-height:1.42857143;border:1px solid transparent;border-radius:4px 4px 0 0}.nav-tabs>li>a:hover{border-color:#eee #eee #ddd}.nav-tabs>li.active>a,.nav-tabs>li.active>a:focus,.nav-tabs>li.active>a:hover{color:#555;background-color:#fff;border:1px solid #ddd;border-bottom-color:transparent;cursor:default}.nav-tabs.nav-justified{width:100%;border-bottom:0}.nav-tabs.nav-justified>li{float:none}.nav-tabs.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-tabs.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-tabs.nav-justified>li{display:table-cell;width:1%}.nav-tabs.nav-justified>li>a{margin-bottom:0}}.nav-tabs.nav-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs.nav-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs.nav-justified>.active>a,.nav-tabs.nav-justified>.active>a:focus,.nav-tabs.nav-justified>.active>a:hover{border-bottom-color:#fff}}.nav-pills>li{float:left}.nav-pills>li>a{border-radius:4px}.nav-pills>li+li{margin-left:2px}.nav-pills>li.active>a,.nav-pills>li.active>a:focus,.nav-pills>li.active>a:hover{color:#fff;background-color:#337ab7}.nav-stacked>li{float:none}.nav-stacked>li+li{margin-top:2px;margin-left:0}.nav-justified{width:100%}.nav-justified>li{float:none}.nav-justified>li>a{text-align:center;margin-bottom:5px}.nav-justified>.dropdown .dropdown-menu{top:auto;left:auto}@media (min-width:768px){.nav-justified>li{display:table-cell;width:1%}.nav-justified>li>a{margin-bottom:0}}.nav-tabs-justified{border-bottom:0}.nav-tabs-justified>li>a{margin-right:0;border-radius:4px}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border:1px solid #ddd}@media (min-width:768px){.nav-tabs-justified>li>a{border-bottom:1px solid #ddd;border-radius:4px 4px 0 0}.nav-tabs-justified>.active>a,.nav-tabs-justified>.active>a:focus,.nav-tabs-justified>.active>a:hover{border-bottom-color:#fff}}.tab-content>.tab-pane{display:none}.tab-content>.active{display:block}.nav-tabs .dropdown-menu{margin-top:-1px;border-top-right-radius:0;border-top-left-radius:0}.navbar{position:relative;min-height:50px;margin-bottom:20px;margin-top:10px;border:1px solid transparent}@media (min-width:500px){.navbar{border-radius:4px}}@media (min-width:500px){.navbar-header{float:left}}.navbar-collapse{overflow-x:visible;padding-right:15px;padding-left:15px;border-top:1px solid transparent;box-shadow:inset 0 1px 0 rgba(255,255,255,.1);-webkit-overflow-scrolling:touch}.navbar-collapse.in{overflow-y:auto}@media (min-width:500px){.navbar-collapse{width:auto;border-top:0;box-shadow:none}.navbar-collapse.collapse{display:block!important;height:auto!important;padding-bottom:0;overflow:visible!important}.navbar-collapse.in{overflow-y:visible}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse,.navbar-static-top .navbar-collapse{padding-left:0;padding-right:0}}.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:340px}@media (max-device-width:480px) and (orientation:landscape){.navbar-fixed-bottom .navbar-collapse,.navbar-fixed-top .navbar-collapse{max-height:200px}}.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:-15px;margin-left:-15px}@media (min-width:500px){.container-fluid>.navbar-collapse,.container-fluid>.navbar-header,.container>.navbar-collapse,.container>.navbar-header{margin-right:0;margin-left:0}}.navbar-static-top{z-index:1000;border-width:0}@media (min-width:500px){.navbar-static-top{border-radius:0}}.navbar-fixed-bottom,.navbar-fixed-top{position:fixed;right:0;left:0;z-index:1030}@media (min-width:500px){.navbar-fixed-bottom,.navbar-fixed-top{border-radius:0}}.navbar-fixed-top{top:0;border-width:0 0 1px}.navbar-fixed-bottom{bottom:0;margin-bottom:0;border-width:1px 0 0}.navbar-brand{float:left;padding:15px;font-size:18px;line-height:20px;height:50px}.navbar-brand:focus,.navbar-brand:hover{text-decoration:none}.navbar-brand>img{display:block}@media (min-width:500px){.navbar>.container .navbar-brand,.navbar>.container-fluid .navbar-brand{margin-left:-15px}}.navbar-toggle{position:relative;float:right;margin-right:15px;padding:9px 10px;margin-top:8px;margin-bottom:8px;background-color:transparent;background-image:none;border:1px solid transparent;border-radius:4px}.navbar-toggle:focus{outline:0}.navbar-toggle .icon-bar{display:block;width:22px;height:2px;border-radius:1px}.navbar-toggle .icon-bar+.icon-bar{margin-top:4px}@media (min-width:500px){.navbar-toggle{display:none}}.navbar-nav{margin:7.5px -15px}.navbar-nav>li>a{padding-top:10px;padding-bottom:10px;line-height:20px;margin-left:-5px;cursor:pointer}@media (max-width:499px){.navbar-nav .open .dropdown-menu{position:static;float:none;width:auto;margin-top:0;background-color:transparent;border:0;box-shadow:none}.navbar-nav .open .dropdown-menu .dropdown-header,.navbar-nav .open .dropdown-menu>li>a{padding:5px 15px 5px 25px}.navbar-nav .open .dropdown-menu>li>a{line-height:20px}.navbar-nav .open .dropdown-menu>li>a:focus,.navbar-nav .open .dropdown-menu>li>a:hover{background-image:none}}@media (min-width:500px){.navbar-nav{float:left;margin:0}.navbar-nav>li{float:left}.navbar-nav>li>a{padding-top:15px;padding-bottom:15px}}.navbar-form{margin:8px -15px;padding:10px 15px;border-top:1px solid transparent;border-bottom:1px solid transparent;-webkit-box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1);box-shadow:inset 0 1px 0 rgba(255,255,255,.1),0 1px 0 rgba(255,255,255,.1)}@media (min-width:768px){.navbar-form .form-group{display:inline-block;margin-bottom:0;vertical-align:middle}.navbar-form .form-control{display:inline-block;width:auto;vertical-align:middle}.navbar-form .form-control-static{display:inline-block}.navbar-form .input-group{display:inline-table;vertical-align:middle}.navbar-form .input-group .form-control,.navbar-form .input-group .input-group-addon,.navbar-form .input-group .input-group-btn{width:auto}.navbar-form .input-group>.form-control{width:100%}.navbar-form .control-label{margin-bottom:0;vertical-align:middle}.navbar-form .checkbox,.navbar-form .radio{display:inline-block;margin-top:0;margin-bottom:0;vertical-align:middle}.navbar-form .checkbox label,.navbar-form .radio label{padding-left:0}.navbar-form .checkbox input[type=checkbox],.navbar-form .radio input[type=radio]{position:relative;margin-left:0}.navbar-form .has-feedback .form-control-feedback{top:0}}@media (max-width:499px){.navbar-form .form-group{margin-bottom:5px}.navbar-form .form-group:last-child{margin-bottom:0}}@media (min-width:500px){.navbar-form{width:auto;border:0;margin-left:0;margin-right:0;padding-top:0;padding-bottom:0;-webkit-box-shadow:none;box-shadow:none}}.navbar-nav>li>.dropdown-menu{margin-top:0;border-top-right-radius:0;border-top-left-radius:0}.navbar-fixed-bottom .navbar-nav>li>.dropdown-menu{margin-bottom:0;border-radius:4px 4px 0 0}.navbar-btn{margin-top:8px;margin-bottom:8px}.navbar-btn.btn-sm{margin-top:10px;margin-bottom:10px}.navbar-btn.btn-xs{margin-top:14px;margin-bottom:14px}.navbar-text{margin-top:15px;margin-bottom:15px}@media (min-width:500px){.navbar-text{float:left;margin-left:15px;margin-right:15px}}@media (min-width:500px){.navbar-left{float:left!important}.navbar-right{float:right!important;margin-right:-15px}.navbar-right~.navbar-right{margin-right:0}}.navbar-default{background-color:#fff;border-color:#e7e7e7}.navbar-default .navbar-brand{color:#000}.navbar-default .navbar-brand:focus,.navbar-default .navbar-brand:hover{color:#000;background-color:transparent}.navbar-default .navbar-text{color:#777}.navbar-default .navbar-nav>li>a{color:#000}.navbar-default .navbar-nav>li>a:focus,.navbar-default .navbar-nav>li>a:hover{color:#333;background-color:#f5fffa}.navbar-default .navbar-nav>.active>a,.navbar-default .navbar-nav>.active>a:focus,.navbar-default .navbar-nav>.active>a:hover{color:#000;background-color:transparent;box-shadow:0 -2px 0 #4876ff inset}.navbar-default .navbar-nav>.disabled>a,.navbar-default .navbar-nav>.disabled>a:focus,.navbar-default .navbar-nav>.disabled>a:hover{color:#ccc;background-color:transparent}.navbar-default .navbar-toggle{border-color:#ddd}.navbar-default .navbar-toggle:focus,.navbar-default .navbar-toggle:hover{background-color:#ddd}.navbar-default .navbar-toggle .icon-bar{background-color:#888}.navbar-default .navbar-collapse,.navbar-default .navbar-form{border-color:#e7e7e7}.navbar-default .navbar-nav>.open>a,.navbar-default .navbar-nav>.open>a:focus,.navbar-default .navbar-nav>.open>a:hover{background-color:transparent;color:#000}@media (max-width:499px){.navbar-default .navbar-nav .open .dropdown-menu>li>a{color:#000}.navbar-default .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>li>a:hover{color:#333;background-color:#f5fffa}.navbar-default .navbar-nav .open .dropdown-menu>.active>a,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.active>a:hover{color:#000;background-color:transparent}.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-default .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#ccc;background-color:transparent}}.navbar-default .navbar-link{color:#000}.navbar-default .navbar-link:hover{color:#333}.navbar-default .btn-link{color:#000}.navbar-default .btn-link:focus,.navbar-default .btn-link:hover{color:#333}.navbar-default .btn-link[disabled]:focus,.navbar-default .btn-link[disabled]:hover,fieldset[disabled] .navbar-default .btn-link:focus,fieldset[disabled] .navbar-default .btn-link:hover{color:#ccc}.navbar-inverse{background-color:#222;border-color:#080808}.navbar-inverse .navbar-brand{color:#9d9d9d}.navbar-inverse .navbar-brand:focus,.navbar-inverse .navbar-brand:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>li>a,.navbar-inverse .navbar-text{color:#9d9d9d}.navbar-inverse .navbar-nav>li>a:focus,.navbar-inverse .navbar-nav>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav>.active>a,.navbar-inverse .navbar-nav>.active>a:focus,.navbar-inverse .navbar-nav>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav>.disabled>a,.navbar-inverse .navbar-nav>.disabled>a:focus,.navbar-inverse .navbar-nav>.disabled>a:hover{color:#444;background-color:transparent}.navbar-inverse .navbar-toggle{border-color:#333}.navbar-inverse .navbar-toggle:focus,.navbar-inverse .navbar-toggle:hover{background-color:#333}.navbar-inverse .navbar-toggle .icon-bar{background-color:#fff}.navbar-inverse .navbar-collapse,.navbar-inverse .navbar-form{border-color:#101010}.navbar-inverse .navbar-nav>.open>a,.navbar-inverse .navbar-nav>.open>a:focus,.navbar-inverse .navbar-nav>.open>a:hover{background-color:#080808;color:#fff}@media (max-width:499px){.navbar-inverse .navbar-nav .open .dropdown-menu>.dropdown-header{border-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu .divider{background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a{color:#9d9d9d}.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>li>a:hover{color:#fff;background-color:transparent}.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.active>a:hover{color:#fff;background-color:#080808}.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:focus,.navbar-inverse .navbar-nav .open .dropdown-menu>.disabled>a:hover{color:#444;background-color:transparent}}.navbar-inverse .navbar-link{color:#9d9d9d}.navbar-inverse .navbar-link:hover{color:#fff}.navbar-inverse .btn-link{color:#9d9d9d}.navbar-inverse .btn-link:focus,.navbar-inverse .btn-link:hover{color:#fff}.navbar-inverse .btn-link[disabled]:focus,.navbar-inverse .btn-link[disabled]:hover,fieldset[disabled] .navbar-inverse .btn-link:focus,fieldset[disabled] .navbar-inverse .btn-link:hover{color:#444}.pagination{display:inline-block;padding-left:0;margin:20px 0;border-radius:4px}.pagination>li{display:inline}.pagination>li>a,.pagination>li>span{position:relative;float:left;padding:6px 12px;line-height:1.42857143;text-decoration:none;color:#337ab7;background-color:#fff;border:1px solid #ddd;margin-left:-1px}.pagination>li:first-child>a,.pagination>li:first-child>span{margin-left:0;border-bottom-left-radius:4px;border-top-left-radius:4px}.pagination>li:last-child>a,.pagination>li:last-child>span{border-bottom-right-radius:4px;border-top-right-radius:4px}.pagination>li>a:focus,.pagination>li>a:hover,.pagination>li>span:focus,.pagination>li>span:hover{z-index:2;color:#23527c;background-color:#eee;border-color:#ddd}.pagination>.active>a,.pagination>.active>a:focus,.pagination>.active>a:hover,.pagination>.active>span,.pagination>.active>span:focus,.pagination>.active>span:hover{z-index:3;color:#fff;background-color:#337ab7;border-color:#337ab7;cursor:default}.pagination>.disabled>a,.pagination>.disabled>a:focus,.pagination>.disabled>a:hover,.pagination>.disabled>span,.pagination>.disabled>span:focus,.pagination>.disabled>span:hover{color:#777;background-color:#fff;border-color:#ddd;cursor:not-allowed}.pagination-lg>li>a,.pagination-lg>li>span{padding:10px 16px;font-size:18px;line-height:1.3333333}.pagination-lg>li:first-child>a,.pagination-lg>li:first-child>span{border-bottom-left-radius:6px;border-top-left-radius:6px}.pagination-lg>li:last-child>a,.pagination-lg>li:last-child>span{border-bottom-right-radius:6px;border-top-right-radius:6px}.pagination-sm>li>a,.pagination-sm>li>span{padding:5px 10px;font-size:12px;line-height:1.5}.pagination-sm>li:first-child>a,.pagination-sm>li:first-child>span{border-bottom-left-radius:3px;border-top-left-radius:3px}.pagination-sm>li:last-child>a,.pagination-sm>li:last-child>span{border-bottom-right-radius:3px;border-top-right-radius:3px}.label{display:inline;padding:.2em .6em .3em;font-size:75%;font-weight:700;line-height:1;color:#fff;text-align:center;white-space:nowrap;vertical-align:baseline;border-radius:.25em}a.label:focus,a.label:hover{color:#fff;text-decoration:none;cursor:pointer}.label:empty{display:none}.btn .label{position:relative;top:-1px}.label-default{background-color:#777}.label-default[href]:focus,.label-default[href]:hover{background-color:#5e5e5e}.label-primary{background-color:#337ab7}.label-primary[href]:focus,.label-primary[href]:hover{background-color:#286090}.label-success{background-color:#5cb85c}.label-success[href]:focus,.label-success[href]:hover{background-color:#449d44}.label-info{background-color:#5bc0de}.label-info[href]:focus,.label-info[href]:hover{background-color:#31b0d5}.label-warning{background-color:#f0ad4e}.label-warning[href]:focus,.label-warning[href]:hover{background-color:#ec971f}.label-danger{background-color:#d9534f}.label-danger[href]:focus,.label-danger[href]:hover{background-color:#c9302c}.badge{display:inline-block;min-width:10px;padding:3px 7px;font-size:12px;font-weight:700;color:#fff;line-height:1;vertical-align:middle;white-space:nowrap;text-align:center;background-color:#777;border-radius:10px}.badge:empty{display:none}.btn .badge{position:relative;top:-1px}.btn-group-xs>.btn .badge,.btn-xs .badge{top:0;padding:1px 5px}a.badge:focus,a.badge:hover{color:#fff;text-decoration:none;cursor:pointer}.list-group-item.active>.badge,.nav-pills>.active>a>.badge{color:#337ab7;background-color:#fff}.list-group-item>.badge{float:right}.list-group-item>.badge+.badge{margin-right:5px}.nav-pills>li>a>.badge{margin-left:3px}.jumbotron{padding-top:30px;padding-bottom:30px;margin-bottom:30px;color:inherit;background-color:#eee}.jumbotron .h1,.jumbotron h1{color:inherit}.jumbotron p{margin-bottom:15px;font-size:21px;font-weight:200}.jumbotron>hr{border-top-color:#d5d5d5}.container .jumbotron,.container-fluid .jumbotron{border-radius:6px;padding-left:15px;padding-right:15px}.jumbotron .container{max-width:100%}@media screen and (min-width:768px){.jumbotron{padding-top:48px;padding-bottom:48px}.container .jumbotron,.container-fluid .jumbotron{padding-left:60px;padding-right:60px}.jumbotron .h1,.jumbotron h1{font-size:63px}}.alert{padding:15px;margin-bottom:20px;border:1px solid transparent;border-radius:4px}.alert h4{margin-top:0;color:inherit}.alert .alert-link{font-weight:700}.alert>p,.alert>ul{margin-bottom:0}.alert>p+p{margin-top:5px}.alert-dismissable,.alert-dismissible{padding-right:35px}.alert-dismissable .close,.alert-dismissible .close{position:relative;top:-2px;right:-21px;color:inherit}.alert-success{background-color:#dff0d8;border-color:#d6e9c6;color:#3c763d}.alert-success hr{border-top-color:#c9e2b3}.alert-success .alert-link{color:#2b542c}.alert-info{background-color:#d9edf7;border-color:#bce8f1;color:#31708f}.alert-info hr{border-top-color:#a6e1ec}.alert-info .alert-link{color:#245269}.alert-warning{background-color:#fcf8e3;border-color:#faebcc;color:#8a6d3b}.alert-warning hr{border-top-color:#f7e1b5}.alert-warning .alert-link{color:#66512c}.alert-danger{background-color:#f2dede;border-color:#ebccd1;color:#a94442}.alert-danger hr{border-top-color:#e4b9c0}.alert-danger .alert-link{color:#843534}.list-group{margin-bottom:20px;padding-left:0}.list-group-item{position:relative;display:block;padding:10px 15px;margin-bottom:-1px;background-color:#fff;border:1px solid #ddd}.list-group-item:first-child{border-top-right-radius:4px;border-top-left-radius:4px}.list-group-item:last-child{margin-bottom:0;border-bottom-right-radius:4px;border-bottom-left-radius:4px}a.list-group-item,button.list-group-item{color:#555}a.list-group-item .list-group-item-heading,button.list-group-item .list-group-item-heading{color:#333}a.list-group-item:focus,a.list-group-item:hover,button.list-group-item:focus,button.list-group-item:hover{text-decoration:none;color:#555;background-color:#f5f5f5}button.list-group-item{width:100%;text-align:left}.list-group-item.disabled,.list-group-item.disabled:focus,.list-group-item.disabled:hover{background-color:#eee;color:#777;cursor:not-allowed}.list-group-item.disabled .list-group-item-heading,.list-group-item.disabled:focus .list-group-item-heading,.list-group-item.disabled:hover .list-group-item-heading{color:inherit}.list-group-item.disabled .list-group-item-text,.list-group-item.disabled:focus .list-group-item-text,.list-group-item.disabled:hover .list-group-item-text{color:#777}.list-group-item.active,.list-group-item.active:focus,.list-group-item.active:hover{z-index:2;color:#fff;background-color:#337ab7;border-color:#337ab7}.list-group-item.active .list-group-item-heading,.list-group-item.active .list-group-item-heading>.small,.list-group-item.active .list-group-item-heading>small,.list-group-item.active:focus .list-group-item-heading,.list-group-item.active:focus .list-group-item-heading>.small,.list-group-item.active:focus .list-group-item-heading>small,.list-group-item.active:hover .list-group-item-heading,.list-group-item.active:hover .list-group-item-heading>.small,.list-group-item.active:hover .list-group-item-heading>small{color:inherit}.list-group-item.active .list-group-item-text,.list-group-item.active:focus .list-group-item-text,.list-group-item.active:hover .list-group-item-text{color:#c7ddef}.list-group-item-success{color:#3c763d;background-color:#dff0d8}a.list-group-item-success,button.list-group-item-success{color:#3c763d}a.list-group-item-success .list-group-item-heading,button.list-group-item-success .list-group-item-heading{color:inherit}a.list-group-item-success:focus,a.list-group-item-success:hover,button.list-group-item-success:focus,button.list-group-item-success:hover{color:#3c763d;background-color:#d0e9c6}a.list-group-item-success.active,a.list-group-item-success.active:focus,a.list-group-item-success.active:hover,button.list-group-item-success.active,button.list-group-item-success.active:focus,button.list-group-item-success.active:hover{color:#fff;background-color:#3c763d;border-color:#3c763d}.list-group-item-info{color:#31708f;background-color:#d9edf7}a.list-group-item-info,button.list-group-item-info{color:#31708f}a.list-group-item-info .list-group-item-heading,button.list-group-item-info .list-group-item-heading{color:inherit}a.list-group-item-info:focus,a.list-group-item-info:hover,button.list-group-item-info:focus,button.list-group-item-info:hover{color:#31708f;background-color:#c4e3f3}a.list-group-item-info.active,a.list-group-item-info.active:focus,a.list-group-item-info.active:hover,button.list-group-item-info.active,button.list-group-item-info.active:focus,button.list-group-item-info.active:hover{color:#fff;background-color:#31708f;border-color:#31708f}.list-group-item-warning{color:#8a6d3b;background-color:#fcf8e3}a.list-group-item-warning,button.list-group-item-warning{color:#8a6d3b}a.list-group-item-warning .list-group-item-heading,button.list-group-item-warning .list-group-item-heading{color:inherit}a.list-group-item-warning:focus,a.list-group-item-warning:hover,button.list-group-item-warning:focus,button.list-group-item-warning:hover{color:#8a6d3b;background-color:#faf2cc}a.list-group-item-warning.active,a.list-group-item-warning.active:focus,a.list-group-item-warning.active:hover,button.list-group-item-warning.active,button.list-group-item-warning.active:focus,button.list-group-item-warning.active:hover{color:#fff;background-color:#8a6d3b;border-color:#8a6d3b}.list-group-item-danger{color:#a94442;background-color:#f2dede}a.list-group-item-danger,button.list-group-item-danger{color:#a94442}a.list-group-item-danger .list-group-item-heading,button.list-group-item-danger .list-group-item-heading{color:inherit}a.list-group-item-danger:focus,a.list-group-item-danger:hover,button.list-group-item-danger:focus,button.list-group-item-danger:hover{color:#a94442;background-color:#ebcccc}a.list-group-item-danger.active,a.list-group-item-danger.active:focus,a.list-group-item-danger.active:hover,button.list-group-item-danger.active,button.list-group-item-danger.active:focus,button.list-group-item-danger.active:hover{color:#fff;background-color:#a94442;border-color:#a94442}.list-group-item-heading{margin-top:0;margin-bottom:5px}.list-group-item-text{margin-bottom:0;line-height:1.3}.modal-open{overflow:hidden}.modal{display:none;overflow:hidden;position:fixed;top:0;right:0;bottom:0;left:0;z-index:1050;-webkit-overflow-scrolling:touch;outline:0}.modal.fade .modal-dialog{-webkit-transform:translate(0,-25%);-ms-transform:translate(0,-25%);-o-transform:translate(0,-25%);transform:translate(0,-25%);-webkit-transition:-webkit-transform .3s ease-out;-moz-transition:-moz-transform .3s ease-out;-o-transition:-o-transform .3s ease-out;transition:transform .3s ease-out}.modal.in .modal-dialog{-webkit-transform:translate(0,0);-ms-transform:translate(0,0);-o-transform:translate(0,0);transform:translate(0,0)}.modal-open .modal{overflow-x:hidden;overflow-y:auto}.modal-dialog{position:relative;width:auto;margin:10px}.modal-content{position:relative;background-color:#fff;border:1px solid #999;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 3px 9px rgba(0,0,0,.5);box-shadow:0 3px 9px rgba(0,0,0,.5);background-clip:padding-box;outline:0}.modal-backdrop{position:fixed;top:0;right:0;bottom:0;left:0;z-index:1040;background-color:#000}.modal-backdrop.fade{opacity:0;filter:alpha(opacity=0)}.modal-backdrop.in{opacity:.5;filter:alpha(opacity=50)}.modal-header{padding:15px;border-bottom:1px solid #e5e5e5}.modal-header .close{margin-top:-2px}.modal-title{margin:0;line-height:1.42857143}.modal-body{position:relative;padding:15px}.modal-footer{padding:15px;text-align:right;border-top:1px solid #e5e5e5}.modal-footer .btn+.btn{margin-left:5px;margin-bottom:0}.modal-footer .btn-group .btn+.btn{margin-left:-1px}.modal-footer .btn-block+.btn-block{margin-left:0}.modal-scrollbar-measure{position:absolute;top:-9999px;width:50px;height:50px;overflow:scroll}@media (min-width:768px){.modal-dialog{width:600px;margin:30px auto}.modal-content{-webkit-box-shadow:0 5px 15px rgba(0,0,0,.5);box-shadow:0 5px 15px rgba(0,0,0,.5)}.modal-sm{width:300px}}@media (min-width:992px){.modal-lg{width:900px}}.tooltip{position:absolute;z-index:1070;display:block;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:12px;opacity:0;filter:alpha(opacity=0)}.tooltip.in{opacity:.9;filter:alpha(opacity=90)}.tooltip.top{margin-top:-3px;padding:5px 0}.tooltip.right{margin-left:3px;padding:0 5px}.tooltip.bottom{margin-top:3px;padding:5px 0}.tooltip.left{margin-left:-3px;padding:0 5px}.tooltip-inner{max-width:200px;padding:3px 8px;color:#fff;text-align:center;background-color:#000;border-radius:4px}.tooltip-arrow{position:absolute;width:0;height:0;border-color:transparent;border-style:solid}.tooltip.top .tooltip-arrow{bottom:0;left:50%;margin-left:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-left .tooltip-arrow{bottom:0;right:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.top-right .tooltip-arrow{bottom:0;left:5px;margin-bottom:-5px;border-width:5px 5px 0;border-top-color:#000}.tooltip.right .tooltip-arrow{top:50%;left:0;margin-top:-5px;border-width:5px 5px 5px 0;border-right-color:#000}.tooltip.left .tooltip-arrow{top:50%;right:0;margin-top:-5px;border-width:5px 0 5px 5px;border-left-color:#000}.tooltip.bottom .tooltip-arrow{top:0;left:50%;margin-left:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-left .tooltip-arrow{top:0;right:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.tooltip.bottom-right .tooltip-arrow{top:0;left:5px;margin-top:-5px;border-width:0 5px 5px;border-bottom-color:#000}.popover{position:absolute;top:0;left:0;z-index:1060;display:none;max-width:276px;padding:1px;font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-style:normal;font-weight:400;letter-spacing:normal;line-break:auto;line-height:1.42857143;text-align:left;text-align:start;text-decoration:none;text-shadow:none;text-transform:none;white-space:normal;word-break:normal;word-spacing:normal;word-wrap:normal;font-size:14px;background-color:#fff;background-clip:padding-box;border:1px solid #ccc;border:1px solid rgba(0,0,0,.2);border-radius:6px;-webkit-box-shadow:0 5px 10px rgba(0,0,0,.2);box-shadow:0 5px 10px rgba(0,0,0,.2)}.popover.top{margin-top:-10px}.popover.right{margin-left:10px}.popover.bottom{margin-top:10px}.popover.left{margin-left:-10px}.popover-title{margin:0;padding:8px 14px;font-size:14px;background-color:#f7f7f7;border-bottom:1px solid #ebebeb;border-radius:5px 5px 0 0}.popover-content{padding:9px 14px}.popover>.arrow,.popover>.arrow:after{position:absolute;display:block;width:0;height:0;border-color:transparent;border-style:solid}.popover>.arrow{border-width:11px}.popover>.arrow:after{border-width:10px;content:""}.popover.top>.arrow{left:50%;margin-left:-11px;border-bottom-width:0;border-top-color:#999;border-top-color:rgba(0,0,0,.25);bottom:-11px}.popover.top>.arrow:after{content:" ";bottom:1px;margin-left:-10px;border-bottom-width:0;border-top-color:#fff}.popover.right>.arrow{top:50%;left:-11px;margin-top:-11px;border-left-width:0;border-right-color:#999;border-right-color:rgba(0,0,0,.25)}.popover.right>.arrow:after{content:" ";left:1px;bottom:-10px;border-left-width:0;border-right-color:#fff}.popover.bottom>.arrow{left:50%;margin-left:-11px;border-top-width:0;border-bottom-color:#999;border-bottom-color:rgba(0,0,0,.25);top:-11px}.popover.bottom>.arrow:after{content:" ";top:1px;margin-left:-10px;border-top-width:0;border-bottom-color:#fff}.popover.left>.arrow{top:50%;right:-11px;margin-top:-11px;border-right-width:0;border-left-color:#999;border-left-color:rgba(0,0,0,.25)}.popover.left>.arrow:after{content:" ";right:1px;border-right-width:0;border-left-color:#fff;bottom:-10px}.carousel{position:relative}.carousel-inner{position:relative;overflow:hidden;width:100%}.carousel-inner>.item{display:none;position:relative;-webkit-transition:.6s ease-in-out left;-o-transition:.6s ease-in-out left;transition:.6s ease-in-out left}.carousel-inner>.item>a>img,.carousel-inner>.item>img{line-height:1}@media all and (transform-3d),(-webkit-transform-3d){.carousel-inner>.item{-webkit-transition:-webkit-transform .6s ease-in-out;-moz-transition:-moz-transform .6s ease-in-out;-o-transition:-o-transform .6s ease-in-out;transition:transform .6s ease-in-out;-webkit-backface-visibility:hidden;-moz-backface-visibility:hidden;backface-visibility:hidden;-webkit-perspective:1000px;-moz-perspective:1000px;perspective:1000px}.carousel-inner>.item.active.right,.carousel-inner>.item.next{-webkit-transform:translate3d(100%,0,0);transform:translate3d(100%,0,0);left:0}.carousel-inner>.item.active.left,.carousel-inner>.item.prev{-webkit-transform:translate3d(-100%,0,0);transform:translate3d(-100%,0,0);left:0}.carousel-inner>.item.active,.carousel-inner>.item.next.left,.carousel-inner>.item.prev.right{-webkit-transform:translate3d(0,0,0);transform:translate3d(0,0,0);left:0}}.carousel-inner>.active,.carousel-inner>.next,.carousel-inner>.prev{display:block}.carousel-inner>.active{left:0}.carousel-inner>.next,.carousel-inner>.prev{position:absolute;top:0;width:100%}.carousel-inner>.next{left:100%}.carousel-inner>.prev{left:-100%}.carousel-inner>.next.left,.carousel-inner>.prev.right{left:0}.carousel-inner>.active.left{left:-100%}.carousel-inner>.active.right{left:100%}.carousel-control{position:absolute;top:0;left:0;bottom:0;width:15%;opacity:.5;filter:alpha(opacity=50);font-size:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6);background-color:rgba(0,0,0,0)}.carousel-control.left{background-image:-webkit-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.5) 0,rgba(0,0,0,.0001) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#80000000', endColorstr='#00000000', GradientType=1)}.carousel-control.right{left:auto;right:0;background-image:-webkit-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:-o-linear-gradient(left,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-image:linear-gradient(to right,rgba(0,0,0,.0001) 0,rgba(0,0,0,.5) 100%);background-repeat:repeat-x;filter:progid:DXImageTransform.Microsoft.gradient(startColorstr='#00000000', endColorstr='#80000000', GradientType=1)}.carousel-control:focus,.carousel-control:hover{outline:0;color:#fff;text-decoration:none;opacity:.9;filter:alpha(opacity=90)}.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{position:absolute;top:50%;margin-top:-10px;z-index:5;display:inline-block}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{left:50%;margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{right:50%;margin-right:-10px}.carousel-control .icon-next,.carousel-control .icon-prev{width:20px;height:20px;line-height:1;font-family:serif}.carousel-control .icon-prev:before{content:'\2039'}.carousel-control .icon-next:before{content:'\203a'}.carousel-indicators{position:absolute;bottom:10px;left:50%;z-index:15;width:60%;margin-left:-30%;padding-left:0;list-style:none;text-align:center}.carousel-indicators li{display:inline-block;width:10px;height:10px;margin:1px;text-indent:-999px;border:1px solid #fff;border-radius:10px;cursor:pointer;background-color:#000 \9;background-color:rgba(0,0,0,0)}.carousel-indicators .active{margin:0;width:12px;height:12px;background-color:#fff}.carousel-caption{position:absolute;left:15%;right:15%;bottom:20px;z-index:10;padding-top:20px;padding-bottom:20px;color:#fff;text-align:center;text-shadow:0 1px 2px rgba(0,0,0,.6)}.carousel-caption .btn{text-shadow:none}@media screen and (min-width:768px){.carousel-control .glyphicon-chevron-left,.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next,.carousel-control .icon-prev{width:30px;height:30px;margin-top:-10px;font-size:30px}.carousel-control .glyphicon-chevron-left,.carousel-control .icon-prev{margin-left:-10px}.carousel-control .glyphicon-chevron-right,.carousel-control .icon-next{margin-right:-10px}.carousel-caption{left:20%;right:20%;padding-bottom:30px}.carousel-indicators{bottom:20px}}.clearfix:after,.clearfix:before,.container-fluid:after,.container-fluid:before,.container:after,.container:before,.dl-horizontal dd:after,.dl-horizontal dd:before,.form-horizontal .form-group:after,.form-horizontal .form-group:before,.modal-footer:after,.modal-footer:before,.modal-header:after,.modal-header:before,.nav:after,.nav:before,.navbar-collapse:after,.navbar-collapse:before,.navbar-header:after,.navbar-header:before,.navbar:after,.navbar:before,.row:after,.row:before{content:" ";display:table}.clearfix:after,.container-fluid:after,.container:after,.dl-horizontal dd:after,.form-horizontal .form-group:after,.modal-footer:after,.modal-header:after,.nav:after,.navbar-collapse:after,.navbar-header:after,.navbar:after,.row:after{clear:both}.center-block{display:block;margin-left:auto;margin-right:auto}.pull-right{float:right!important}.pull-left{float:left!important}.hide{display:none!important}.show{display:block!important}.invisible{visibility:hidden}.text-hide{font:0/0 a;color:transparent;text-shadow:none;background-color:transparent;border:0}.hidden{display:none!important}.affix{position:fixed}#intro{height:300px;background-color:#191919;color:#fff;position:relative;padding-left:50px;padding-right:50px}#intro .intro-message{background-color:rgba(3,3,3,.4);position:absolute;top:0;left:0;right:0;bottom:0;padding:20px 40px}#intro .intro-message strong{font-size:1.5em;text-transform:uppercase}#intro .btn{margin-top:16px}@media (max-width:991px){#intro{background:url(../img/intro-906x600.jpg) center center no-repeat #191919}}@media (min-width:768px){#intro{height:480px}#intro .container{position:relative}#intro .intro-message{right:20%;bottom:auto}#intro .intro-message strong{display:block}}@media (min-width:992px){#intro{height:540px;background:url(../img/intro-1600x1060.jpg) center center no-repeat #191919;-webkit-background-size:cover;-moz-background-size:cover;-o-background-size:cover;background-size:cover}#intro .intro-message{right:50%}}.index-contents{padding-top:20px;padding-bottom:40px}.index-contents .summary{text-indent:2em}@media (max-width:767px){.index-contents [class^=col]{clear:both;padding-bottom:40px}}.post{font-size:120%;background-color:#FCFCFC}@media (min-width:991px){.post{margin:1cm 0 2cm}}.post .post-header{text-align:center;margin-bottom:15px}.post>from>a,.post>time{float:right;color:#A3A3A3}.post>hr{height:1px;border:none;border-top:1px dashed #555}@media (min-width:768px){.post-list{margin:1cm 0 2cm}}@media (max-width:991px){.post-list{margin:.5cm 0 2cm}}footer{padding-top:24px;padding-bottom:24px;font-size:13px;background-color:lighter(#d1eeee,18%);color:lighter(#d1eeee,18%)}footer a{color:#9d9d9d}footer a:active,footer a:focus,footer a:hover{color:#4876ff}footer h3{font-size:120%;margin-bottom:4px}footer ul{list-style:none;padding:0;margin:0}footer ul>li>ul{padding-left:17px}footer li{padding-top:7px}footer .footer-brand{text-align:center}.about{text-indent:2em} \ No newline at end of file diff --git a/A1014280203/24/templates/index.html b/A1014280203/24/templates/index.html new file mode 100644 index 00000000..625d8b1b --- /dev/null +++ b/A1014280203/24/templates/index.html @@ -0,0 +1,38 @@ + + + + Todo-List + + + +

Add New Item

+
+ +
+
+

Write Down Here!

+ + +
+ +
+
+
+
+
+
+

There are totaly {{ nums }} items to do!

+
+{% for item in items %} +
+
+ {{ item.postName }} +    created at + +
{{ item.content }}
+
+
+{% endfor %} +
+ + \ No newline at end of file diff --git a/A1014280203/25/25.py b/A1014280203/25/25.py new file mode 100644 index 00000000..f79e9b21 --- /dev/null +++ b/A1014280203/25/25.py @@ -0,0 +1,95 @@ +# make with baudi SDK +import requests +import pyaudio +import wave +import base64 +import json +import win32api + +CHUNK = 1024 +FORMAT = pyaudio.paInt16 +CHANNELS = 1 +RATE = 8000 +RECORD_SECONDS = 3 +WAVE_OUTPUT_FILENAME = "out.wav" + + +def make_audio(): + p = pyaudio.PyAudio() + stream = p.open(format=FORMAT, + channels=CHANNELS, + rate=RATE, + input=True, + frames_per_buffer=CHUNK) + print('*recording') + frames = [] + for i in range(0, int(RATE / CHUNK * RECORD_SECONDS)): + data = stream.read(CHUNK) + frames.append(data) + print('*done recording') + stream.stop_stream() + stream.close() + wf = wave.open(WAVE_OUTPUT_FILENAME, 'wb') + wf.setnchannels(CHANNELS) + wf.setsampwidth(p.get_sample_size(FORMAT)) + wf.setframerate(RATE) + wf.writeframes(b''.join(frames)) + wf.close() + + +CC_URL = "https://openapi.baidu.com/oauth/2.0/token?" \ + "grant_type=client_credentials&" \ + "client_id=&" \ + "client_secret=&" + +TOKEN = "" +API = 'http://vop.baidu.com/server_api' + + +def get_token(): + resp = requests.post(CC_URL) + print(resp.json()) + + +def speech_to_text(): + with open(WAVE_OUTPUT_FILENAME, 'rb') as file: + data = file.read() + params = { + "format": 'wav', + "rate": RATE, + "channel": CHANNELS, + "token": TOKEN, + "cuid": "", + "len": len(data), + "speech": base64.b64encode(data).decode(), + } + + headers = { + 'Content-Type': 'application/json;', + } + resp = requests.post(url=API, data=json.dumps(params), headers=headers) + # print(resp.json()) + return resp.json()['result'] + + +def make_action(texts): + maps = { + '百度': 'http://www.baidu.com', + '网易': 'http://www.163.com' + } + target = '' + for text in texts: + if text.find('百度') != -1: + target = '百度' + elif text.find('网易') != -1: + target = '网易' + if target: + win32api.ShellExecute(0, 'open', maps[target], '', '', 1) + else: + print('Match failed:', texts) + + +if __name__ == '__main__': + make_audio() + texts = speech_to_text() + make_action(texts) \ No newline at end of file diff --git a/A1014280203/25/out.wav b/A1014280203/25/out.wav new file mode 100644 index 00000000..04d3773a Binary files /dev/null and b/A1014280203/25/out.wav differ diff --git a/A1014280203/3/3.py b/A1014280203/3/3.py new file mode 100644 index 00000000..5b44d4bc --- /dev/null +++ b/A1014280203/3/3.py @@ -0,0 +1,23 @@ +import redis +import base64 +import re + + +def make_connect(): + r = redis.Redis(host='', port=) + return r + + +def parse_coupon(c_code): + return base64.urlsafe_b64decode(c_code.encode('utf-8')) + + +def upload_to_database(): + session = make_connect() + with open('coupon.txt', 'r') as file: + for line in file.readlines(): + c_id = re.findall(r'.*/.*:(.*)\'', str(parse_coupon(line))) + session.set(c_id.pop(), line.strip()) + +if __name__ == '__main__': + upload_to_database() diff --git a/A1014280203/3/coupon.txt b/A1014280203/3/coupon.txt new file mode 100644 index 00000000..381860ab --- /dev/null +++ b/A1014280203/3/coupon.txt @@ -0,0 +1,400 @@ +Z29vZHM6NTAwL2lkOjEwMDA= +Z29vZHM6NTAwL2lkOjEwMDE= +Z29vZHM6NTAxL2lkOjEwMDI= +Z29vZHM6NTAxL2lkOjEwMDM= +Z29vZHM6NTAyL2lkOjEwMDQ= +Z29vZHM6NTAyL2lkOjEwMDU= +Z29vZHM6NTAzL2lkOjEwMDY= +Z29vZHM6NTAzL2lkOjEwMDc= +Z29vZHM6NTA0L2lkOjEwMDg= +Z29vZHM6NTA0L2lkOjEwMDk= +Z29vZHM6NTA1L2lkOjEwMTA= +Z29vZHM6NTA1L2lkOjEwMTE= +Z29vZHM6NTA2L2lkOjEwMTI= +Z29vZHM6NTA2L2lkOjEwMTM= +Z29vZHM6NTA3L2lkOjEwMTQ= +Z29vZHM6NTA3L2lkOjEwMTU= +Z29vZHM6NTA4L2lkOjEwMTY= +Z29vZHM6NTA4L2lkOjEwMTc= +Z29vZHM6NTA5L2lkOjEwMTg= +Z29vZHM6NTA5L2lkOjEwMTk= +Z29vZHM6NTEwL2lkOjEwMjA= +Z29vZHM6NTEwL2lkOjEwMjE= +Z29vZHM6NTExL2lkOjEwMjI= +Z29vZHM6NTExL2lkOjEwMjM= +Z29vZHM6NTEyL2lkOjEwMjQ= +Z29vZHM6NTEyL2lkOjEwMjU= +Z29vZHM6NTEzL2lkOjEwMjY= +Z29vZHM6NTEzL2lkOjEwMjc= +Z29vZHM6NTE0L2lkOjEwMjg= +Z29vZHM6NTE0L2lkOjEwMjk= +Z29vZHM6NTE1L2lkOjEwMzA= +Z29vZHM6NTE1L2lkOjEwMzE= +Z29vZHM6NTE2L2lkOjEwMzI= +Z29vZHM6NTE2L2lkOjEwMzM= +Z29vZHM6NTE3L2lkOjEwMzQ= +Z29vZHM6NTE3L2lkOjEwMzU= +Z29vZHM6NTE4L2lkOjEwMzY= +Z29vZHM6NTE4L2lkOjEwMzc= +Z29vZHM6NTE5L2lkOjEwMzg= +Z29vZHM6NTE5L2lkOjEwMzk= +Z29vZHM6NTIwL2lkOjEwNDA= +Z29vZHM6NTIwL2lkOjEwNDE= +Z29vZHM6NTIxL2lkOjEwNDI= +Z29vZHM6NTIxL2lkOjEwNDM= +Z29vZHM6NTIyL2lkOjEwNDQ= +Z29vZHM6NTIyL2lkOjEwNDU= +Z29vZHM6NTIzL2lkOjEwNDY= +Z29vZHM6NTIzL2lkOjEwNDc= +Z29vZHM6NTI0L2lkOjEwNDg= +Z29vZHM6NTI0L2lkOjEwNDk= +Z29vZHM6NTI1L2lkOjEwNTA= +Z29vZHM6NTI1L2lkOjEwNTE= +Z29vZHM6NTI2L2lkOjEwNTI= +Z29vZHM6NTI2L2lkOjEwNTM= +Z29vZHM6NTI3L2lkOjEwNTQ= +Z29vZHM6NTI3L2lkOjEwNTU= +Z29vZHM6NTI4L2lkOjEwNTY= +Z29vZHM6NTI4L2lkOjEwNTc= +Z29vZHM6NTI5L2lkOjEwNTg= +Z29vZHM6NTI5L2lkOjEwNTk= +Z29vZHM6NTMwL2lkOjEwNjA= +Z29vZHM6NTMwL2lkOjEwNjE= +Z29vZHM6NTMxL2lkOjEwNjI= +Z29vZHM6NTMxL2lkOjEwNjM= +Z29vZHM6NTMyL2lkOjEwNjQ= +Z29vZHM6NTMyL2lkOjEwNjU= +Z29vZHM6NTMzL2lkOjEwNjY= +Z29vZHM6NTMzL2lkOjEwNjc= +Z29vZHM6NTM0L2lkOjEwNjg= +Z29vZHM6NTM0L2lkOjEwNjk= +Z29vZHM6NTM1L2lkOjEwNzA= +Z29vZHM6NTM1L2lkOjEwNzE= +Z29vZHM6NTM2L2lkOjEwNzI= +Z29vZHM6NTM2L2lkOjEwNzM= +Z29vZHM6NTM3L2lkOjEwNzQ= +Z29vZHM6NTM3L2lkOjEwNzU= +Z29vZHM6NTM4L2lkOjEwNzY= +Z29vZHM6NTM4L2lkOjEwNzc= +Z29vZHM6NTM5L2lkOjEwNzg= +Z29vZHM6NTM5L2lkOjEwNzk= +Z29vZHM6NTQwL2lkOjEwODA= +Z29vZHM6NTQwL2lkOjEwODE= +Z29vZHM6NTQxL2lkOjEwODI= +Z29vZHM6NTQxL2lkOjEwODM= +Z29vZHM6NTQyL2lkOjEwODQ= +Z29vZHM6NTQyL2lkOjEwODU= +Z29vZHM6NTQzL2lkOjEwODY= +Z29vZHM6NTQzL2lkOjEwODc= +Z29vZHM6NTQ0L2lkOjEwODg= +Z29vZHM6NTQ0L2lkOjEwODk= +Z29vZHM6NTQ1L2lkOjEwOTA= +Z29vZHM6NTQ1L2lkOjEwOTE= +Z29vZHM6NTQ2L2lkOjEwOTI= +Z29vZHM6NTQ2L2lkOjEwOTM= +Z29vZHM6NTQ3L2lkOjEwOTQ= +Z29vZHM6NTQ3L2lkOjEwOTU= +Z29vZHM6NTQ4L2lkOjEwOTY= +Z29vZHM6NTQ4L2lkOjEwOTc= +Z29vZHM6NTQ5L2lkOjEwOTg= +Z29vZHM6NTQ5L2lkOjEwOTk= +Z29vZHM6NTUwL2lkOjExMDA= +Z29vZHM6NTUwL2lkOjExMDE= +Z29vZHM6NTUxL2lkOjExMDI= +Z29vZHM6NTUxL2lkOjExMDM= +Z29vZHM6NTUyL2lkOjExMDQ= +Z29vZHM6NTUyL2lkOjExMDU= +Z29vZHM6NTUzL2lkOjExMDY= +Z29vZHM6NTUzL2lkOjExMDc= +Z29vZHM6NTU0L2lkOjExMDg= +Z29vZHM6NTU0L2lkOjExMDk= +Z29vZHM6NTU1L2lkOjExMTA= +Z29vZHM6NTU1L2lkOjExMTE= +Z29vZHM6NTU2L2lkOjExMTI= +Z29vZHM6NTU2L2lkOjExMTM= +Z29vZHM6NTU3L2lkOjExMTQ= +Z29vZHM6NTU3L2lkOjExMTU= +Z29vZHM6NTU4L2lkOjExMTY= +Z29vZHM6NTU4L2lkOjExMTc= +Z29vZHM6NTU5L2lkOjExMTg= +Z29vZHM6NTU5L2lkOjExMTk= +Z29vZHM6NTYwL2lkOjExMjA= +Z29vZHM6NTYwL2lkOjExMjE= +Z29vZHM6NTYxL2lkOjExMjI= +Z29vZHM6NTYxL2lkOjExMjM= +Z29vZHM6NTYyL2lkOjExMjQ= +Z29vZHM6NTYyL2lkOjExMjU= +Z29vZHM6NTYzL2lkOjExMjY= +Z29vZHM6NTYzL2lkOjExMjc= +Z29vZHM6NTY0L2lkOjExMjg= +Z29vZHM6NTY0L2lkOjExMjk= +Z29vZHM6NTY1L2lkOjExMzA= +Z29vZHM6NTY1L2lkOjExMzE= +Z29vZHM6NTY2L2lkOjExMzI= +Z29vZHM6NTY2L2lkOjExMzM= +Z29vZHM6NTY3L2lkOjExMzQ= +Z29vZHM6NTY3L2lkOjExMzU= +Z29vZHM6NTY4L2lkOjExMzY= +Z29vZHM6NTY4L2lkOjExMzc= +Z29vZHM6NTY5L2lkOjExMzg= +Z29vZHM6NTY5L2lkOjExMzk= +Z29vZHM6NTcwL2lkOjExNDA= +Z29vZHM6NTcwL2lkOjExNDE= +Z29vZHM6NTcxL2lkOjExNDI= +Z29vZHM6NTcxL2lkOjExNDM= +Z29vZHM6NTcyL2lkOjExNDQ= +Z29vZHM6NTcyL2lkOjExNDU= +Z29vZHM6NTczL2lkOjExNDY= +Z29vZHM6NTczL2lkOjExNDc= +Z29vZHM6NTc0L2lkOjExNDg= +Z29vZHM6NTc0L2lkOjExNDk= +Z29vZHM6NTc1L2lkOjExNTA= +Z29vZHM6NTc1L2lkOjExNTE= +Z29vZHM6NTc2L2lkOjExNTI= +Z29vZHM6NTc2L2lkOjExNTM= +Z29vZHM6NTc3L2lkOjExNTQ= +Z29vZHM6NTc3L2lkOjExNTU= +Z29vZHM6NTc4L2lkOjExNTY= +Z29vZHM6NTc4L2lkOjExNTc= +Z29vZHM6NTc5L2lkOjExNTg= +Z29vZHM6NTc5L2lkOjExNTk= +Z29vZHM6NTgwL2lkOjExNjA= +Z29vZHM6NTgwL2lkOjExNjE= +Z29vZHM6NTgxL2lkOjExNjI= +Z29vZHM6NTgxL2lkOjExNjM= +Z29vZHM6NTgyL2lkOjExNjQ= +Z29vZHM6NTgyL2lkOjExNjU= +Z29vZHM6NTgzL2lkOjExNjY= +Z29vZHM6NTgzL2lkOjExNjc= +Z29vZHM6NTg0L2lkOjExNjg= +Z29vZHM6NTg0L2lkOjExNjk= +Z29vZHM6NTg1L2lkOjExNzA= +Z29vZHM6NTg1L2lkOjExNzE= +Z29vZHM6NTg2L2lkOjExNzI= +Z29vZHM6NTg2L2lkOjExNzM= +Z29vZHM6NTg3L2lkOjExNzQ= +Z29vZHM6NTg3L2lkOjExNzU= +Z29vZHM6NTg4L2lkOjExNzY= +Z29vZHM6NTg4L2lkOjExNzc= +Z29vZHM6NTg5L2lkOjExNzg= +Z29vZHM6NTg5L2lkOjExNzk= +Z29vZHM6NTkwL2lkOjExODA= +Z29vZHM6NTkwL2lkOjExODE= +Z29vZHM6NTkxL2lkOjExODI= +Z29vZHM6NTkxL2lkOjExODM= +Z29vZHM6NTkyL2lkOjExODQ= +Z29vZHM6NTkyL2lkOjExODU= +Z29vZHM6NTkzL2lkOjExODY= +Z29vZHM6NTkzL2lkOjExODc= +Z29vZHM6NTk0L2lkOjExODg= +Z29vZHM6NTk0L2lkOjExODk= +Z29vZHM6NTk1L2lkOjExOTA= +Z29vZHM6NTk1L2lkOjExOTE= +Z29vZHM6NTk2L2lkOjExOTI= +Z29vZHM6NTk2L2lkOjExOTM= +Z29vZHM6NTk3L2lkOjExOTQ= +Z29vZHM6NTk3L2lkOjExOTU= +Z29vZHM6NTk4L2lkOjExOTY= +Z29vZHM6NTk4L2lkOjExOTc= +Z29vZHM6NTk5L2lkOjExOTg= +Z29vZHM6NTk5L2lkOjExOTk= +Z29vZHM6NTAwL2lkOjEwMDA= +Z29vZHM6NTAwL2lkOjEwMDE= +Z29vZHM6NTAxL2lkOjEwMDI= +Z29vZHM6NTAxL2lkOjEwMDM= +Z29vZHM6NTAyL2lkOjEwMDQ= +Z29vZHM6NTAyL2lkOjEwMDU= +Z29vZHM6NTAzL2lkOjEwMDY= +Z29vZHM6NTAzL2lkOjEwMDc= +Z29vZHM6NTA0L2lkOjEwMDg= +Z29vZHM6NTA0L2lkOjEwMDk= +Z29vZHM6NTA1L2lkOjEwMTA= +Z29vZHM6NTA1L2lkOjEwMTE= +Z29vZHM6NTA2L2lkOjEwMTI= +Z29vZHM6NTA2L2lkOjEwMTM= +Z29vZHM6NTA3L2lkOjEwMTQ= +Z29vZHM6NTA3L2lkOjEwMTU= +Z29vZHM6NTA4L2lkOjEwMTY= +Z29vZHM6NTA4L2lkOjEwMTc= +Z29vZHM6NTA5L2lkOjEwMTg= +Z29vZHM6NTA5L2lkOjEwMTk= +Z29vZHM6NTEwL2lkOjEwMjA= +Z29vZHM6NTEwL2lkOjEwMjE= +Z29vZHM6NTExL2lkOjEwMjI= +Z29vZHM6NTExL2lkOjEwMjM= +Z29vZHM6NTEyL2lkOjEwMjQ= +Z29vZHM6NTEyL2lkOjEwMjU= +Z29vZHM6NTEzL2lkOjEwMjY= +Z29vZHM6NTEzL2lkOjEwMjc= +Z29vZHM6NTE0L2lkOjEwMjg= +Z29vZHM6NTE0L2lkOjEwMjk= +Z29vZHM6NTE1L2lkOjEwMzA= +Z29vZHM6NTE1L2lkOjEwMzE= +Z29vZHM6NTE2L2lkOjEwMzI= +Z29vZHM6NTE2L2lkOjEwMzM= +Z29vZHM6NTE3L2lkOjEwMzQ= +Z29vZHM6NTE3L2lkOjEwMzU= +Z29vZHM6NTE4L2lkOjEwMzY= +Z29vZHM6NTE4L2lkOjEwMzc= +Z29vZHM6NTE5L2lkOjEwMzg= +Z29vZHM6NTE5L2lkOjEwMzk= +Z29vZHM6NTIwL2lkOjEwNDA= +Z29vZHM6NTIwL2lkOjEwNDE= +Z29vZHM6NTIxL2lkOjEwNDI= +Z29vZHM6NTIxL2lkOjEwNDM= +Z29vZHM6NTIyL2lkOjEwNDQ= +Z29vZHM6NTIyL2lkOjEwNDU= +Z29vZHM6NTIzL2lkOjEwNDY= +Z29vZHM6NTIzL2lkOjEwNDc= +Z29vZHM6NTI0L2lkOjEwNDg= +Z29vZHM6NTI0L2lkOjEwNDk= +Z29vZHM6NTI1L2lkOjEwNTA= +Z29vZHM6NTI1L2lkOjEwNTE= +Z29vZHM6NTI2L2lkOjEwNTI= +Z29vZHM6NTI2L2lkOjEwNTM= +Z29vZHM6NTI3L2lkOjEwNTQ= +Z29vZHM6NTI3L2lkOjEwNTU= +Z29vZHM6NTI4L2lkOjEwNTY= +Z29vZHM6NTI4L2lkOjEwNTc= +Z29vZHM6NTI5L2lkOjEwNTg= +Z29vZHM6NTI5L2lkOjEwNTk= +Z29vZHM6NTMwL2lkOjEwNjA= +Z29vZHM6NTMwL2lkOjEwNjE= +Z29vZHM6NTMxL2lkOjEwNjI= +Z29vZHM6NTMxL2lkOjEwNjM= +Z29vZHM6NTMyL2lkOjEwNjQ= +Z29vZHM6NTMyL2lkOjEwNjU= +Z29vZHM6NTMzL2lkOjEwNjY= +Z29vZHM6NTMzL2lkOjEwNjc= +Z29vZHM6NTM0L2lkOjEwNjg= +Z29vZHM6NTM0L2lkOjEwNjk= +Z29vZHM6NTM1L2lkOjEwNzA= +Z29vZHM6NTM1L2lkOjEwNzE= +Z29vZHM6NTM2L2lkOjEwNzI= +Z29vZHM6NTM2L2lkOjEwNzM= +Z29vZHM6NTM3L2lkOjEwNzQ= +Z29vZHM6NTM3L2lkOjEwNzU= +Z29vZHM6NTM4L2lkOjEwNzY= +Z29vZHM6NTM4L2lkOjEwNzc= +Z29vZHM6NTM5L2lkOjEwNzg= +Z29vZHM6NTM5L2lkOjEwNzk= +Z29vZHM6NTQwL2lkOjEwODA= +Z29vZHM6NTQwL2lkOjEwODE= +Z29vZHM6NTQxL2lkOjEwODI= +Z29vZHM6NTQxL2lkOjEwODM= +Z29vZHM6NTQyL2lkOjEwODQ= +Z29vZHM6NTQyL2lkOjEwODU= +Z29vZHM6NTQzL2lkOjEwODY= +Z29vZHM6NTQzL2lkOjEwODc= +Z29vZHM6NTQ0L2lkOjEwODg= +Z29vZHM6NTQ0L2lkOjEwODk= +Z29vZHM6NTQ1L2lkOjEwOTA= +Z29vZHM6NTQ1L2lkOjEwOTE= +Z29vZHM6NTQ2L2lkOjEwOTI= +Z29vZHM6NTQ2L2lkOjEwOTM= +Z29vZHM6NTQ3L2lkOjEwOTQ= +Z29vZHM6NTQ3L2lkOjEwOTU= +Z29vZHM6NTQ4L2lkOjEwOTY= +Z29vZHM6NTQ4L2lkOjEwOTc= +Z29vZHM6NTQ5L2lkOjEwOTg= +Z29vZHM6NTQ5L2lkOjEwOTk= +Z29vZHM6NTUwL2lkOjExMDA= +Z29vZHM6NTUwL2lkOjExMDE= +Z29vZHM6NTUxL2lkOjExMDI= +Z29vZHM6NTUxL2lkOjExMDM= +Z29vZHM6NTUyL2lkOjExMDQ= +Z29vZHM6NTUyL2lkOjExMDU= +Z29vZHM6NTUzL2lkOjExMDY= +Z29vZHM6NTUzL2lkOjExMDc= +Z29vZHM6NTU0L2lkOjExMDg= +Z29vZHM6NTU0L2lkOjExMDk= +Z29vZHM6NTU1L2lkOjExMTA= +Z29vZHM6NTU1L2lkOjExMTE= +Z29vZHM6NTU2L2lkOjExMTI= +Z29vZHM6NTU2L2lkOjExMTM= +Z29vZHM6NTU3L2lkOjExMTQ= +Z29vZHM6NTU3L2lkOjExMTU= +Z29vZHM6NTU4L2lkOjExMTY= +Z29vZHM6NTU4L2lkOjExMTc= +Z29vZHM6NTU5L2lkOjExMTg= +Z29vZHM6NTU5L2lkOjExMTk= +Z29vZHM6NTYwL2lkOjExMjA= +Z29vZHM6NTYwL2lkOjExMjE= +Z29vZHM6NTYxL2lkOjExMjI= +Z29vZHM6NTYxL2lkOjExMjM= +Z29vZHM6NTYyL2lkOjExMjQ= +Z29vZHM6NTYyL2lkOjExMjU= +Z29vZHM6NTYzL2lkOjExMjY= +Z29vZHM6NTYzL2lkOjExMjc= +Z29vZHM6NTY0L2lkOjExMjg= +Z29vZHM6NTY0L2lkOjExMjk= +Z29vZHM6NTY1L2lkOjExMzA= +Z29vZHM6NTY1L2lkOjExMzE= +Z29vZHM6NTY2L2lkOjExMzI= +Z29vZHM6NTY2L2lkOjExMzM= +Z29vZHM6NTY3L2lkOjExMzQ= +Z29vZHM6NTY3L2lkOjExMzU= +Z29vZHM6NTY4L2lkOjExMzY= +Z29vZHM6NTY4L2lkOjExMzc= +Z29vZHM6NTY5L2lkOjExMzg= +Z29vZHM6NTY5L2lkOjExMzk= +Z29vZHM6NTcwL2lkOjExNDA= +Z29vZHM6NTcwL2lkOjExNDE= +Z29vZHM6NTcxL2lkOjExNDI= +Z29vZHM6NTcxL2lkOjExNDM= +Z29vZHM6NTcyL2lkOjExNDQ= +Z29vZHM6NTcyL2lkOjExNDU= +Z29vZHM6NTczL2lkOjExNDY= +Z29vZHM6NTczL2lkOjExNDc= +Z29vZHM6NTc0L2lkOjExNDg= +Z29vZHM6NTc0L2lkOjExNDk= +Z29vZHM6NTc1L2lkOjExNTA= +Z29vZHM6NTc1L2lkOjExNTE= +Z29vZHM6NTc2L2lkOjExNTI= +Z29vZHM6NTc2L2lkOjExNTM= +Z29vZHM6NTc3L2lkOjExNTQ= +Z29vZHM6NTc3L2lkOjExNTU= +Z29vZHM6NTc4L2lkOjExNTY= +Z29vZHM6NTc4L2lkOjExNTc= +Z29vZHM6NTc5L2lkOjExNTg= +Z29vZHM6NTc5L2lkOjExNTk= +Z29vZHM6NTgwL2lkOjExNjA= +Z29vZHM6NTgwL2lkOjExNjE= +Z29vZHM6NTgxL2lkOjExNjI= +Z29vZHM6NTgxL2lkOjExNjM= +Z29vZHM6NTgyL2lkOjExNjQ= +Z29vZHM6NTgyL2lkOjExNjU= +Z29vZHM6NTgzL2lkOjExNjY= +Z29vZHM6NTgzL2lkOjExNjc= +Z29vZHM6NTg0L2lkOjExNjg= +Z29vZHM6NTg0L2lkOjExNjk= +Z29vZHM6NTg1L2lkOjExNzA= +Z29vZHM6NTg1L2lkOjExNzE= +Z29vZHM6NTg2L2lkOjExNzI= +Z29vZHM6NTg2L2lkOjExNzM= +Z29vZHM6NTg3L2lkOjExNzQ= +Z29vZHM6NTg3L2lkOjExNzU= +Z29vZHM6NTg4L2lkOjExNzY= +Z29vZHM6NTg4L2lkOjExNzc= +Z29vZHM6NTg5L2lkOjExNzg= +Z29vZHM6NTg5L2lkOjExNzk= +Z29vZHM6NTkwL2lkOjExODA= +Z29vZHM6NTkwL2lkOjExODE= +Z29vZHM6NTkxL2lkOjExODI= +Z29vZHM6NTkxL2lkOjExODM= +Z29vZHM6NTkyL2lkOjExODQ= +Z29vZHM6NTkyL2lkOjExODU= +Z29vZHM6NTkzL2lkOjExODY= +Z29vZHM6NTkzL2lkOjExODc= +Z29vZHM6NTk0L2lkOjExODg= +Z29vZHM6NTk0L2lkOjExODk= +Z29vZHM6NTk1L2lkOjExOTA= +Z29vZHM6NTk1L2lkOjExOTE= +Z29vZHM6NTk2L2lkOjExOTI= +Z29vZHM6NTk2L2lkOjExOTM= +Z29vZHM6NTk3L2lkOjExOTQ= +Z29vZHM6NTk3L2lkOjExOTU= +Z29vZHM6NTk4L2lkOjExOTY= +Z29vZHM6NTk4L2lkOjExOTc= +Z29vZHM6NTk5L2lkOjExOTg= +Z29vZHM6NTk5L2lkOjExOTk= diff --git a/A1014280203/4/4.py b/A1014280203/4/4.py new file mode 100644 index 00000000..1c44ca6a --- /dev/null +++ b/A1014280203/4/4.py @@ -0,0 +1,57 @@ +import string + + +# simply extend word like: it's => it is +def extend_word(text): + if text.find('\'') > 0: + old2new = dict() + words = text.split() + for word in words: + if word.find('\'') > 0: + parts = word.split('\'') + if parts[1] == 'm': + parts[1] = 'am' + elif parts[1] == 's': + parts[1] = 'is' + elif parts[1] == 're': + parts[1] = 'are' + elif parts[1] == 't': + parts[1] = 'not' + elif parts[1] == 've': + parts[1] = 'have' + elif parts[1] == 'll': + parts[1] = 'will' + elif parts[1] == 'd': + if words[words.index(word) + 1] == 'better': + parts[1] = 'had' + else: + parts[1] = 'would' + if parts[0].endswith('n'): + parts[0] = parts[0][:-1] + old2new[word] = ' '.join(parts) + _text = text + for old_word in old2new.keys(): + _text = _text.replace(old_word, old2new[old_word]) + return _text + + +def return_order_key(record): + return record[1] + + +def show_in_order(records): + items = sorted(records.items(), key=return_order_key, reverse=True) + for item in items: + print(item[0], item[1]) + +with open('subtitle.txt', 'r') as file: + article = file.read() + no_pun_text = article + _punctuation = string.punctuation.replace('\'', '') + for pun in _punctuation: + no_pun_text = no_pun_text.replace(pun, '') + complete_text = extend_word(no_pun_text) + records = dict() + for word in complete_text.lower().split(): + records[word] = records.get(word, 0) + 1 + show_in_order(records) diff --git a/A1014280203/4/subtitle.txt b/A1014280203/4/subtitle.txt new file mode 100644 index 00000000..3e648700 --- /dev/null +++ b/A1014280203/4/subtitle.txt @@ -0,0 +1,62 @@ +Make sure you know what +you're supposed to be doing. Okay, that sounds obvious and easy, right? This is not always true. If you are new to your job, you might not +have a feel for your responsibilities. If you have not done a certain +type of work before, you might not know how long +something is going to take. That's completely normal. So how do you know? Ask. Review your job responsibilities, +ask someone who is in the same roll or who has previously done this job, keep good +notes, keep track of how long something takes you so that you have a solid +estimate and you can use that next time. Remember, it also helps to take big +tasks and break them into smaller steps. Remember that research Sam was +starting for the sales reports? He might take that research and divide it +into steps, that way he can keep track of each step and he'll know what is +involved in completing that research. How do you know what your priorities are? Depending on the type of work you do, +your priorities come to you from your leadership or perhaps from a customer +who is, you're supporting. It's important to really understand +the priorities you're expected to support. So in your sample work plan, you're going +to have something, perhaps the priority, the description of what you're doing, +the due date, who you're doing it for, the steps, an estimate of how long +it's going to take, and a start date. And those are some good fields for +you to start out with. And you can create a table, +a spread sheet, and begin to work with this and see if this +helps you in completing your work. You might not really know how +long something is going to take. That's okay. So how do you know? Ask. Review your job responsibilities +with your supervisor, ask someone who's in the same role, +or who has previously done the job. Keep good notes when you do something, +keep notes, keep track of how long it takes you, and then you have something to refer back +to for a good estimate next time. Remember, it also helps to take big +tasks and break them into smaller steps. Remember when Sam was +working on that research, he started that research +with those sales reports? He might take that research and +divide it into steps, and that way he can keep track of +how long each step will take, and he's gonna know what is involved +in completing that research. How do you know what your priorities are? Well, depending on the type of work you +do, sometimes your priorities are gonna come to you from your leadership or +from a customer you support. It's important to really understand the +priorities you are expected to support. In our example with Sam, +it became more important for him to complete his status report +first and then his other report later. What if your boss can not or +will not tell you? You know sometimes the person you work for +wants to see you figure it out for yourself. Sometimes the person you work for doesn't +really know what the true priorities are. And if this is true, you're gonna +have to figure it out for yourself. Pay attention to what is discussed the +most in meetings and in announcements and in other communications. Pay attention to where your successful +colleagues are spending their time. There are clues around you waiting for +you to uncover them. Before you go, +I would like to share with you a story. I once had a co-worker who had +an important meeting after lunch and the meeting was with an executive. She was gonna facilitate the meeting and +give a presentation. During lunch, she remembered that she forgotten +to pick something up at the store. The item she forgot was something +her family needed that evening. Immediately, she ran out of the office to +the store and purchased the missing item. In doing so, +she was late to her own meeting and to make matters worse, +she explained why she was late. Her manager looked at her and said, if I had known you were gonna go do +that, I would've gone to the store for you so you could have been here +on time and been prepared. That's what we call +a career limiting moment. It was all because she forgot her plan, +she forgot her priorities, and she forgot the difference between something +that was urgent versus important. It may have been important that she bring +home that item that evening to her family, but it wasn't urgent. She could've picked it up +on the way home from work. What was both urgent and important +was being prepared for that meeting. Now, before we move to the next module, +why don't you consider taking a shot at creating your own plan that covers +at least the next five business days. \ No newline at end of file diff --git a/A1014280203/5/143093073884786_0.jpg b/A1014280203/5/143093073884786_0.jpg new file mode 100644 index 00000000..9650e9e7 Binary files /dev/null and b/A1014280203/5/143093073884786_0.jpg differ diff --git a/A1014280203/5/1F524114F4-4.jpg b/A1014280203/5/1F524114F4-4.jpg new file mode 100644 index 00000000..85d9e953 Binary files /dev/null and b/A1014280203/5/1F524114F4-4.jpg differ diff --git a/A1014280203/5/20140827173557_XRP2h.jpeg b/A1014280203/5/20140827173557_XRP2h.jpeg new file mode 100644 index 00000000..91380818 Binary files /dev/null and b/A1014280203/5/20140827173557_XRP2h.jpeg differ diff --git a/A1014280203/5/5.py b/A1014280203/5/5.py new file mode 100644 index 00000000..2aaa8e9a --- /dev/null +++ b/A1014280203/5/5.py @@ -0,0 +1,30 @@ +# iphone5 1136*640 +import os +from PIL import Image + +ext = ['jpg', 'jpeg', 'png'] +files = os.listdir('.') + + +def process_image(filename, mwidth=640, mheight=1136): + image = Image.open(filename) + w, h = image.size + if w <= mwidth and h <= mheight: + print(filename, 'is OK.') + return + if 1.0*w/mwidth > 1.0*h/mheight: + scale = 1.0*w/mwidth + new_im = image.resize((int(w/scale), int(h/scale)), Image.ANTIALIAS) + else: + scale = 1.0*h/mheight + new_im = image.resize((int(w/scale), int(h/scale)), Image.ANTIALIAS) + new_im.save('new-'+filename) + new_im.close() + + +for file in files: + if file.split('.')[-1] in ext: + process_image(file) + + + diff --git "a/A1014280203/5/635042966918036569_\345\211\257\346\234\254.jpg" "b/A1014280203/5/635042966918036569_\345\211\257\346\234\254.jpg" new file mode 100644 index 00000000..03097d43 Binary files /dev/null and "b/A1014280203/5/635042966918036569_\345\211\257\346\234\254.jpg" differ diff --git a/A1014280203/5/verykuan.png b/A1014280203/5/verykuan.png new file mode 100644 index 00000000..a267282c Binary files /dev/null and b/A1014280203/5/verykuan.png differ diff --git a/A1014280203/6/6.py b/A1014280203/6/6.py new file mode 100644 index 00000000..f9ac5ec0 --- /dev/null +++ b/A1014280203/6/6.py @@ -0,0 +1,85 @@ +import nltk +import string +import os + + +# simply extend word like: it's => it is +def extend_word(text): + if text.find('\'') > 0: + old2new = dict() + words = text.split() + for word in words: + if word.find('\'') > 0: + parts = word.split('\'') + if parts[1] == 'm': + parts[1] = 'am' + elif parts[1] == 's': + parts[1] = 'is' + elif parts[1] == 're': + parts[1] = 'are' + elif parts[1] == 't': + parts[1] = 'not' + elif parts[1] == 've': + parts[1] = 'have' + elif parts[1] == 'll': + parts[1] = 'will' + elif parts[1] == 'd': + if words[words.index(word) + 1] == 'better': + parts[1] = 'had' + else: + parts[1] = 'would' + if parts[0].endswith('n'): + parts[0] = parts[0][:-1] + old2new[word] = ' '.join(parts) + _text = text + for old_word in old2new.keys(): + _text = _text.replace(old_word, old2new[old_word]) + return _text + + +def return_order_key(record): + return record[1] + + +def show_important_word(records): + # only this function was changed + items = sorted(records.items(), key=return_order_key, reverse=True) + # frequency of word + freq = 0 + for item in items: + word, tag = nltk.pos_tag([item[0]])[0] + if tag.startswith('NN'): + print(word) + if item[1] < freq: + return + freq = item[1] + # no appropriate word found + if not freq: + print(items[0][0]) + + +def process_file(filename): + with open(filename, 'r') as file: + article = file.read() + no_pun_text = article + _punctuation = string.punctuation.replace('\'', '') + # delete punctuation except ''' + for pun in _punctuation: + no_pun_text = no_pun_text.replace(pun, '') + complete_text = extend_word(no_pun_text) + records = dict() + for word in complete_text.lower().split(): + records[word] = records.get(word, 0) + 1 + print('='*30) + print('current file:', filename) + print('-'*20) + show_important_word(records) + + +def process_files(path='.'): + files = os.listdir(path) + for file in files: + if file.endswith('.txt'): + process_file(os.path.join(path, file)) + +process_files() \ No newline at end of file diff --git a/A1014280203/6/subtitle.txt b/A1014280203/6/subtitle.txt new file mode 100644 index 00000000..3e648700 --- /dev/null +++ b/A1014280203/6/subtitle.txt @@ -0,0 +1,62 @@ +Make sure you know what +you're supposed to be doing. Okay, that sounds obvious and easy, right? This is not always true. If you are new to your job, you might not +have a feel for your responsibilities. If you have not done a certain +type of work before, you might not know how long +something is going to take. That's completely normal. So how do you know? Ask. Review your job responsibilities, +ask someone who is in the same roll or who has previously done this job, keep good +notes, keep track of how long something takes you so that you have a solid +estimate and you can use that next time. Remember, it also helps to take big +tasks and break them into smaller steps. Remember that research Sam was +starting for the sales reports? He might take that research and divide it +into steps, that way he can keep track of each step and he'll know what is +involved in completing that research. How do you know what your priorities are? Depending on the type of work you do, +your priorities come to you from your leadership or perhaps from a customer +who is, you're supporting. It's important to really understand +the priorities you're expected to support. So in your sample work plan, you're going +to have something, perhaps the priority, the description of what you're doing, +the due date, who you're doing it for, the steps, an estimate of how long +it's going to take, and a start date. And those are some good fields for +you to start out with. And you can create a table, +a spread sheet, and begin to work with this and see if this +helps you in completing your work. You might not really know how +long something is going to take. That's okay. So how do you know? Ask. Review your job responsibilities +with your supervisor, ask someone who's in the same role, +or who has previously done the job. Keep good notes when you do something, +keep notes, keep track of how long it takes you, and then you have something to refer back +to for a good estimate next time. Remember, it also helps to take big +tasks and break them into smaller steps. Remember when Sam was +working on that research, he started that research +with those sales reports? He might take that research and +divide it into steps, and that way he can keep track of +how long each step will take, and he's gonna know what is involved +in completing that research. How do you know what your priorities are? Well, depending on the type of work you +do, sometimes your priorities are gonna come to you from your leadership or +from a customer you support. It's important to really understand the +priorities you are expected to support. In our example with Sam, +it became more important for him to complete his status report +first and then his other report later. What if your boss can not or +will not tell you? You know sometimes the person you work for +wants to see you figure it out for yourself. Sometimes the person you work for doesn't +really know what the true priorities are. And if this is true, you're gonna +have to figure it out for yourself. Pay attention to what is discussed the +most in meetings and in announcements and in other communications. Pay attention to where your successful +colleagues are spending their time. There are clues around you waiting for +you to uncover them. Before you go, +I would like to share with you a story. I once had a co-worker who had +an important meeting after lunch and the meeting was with an executive. She was gonna facilitate the meeting and +give a presentation. During lunch, she remembered that she forgotten +to pick something up at the store. The item she forgot was something +her family needed that evening. Immediately, she ran out of the office to +the store and purchased the missing item. In doing so, +she was late to her own meeting and to make matters worse, +she explained why she was late. Her manager looked at her and said, if I had known you were gonna go do +that, I would've gone to the store for you so you could have been here +on time and been prepared. That's what we call +a career limiting moment. It was all because she forgot her plan, +she forgot her priorities, and she forgot the difference between something +that was urgent versus important. It may have been important that she bring +home that item that evening to her family, but it wasn't urgent. She could've picked it up +on the way home from work. What was both urgent and important +was being prepared for that meeting. Now, before we move to the next module, +why don't you consider taking a shot at creating your own plan that covers +at least the next five business days. \ No newline at end of file diff --git a/A1014280203/7/7.py b/A1014280203/7/7.py new file mode 100644 index 00000000..00e82fd8 --- /dev/null +++ b/A1014280203/7/7.py @@ -0,0 +1,51 @@ +import os + +code_lines = list() +notation_lines = list() +blank_lines = list() + + +def process_file(filename): + global code_lines + global notation_lines + global blank_lines + with open(filename, 'r') as file: + for line in file.readlines(): + _line = line.strip() + if not _line: + blank_lines.append(_line) + elif _line.startswith('#'): + notation_lines.append(_line) + else: + code_lines.append(_line) + + +def show_result(): + global code_lines + global notation_lines + global blank_lines + print('-'*20) + print('code:', len(code_lines)) + for line in code_lines: + print(line) + print('-' * 20) + print('notation:', len(notation_lines)) + for line in notation_lines: + print(line) + print('-' * 20) + print('blank:', len(blank_lines)) + code_lines.clear() + notation_lines.clear() + blank_lines.clear() + + +def process_files(path='../6'): + files = os.listdir(path) + for file in files: + if file.endswith('.py'): + print('='*30) + print('current file:', os.path.join(path, file)) + process_file(os.path.join(path, file)) + show_result() + +process_files() \ No newline at end of file diff --git a/A1014280203/8/8.py b/A1014280203/8/8.py new file mode 100644 index 00000000..d0209441 --- /dev/null +++ b/A1014280203/8/8.py @@ -0,0 +1 @@ +# 暂时写不出来普适的程序,先占个坑 diff --git "a/A1014280203/8/\345\215\240\345\235\221" "b/A1014280203/8/\345\215\240\345\235\221" new file mode 100644 index 00000000..e7abf6e1 --- /dev/null +++ "b/A1014280203/8/\345\215\240\345\235\221" @@ -0,0 +1 @@ +占坑 \ No newline at end of file diff --git a/A1014280203/9/9.py b/A1014280203/9/9.py new file mode 100644 index 00000000..23c82894 --- /dev/null +++ b/A1014280203/9/9.py @@ -0,0 +1,14 @@ +import requests +import pyquery + +url = 'https://github.com/A1014280203/show-me-the-code' +url_list = list() +resp = requests.get(url) +doc = pyquery.PyQuery(resp.content.decode()) +a_tags = doc.find('a') +for a in a_tags.items(): + if a.attr('href').startswith('http'): + url_list.append(a.attr('href')) + elif a.attr('href').startswith('/'): + url_list.append('https://github.com' + a.attr('href')) +print(url_list) \ No newline at end of file diff --git a/Huangyunbo1996/0001/GenerateActivationCode.py b/Huangyunbo1996/0001/GenerateActivationCode.py new file mode 100644 index 00000000..7e0169b1 --- /dev/null +++ b/Huangyunbo1996/0001/GenerateActivationCode.py @@ -0,0 +1,29 @@ +#-*- coding:utf-8 -*- +import uuid +from itertools import dropwhile + +def generateActivationCode(num): + codeList = [] + for i in range(num): + code = str(uuid.uuid4()).replace('-','').upper() + while code in codeList: + code = str(uuid.uuid4()).replace('-','').upper() + codeList.append(code) + + for code in codeList: + print(code) + +if __name__ == '__main__': + generateActivationCode(200) + +#output +# 4A5C6F8482544BA8B61F26945E8DA6CA +# 002751306CA34E798BE492379F14F09B +# AD2FD3F1C5CC4769AA3C9FF1D9247C77 +# BB9BB4D6B4AC490A800929B7ABA0CF48 +# 28F0A9E062964313B36556A6D4B62753 +# 1C5D17EF07FC484B8DADB15FAC0D9BB5 +# AC2146D68BA34199B75ACC727D2B017D +# 64866B2136C641DA956A3A52274DA3E0 +# F00DDD20295C4E2CBDC8E62A0C72AABC +#... \ No newline at end of file diff --git a/Huangyunbo1996/0002/ActivationCode_MySql.py b/Huangyunbo1996/0002/ActivationCode_MySql.py new file mode 100644 index 00000000..bcca6548 --- /dev/null +++ b/Huangyunbo1996/0002/ActivationCode_MySql.py @@ -0,0 +1,42 @@ +#-*- coding:utf-8 -*- +import uuid +import pymysql + +def generateActivationCode(num): + codeList = [] + for i in range(num): + code = str(uuid.uuid4()).replace('-','').upper() + while code in codeList: + code = str(uuid.uuid4()).replace('-','').upper() + codeList.append(code) + + return codeList + +def storeInMysql(codelist): + try: + conn = pymysql.connect(host='127.0.0.1',user='root',passwd='root',db='mysql') + cur = conn.cursor() + except BaseException as e: + print(e) + else: + try: + cur.execute('CREATE DATABASE IF NOT EXISTS activation_code') + cur.execute('USE activation_code') + cur.execute('''CREATE TABLE IF NOT EXISTS code( + + id INT NOT NULL AUTO_INCREMENT, + code VARCHAR(32) NOT NULL, + PRIMARY KEY(id) + )''') + for code in codelist: + cur.execute('INSERT INTO code(code) VALUES(%s)',(code)) + cur.connection.commit() + except BaseException as e: + print(e) + finally: + cur.close() + conn.close() + +if __name__ == '__main__': + storeInMysql(generateActivationCode(200)) + print('OK!') \ No newline at end of file diff --git a/Huangyunbo1996/0004/Word_Statistics.py b/Huangyunbo1996/0004/Word_Statistics.py new file mode 100644 index 00000000..bbd8c7ce --- /dev/null +++ b/Huangyunbo1996/0004/Word_Statistics.py @@ -0,0 +1,131 @@ +#-*-coding:utf-8-*- +import os +import re + +def word_statistics(filePath): + wordDict = {} + with open(filePath,'rt') as f: + for line in f: + words = re.split('[,.\s]\s*',line) + for word in words: + if word.lower() in wordDict and word.isalpha(): + wordDict[word.lower()] += 1 + elif word.lower() not in wordDict and word.isalpha(): + wordDict[word.lower()] = 1 + + wordSorted = sorted(zip(wordDict.keys(),wordDict.values())) + + for word,count in wordSorted: + print(word,':',count) + +if __name__ == '__main__': + word_statistics(r'...\test.txt') + +#output: +# a : 11 +# about : 1 +# access : 1 +# algorithm : 1 +# allowing : 3 +# allowingwith : 1 +# alone : 4 +# an : 2 +# and : 1 +# anything : 1 +# are : 1 +# as : 3 +# attribute : 1 +# attributes : 6 +# calling : 1 +# calls : 1 +# can : 6 +# case : 1 +# change : 1 +# class : 4 +# code : 5 +# complicated : 4 +# control : 1 +# creates : 1 +# defining : 1 +# definition : 1 +# do : 4 +# drive : 1 +# easily : 1 +# easy : 5 +# etc : 1 +# everything : 4 +# expose : 1 +# extra : 2 +# fact : 1 +# fall : 4 +# for : 6 +# forget : 1 +# function : 6 +# functions : 4 +# generator : 8 +# generators : 4 +# going : 1 +# history : 1 +# how : 1 +# however : 1 +# if : 7 +# implement : 1 +# in : 6 +# instance : 1 +# interact : 5 +# internal : 1 +# into : 4 +# is : 6 +# it : 9 +# iteration : 1 +# just : 1 +# lead : 4 +# like : 1 +# loop : 1 +# makes : 1 +# method : 5 +# methods : 1 +# might : 1 +# needs : 4 +# normal : 1 +# of : 10 +# one : 1 +# or : 1 +# other : 5 +# part : 1 +# parts : 4 +# potential : 1 +# program : 4 +# provide : 1 +# putting : 1 +# rather : 4 +# require : 1 +# shown : 2 +# since : 1 +# solution : 1 +# state : 1 +# step : 1 +# subtlety : 1 +# such : 1 +# technique : 1 +# than : 1 +# that : 3 +# the : 13 +# this : 6 +# to : 22 +# trap : 4 +# treat : 1 +# trying : 4 +# unusual : 4 +# use : 2 +# user : 1 +# users : 1 +# using : 1 +# via : 1 +# want : 1 +# ways : 4 +# with : 13 +# would : 1 +# write : 1 +# you : 7 +# your : 6 diff --git a/Huangyunbo1996/0007/lines.py b/Huangyunbo1996/0007/lines.py new file mode 100644 index 00000000..59ab876d --- /dev/null +++ b/Huangyunbo1996/0007/lines.py @@ -0,0 +1,38 @@ +#-*- coding:utf-8 -*- +import os + +codeLines = 0 +commentLines = 0 +blankLines = 0 + +def CountLines(countDir,ext,ignore): + + global codeLines + global commentLines + global blankLines + + for file in os.listdir(countDir): + if os.path.isdir(os.path.join(countDir,file)) and file != ignore: + CountLines(os.path.join(countDir,file),ext,ignore) + else: + if os.path.splitext(file)[1].strip('.') == ext: + print(file) + with open(os.path.join(countDir,file),'r',encoding='utf-8') as f: + for line in f: + if line.strip().startswith('#'): + commentLines = commentLines + 1 + elif line.strip() == '': + blankLines = blankLines + 1 + else: + codeLines = codeLines + 1 + + + + +if __name__ == '__main__': + countDir = input('文件夹路径:') + ext = input('文件类型:') + ignore = input('需要忽略的文件夹:') + + CountLines(countDir,ext,ignore) + print('代码行数:%d,注释行数:%d,空行数:%d'%(codeLines,commentLines,blankLines)) \ No newline at end of file diff --git a/Lyndon1994/0000.py b/Lyndon1994/0000.py new file mode 100644 index 00000000..85a40643 --- /dev/null +++ b/Lyndon1994/0000.py @@ -0,0 +1,17 @@ +# -*- coding: utf-8 -*- +# 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 +from PIL import Image, ImageFont, ImageDraw + + +def add_num(img): + im = Image.open(img) + w, h = im.size + font = ImageFont.truetype('/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-R.ttf', 30) + fillcolor = "#ff0000" + draw = ImageDraw.Draw(im) + draw.text((w - 20, 0), '1', font=font, fill=fillcolor) + im.save('r.jpg', 'jpeg') + + +if __name__ == '__main__': + add_num('1.jpg') diff --git a/Lyndon1994/0001.py b/Lyndon1994/0001.py new file mode 100644 index 00000000..0b18eb56 --- /dev/null +++ b/Lyndon1994/0001.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# 做为 Apple Store App 独立开发者,你要搞限时促销, +# 为你的应用生成激活码(或者优惠券), +# 使用 Python 如何生成 200 个激活码(或者优惠券) +import random +import string + +forSelect = string.ascii_letters + string.digits + + +def generate_code(count, length): + for x in range(count): + Re = "" + for y in range(length): + Re += random.choice(forSelect) + print(Re) + + +if __name__ == '__main__': + generate_code(200, 20) diff --git a/Lyndon1994/0002.py b/Lyndon1994/0002.py new file mode 100644 index 00000000..b1b5831d --- /dev/null +++ b/Lyndon1994/0002.py @@ -0,0 +1,32 @@ +# -*- coding: utf-8 -*- +# 第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。 +import mysql.connector + +import random +import string + +import mysql.connector + +forSelect = string.ascii_letters + string.digits + + +def generate_code(count, length): + for x in range(count): + Re = "" + for y in range(length): + Re += random.choice(forSelect) + yield Re + + +def save_code(): + conn = mysql.connector.connect(user='root', password='l', database='test') + cursor = conn.cursor() + codes = generate_code(200, 20) + for code in codes: + cursor.execute("INSERT INTO `code`(`code`) VALUES(%s)", params=[code]) + conn.commit() + cursor.close() + + +if __name__ == '__main__': + save_code() diff --git a/Lyndon1994/0003.py b/Lyndon1994/0003.py new file mode 100644 index 00000000..bb6f4480 --- /dev/null +++ b/Lyndon1994/0003.py @@ -0,0 +1,30 @@ +# -*- coding: utf-8 -*- +# **第 0003 题:**将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。 + +import redis +import random +import string + +forSelect = string.ascii_letters + string.digits + + +def generate_code(count, length): + for x in range(count): + Re = "" + for y in range(length): + Re += random.choice(forSelect) + yield Re + + +def save_code(): + r = redis.Redis(host='127.0.0.1', port='6379', password='linyii') + codes = generate_code(200, 20) + p = r.pipeline() + for code in codes: + p.sadd('code', code) + p.execute() + return r.scard('code') + + +if __name__ == '__main__': + save_code() diff --git a/Lyndon1994/0004.py b/Lyndon1994/0004.py new file mode 100644 index 00000000..ffcd6867 --- /dev/null +++ b/Lyndon1994/0004.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +# **第 0004 题:**任一个英文的纯文本文件,统计其中的单词出现的个数。 +import re + +fin = open('source/0004-text.txt', 'r') +str = fin.read() + +reObj = re.compile('\b?(\w+)\b?') +words = reObj.findall(str) + +wordDict = dict() + +for word in words: + if word.lower() in wordDict: + wordDict[word.lower()] += 1 + else: + wordDict[word] = 1 + +for key, value in wordDict.items(): + print('%s: %s' % (key, value)) diff --git a/Lyndon1994/0005.py b/Lyndon1994/0005.py new file mode 100644 index 00000000..0762f9fe --- /dev/null +++ b/Lyndon1994/0005.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" +**第 0005 题:** +你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。 +""" + +from PIL import Image +import os + +path = 'source/0005/pics' +resultPath = 'source/0005/result' +if not os.path.isdir(resultPath): + os.mkdir(resultPath) +for picName in os.listdir(path): + picPath = os.path.join(path, picName) + print(picPath) + with Image.open(picPath) as im: + w, h = im.size + n = w / 1366 if (w / 1366) >= (h / 640) else h / 640 + im.thumbnail((w / n, h / n)) + im.save(resultPath+'/finish_' + picName.split('.')[0] + '.jpg', 'jpeg') diff --git a/Lyndon1994/0006.py b/Lyndon1994/0006.py new file mode 100644 index 00000000..a33d1b1a --- /dev/null +++ b/Lyndon1994/0006.py @@ -0,0 +1,36 @@ +# -*- coding: utf-8 -*- +""" +**第 0006 题:** +你有一个目录,放了你一个月的日记,都是 txt, +为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。 +""" +import os +import re + + +def findWord(DirPath): + if not os.path.isdir(DirPath): + return + fileList = os.listdir(DirPath) + reObj = re.compile('\b?(\w+)\b?') + for file in fileList: + filePath = os.path.join(DirPath, file) + if os.path.isfile(filePath) and os.path.splitext(filePath)[1] == '.txt': + with open(filePath) as f: + data = f.read() + words = reObj.findall(data) + wordDict = dict() + for word in words: + word = word.lower() + if word in ['a', 'the', 'to']: + continue + if word in wordDict: + wordDict[word] += 1 + else: + wordDict[word] = 1 + ansList = sorted(wordDict.items(), key=lambda t: t[1], reverse=True) + print('file: %s->the most word: %s' % (file, ansList[1])) + + +if __name__ == '__main__': + findWord('source/0006') diff --git a/Lyndon1994/0007.py b/Lyndon1994/0007.py new file mode 100644 index 00000000..2d70409c --- /dev/null +++ b/Lyndon1994/0007.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +""" +**第 0007 题:** +有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 +""" +import os +import re + + +def stat_code(dir_path): + if not os.path.isdir(dir_path): + return + exp_re = re.compile(r'^#.*') + file_list = os.listdir(dir_path) + print("%s\t%s\t%s\t%s" % ('file', 'all_lines', 'space_lines', 'exp_lines')) + for file in file_list: + file_path = os.path.join(dir_path, file) + if os.path.isfile(file_path) and os.path.splitext(file_path)[1] == '.py': + with open(file_path) as f: + all_lines = 0 + space_lines = 0 + exp_lines = 0 + for line in f.readlines(): + all_lines += 1 + if line.strip() == '': + space_lines += 1 + continue + exp = exp_re.findall(line.strip()) + if exp: + exp_lines += 1 + print("%s\t%s\t%s\t%s" % (file, all_lines, space_lines, exp_lines)) + + +if __name__ == '__main__': + stat_code('.') diff --git a/Lyndon1994/0008.py b/Lyndon1994/0008.py new file mode 100644 index 00000000..d4b8b939 --- /dev/null +++ b/Lyndon1994/0008.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +第 0008 题:一个HTML文件,找出里面的正文。 +""" + +import requests,re +from bs4 import BeautifulSoup + +url = 'http://linyii.com' +data=requests.get(url) +r = re.findall(r'[\s\S]*',data.text) +print(r[0]) + +print('---------------------------------------------------------------') +soup = BeautifulSoup(data.text,'html.parser') +print(soup.body.text) \ No newline at end of file diff --git a/Lyndon1994/0009.py b/Lyndon1994/0009.py new file mode 100644 index 00000000..6ba12951 --- /dev/null +++ b/Lyndon1994/0009.py @@ -0,0 +1,16 @@ +# -*- coding: utf-8 -*- +""" +第 0009 题:一个HTML文件,找出里面的链接。 +""" +import requests,re,os +from bs4 import BeautifulSoup + +url = 'http://linyii.com' +data=requests.get(url) +# urls = re.findall(r'',data.text) +# print(urls) + +soup = BeautifulSoup(data.text,'html.parser') +urls = soup.findAll('a') +for u in urls: + print(u['href']) \ No newline at end of file diff --git a/Lyndon1994/0010.py b/Lyndon1994/0010.py new file mode 100644 index 00000000..44e6f034 --- /dev/null +++ b/Lyndon1994/0010.py @@ -0,0 +1,37 @@ +# -*- coding: utf-8 -*- +# 第 0010 题:使用 Python 生成类似于下图中的字母验证码图片 + +from PIL import Image, ImageDraw, ImageFont, ImageFilter + +import random + +# 随机字母: +def rndChar(): + return chr(random.randint(65, 90)) + +# 随机颜色1: +def rndColor(): + return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) + +# 随机颜色2: +def rndColor2(): + return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) + +# 240 x 60: +width = 60 * 4 +height = 60 +image = Image.new('RGB', (width, height), (255, 255, 255)) +# 创建Font对象: +font = ImageFont.truetype('/usr/share/fonts/truetype/ubuntu-font-family/UbuntuMono-R.ttf', 36) +# 创建Draw对象: +draw = ImageDraw.Draw(image) +# 填充每个像素: +for x in range(width): + for y in range(height): + draw.point((x, y), fill=rndColor()) +# 输出文字: +for t in range(4): + draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2()) +# 模糊: +image = image.filter(ImageFilter.BLUR) +image.save('code.jpg', 'jpeg') \ No newline at end of file diff --git a/Lyndon1994/0011.py b/Lyndon1994/0011.py new file mode 100644 index 00000000..bbe501e8 --- /dev/null +++ b/Lyndon1994/0011.py @@ -0,0 +1,31 @@ +# -*- coding: utf-8 -*- +""" +第 0011 题: +敏感词文本文件 filtered_words.txt,里面的内容为以下内容, +当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights。 + +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge +""" +word_filter=set() +with open('source/0011/filtered_words.txt') as f: + for w in f.readlines(): + word_filter.add(w.strip()) + +while True: + s=input() + if s == 'exit': + break + if s in word_filter: + print('Freedom') + else: + print('Human Rights') diff --git a/Lyndon1994/0012.py b/Lyndon1994/0012.py new file mode 100644 index 00000000..5d14b07c --- /dev/null +++ b/Lyndon1994/0012.py @@ -0,0 +1,20 @@ +# -*- coding: utf-8 -*- +""" +第 0012 题: +敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样, +当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」。 +""" +word_filter=set() +with open('source/0011/filtered_words.txt') as f: + for w in f.readlines(): + word_filter.add(w.strip()) + +while True: + s=input() + if s == 'exit': + break + for w in word_filter: + if w in s: + s= s.replace(w,'*'*len(w)) + print(s) + diff --git a/Lyndon1994/0013.py b/Lyndon1994/0013.py new file mode 100644 index 00000000..c7b601b7 --- /dev/null +++ b/Lyndon1994/0013.py @@ -0,0 +1,18 @@ +# -*- coding: utf-8 -*- +""" +第 0013 题: 用 Python 写一个爬图片的程序,爬 这个链接里的日本妹子图片 :-)[http://tieba.baidu.com/p/2166231880] +""" +import os + +import requests +from bs4 import BeautifulSoup + +url='http://tieba.baidu.com/p/2166231880' +html =requests.get(url) +soup =BeautifulSoup(html.text,'html.parser') +img_urls=soup.findAll('img',bdwater='杉本有美吧,1280,860') +for img_url in img_urls: + img_src=img_url['src'] + os.path.split(img_src)[1] + with open('source/0013/'+os.path.split(img_src)[1],'wb') as f: + f.write(requests.get(img_src).content) diff --git a/Lyndon1994/0014.py b/Lyndon1994/0014.py new file mode 100644 index 00000000..7df37da2 --- /dev/null +++ b/Lyndon1994/0014.py @@ -0,0 +1,24 @@ +# -*- coding: utf-8 -*- +""" +纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: + +{ + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} +请将上述内容写到 student.xls 文件中,如下图所示: +""" +from collections import OrderedDict + +import xlwt,json + +with open('source/0014/student.txt','r') as f: + data = json.load(f, object_pairs_hook=OrderedDict) + workbook = xlwt.Workbook() + sheet1 = workbook.add_sheet('student', cell_overwrite_ok=True) + for index, (key, values) in enumerate(data.items()): + sheet1.write(index, 0, key) + for i, value in enumerate(values): + sheet1.write(index, i+1, value) + workbook.save('source/0014/student.xls') \ No newline at end of file diff --git a/Lyndon1994/0015.py b/Lyndon1994/0015.py new file mode 100644 index 00000000..50f084e3 --- /dev/null +++ b/Lyndon1994/0015.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +""" +第 0015 题: 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示: + +{ + "1" : "上海", + "2" : "北京", + "3" : "成都" +} +请将上述内容写到 city.xls 文件中,如下图所示: +""" +import xlwt,json + +with open('source/0015/city.txt','r') as f: + data = json.load(f) + workbook = xlwt.Workbook() + sheet1 = workbook.add_sheet('city', cell_overwrite_ok=True) + for index, (key, value) in enumerate(data.items()): + sheet1.write(index, 0, key) + sheet1.write(index, 1, value) + workbook.save('source/0015/city.xls') \ No newline at end of file diff --git a/Lyndon1994/0017.py b/Lyndon1994/0017.py new file mode 100644 index 00000000..7aa67244 --- /dev/null +++ b/Lyndon1994/0017.py @@ -0,0 +1,42 @@ +# -*- coding: utf-8 -*- +""" + 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中,如 + +下所示: + + + + + +{ + "1" : ["张三", 150, 120, 100], + "2" : ["李四", 90, 99, 95], + "3" : ["王五", 60, 66, 68] +} + + +""" +import xlwt, json +from collections import OrderedDict + +with open('source/0014/student.txt', 'r') as f: + L = [] + L.append(r""" + + + + + """) + L.append(f.read()) + L.append(r""" + + + """) + with open('source/0014/student.xml', 'w') as s: + s.write(''.join(L)) diff --git a/Lyndon1994/0020.py b/Lyndon1994/0020.py new file mode 100644 index 00000000..d59d90e8 --- /dev/null +++ b/Lyndon1994/0020.py @@ -0,0 +1,52 @@ +# -*- coding: utf-8 -*- +""" +第 0020 题: +登陆中国联通网上营业厅 后选择「自助服务」 --> 「详单查询」, +然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」, +就会生成类似于 2014年10月01日~2014年10月31日通话详单.xls 文件。 +写代码,对每月通话时间做个统计。 +""" +import time + +import re +import xlrd + + +def str2sec(str): + print(str) + sec = 0 + time_re = re.compile(r'(\d+)(\D+)') + time_list = time_re.findall(str) + for time_item in time_list: + if time_item[1] == '秒': + sec += int(time_item[0]) + elif time_item[1] == '分': + sec += int(time_item[0]) * 60 + elif time_item[1] == '小时': + sec += int(time_item[0]) * 3600 + print(sec) + return sec + + +def sec2str(sec): + h = sec // 3600 + m = sec % 3600 // 60 + s = sec % 60 + return '%s小时%s分%s秒' % (h, m, s) + + +all_time = 0 # 使用总时间(秒) +start_time = time.mktime(time.strptime('2017-03-01', '%Y-%m-%d')) +end_time = time.mktime(time.strptime('2017-04-01', '%Y-%m-%d')) +data = xlrd.open_workbook('source/0020/2017年03月语音通信.xls') +table = data.sheets()[0] +nrows = table.nrows + +for i in range(nrows): + if i == 0: + continue + this_time = time.mktime(time.strptime(table.row_values(i)[2], '%Y-%m-%d %H:%M:%S')) + if this_time >= start_time and this_time < end_time: + all_time += str2sec(table.row_values(i)[3]) + +print(sec2str(all_time)) diff --git a/Lyndon1994/0021.py b/Lyndon1994/0021.py new file mode 100644 index 00000000..5f7d68b7 --- /dev/null +++ b/Lyndon1994/0021.py @@ -0,0 +1,23 @@ +# -*- coding: utf-8 -*- +""" +第 0021 题: 通常,登陆某个网站或者 APP,需要使用用户名和密码。密码是如何加密后存储起来的呢?请使用 Python 对密码加密。 +""" +import os +from hashlib import sha256 +from hmac import HMAC + + +def encrypt_password(password,salt=None): + if salt is None: + salt=os.urandom(8) + + if isinstance(salt,str): + salt=salt.encode('utf-8') + + result=password.encode('utf-8') + for i in range(10): + result=HMAC(result,salt,sha256).digest() + return salt+result + +if __name__ == '__main__': + print(encrypt_password('123456','a')) \ No newline at end of file diff --git a/Lyndon1994/0023/flask-demo.py b/Lyndon1994/0023/flask-demo.py new file mode 100644 index 00000000..9cf46c88 --- /dev/null +++ b/Lyndon1994/0023/flask-demo.py @@ -0,0 +1,82 @@ +import os +import logging + +logging.basicConfig(level=logging.INFO) + +import sqlite3 +from flask import Flask, request, session, g, redirect, url_for, abort, \ + render_template, flash + +import time + +app = Flask(__name__) + +class Config(object): + DEBUG = True + USERNAME='admin' + PASSWORD='1234' + DATABASE='/tmp/flaskr.db' + DATABASE_URI = 'sqlite://:memory:' + SECRET_KEY='shdjkandscbowduAIJNnjas9aSKAJSka' + +# 设置一个名为 FLASKR_SETTINGS 的环境变量,指向要加载的配置文件。 +# 启用静默模式告诉 Flask 在没有设置该环境变量的情况下噤声。 +app.config.from_object(Config) + + +# app.config.from_envvar('FLASKR_SETTINGS', silent=True) + +def connect_db(): + """Connects to the specific database.""" + logging.info('Connects to the specific database.') + rv = sqlite3.connect(app.config['DATABASE']) + rv.row_factory = sqlite3.Row + g.db = rv + logging.info(rv) + return rv + + +def init_db(): + with app.app_context(): + db = connect_db() + with app.open_resource('schema.sql', mode='r') as f: + db.cursor().executescript(f.read()) + db.commit() + + +@app.before_request +def before_request(): + g.db = connect_db() + + +@app.teardown_request +def teardown_request(exception): + db = getattr(g, 'db', None) + if db is not None: + db.close() + g.db.close() + +@app.template_filter('format_time') +def format_time_filter(t): + return time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(t)) + +@app.route('/') +def index(): + cur = g.db.execute('select name,title,text,created_at from entries order by id DESC ') + entries = [dict(name=row[0], title=row[1], text=row[2], created_at=row[3]) for row in cur.fetchall()] + logging.info(entries) + return render_template('index.html', entries=entries) + + +@app.route('/add', methods=['POST']) +def add_entry(): + g.db.execute('insert into entries (name,title,text,created_at) VALUES (?,?,?,?)', + (request.form['name'], request.form['title'], request.form['text'], time.time())) + g.db.commit() + flash('New entry was successfully posted') + return redirect(url_for('index')) + +if __name__ == '__main__': + init_db() + app.secret_key = app.config['SECRET_KEY'] + app.run() diff --git a/Lyndon1994/0023/schema.sql b/Lyndon1994/0023/schema.sql new file mode 100644 index 00000000..9f1ea077 --- /dev/null +++ b/Lyndon1994/0023/schema.sql @@ -0,0 +1,8 @@ +drop table if exists entries; +create table entries ( + id integer primary key autoincrement, + name string not null, + title string not null, + text string not null, + created_at integer not null +); \ No newline at end of file diff --git a/Lyndon1994/0023/static/style.css b/Lyndon1994/0023/static/style.css new file mode 100644 index 00000000..1e26e663 --- /dev/null +++ b/Lyndon1994/0023/static/style.css @@ -0,0 +1,18 @@ +body { font-family: sans-serif; background: #eee; } +a, h1, h2 { color: #377BA8; } +h1, h2 { font-family: 'Georgia', serif; margin: 0; } +h1 { border-bottom: 2px solid #eee; } +h2 { font-size: 1.2em; } + +.page { margin: 2em auto; width: 35em; border: 5px solid #ccc; + padding: 0.8em; background: white; } +.entries { list-style: none; margin: 0; padding: 0; } +.entries li { margin: 0.8em 1.2em; } +.entries li h2 { margin-left: -1em; } +.add-entry { font-size: 0.9em; border-bottom: 1px solid #ccc; } +.add-entry dl { font-weight: bold; } +.metanav { text-align: right; font-size: 0.8em; padding: 0.3em; + margin-bottom: 1em; background: #fafafa; } +.flash { background: #CEE5F5; padding: 0.5em; + border: 1px solid #AACBE2; } +.error { background: #F0D6D6; padding: 0.5em; } \ No newline at end of file diff --git a/Lyndon1994/0023/templates/index.html b/Lyndon1994/0023/templates/index.html new file mode 100644 index 00000000..3f3dad5c --- /dev/null +++ b/Lyndon1994/0023/templates/index.html @@ -0,0 +1,26 @@ +{% extends "layout.html" %} +{% block body %} + +
+
+ {% if not session.login %} +
Name: +
+ {% endif %} +
Title: +
+
Text: +
+
+
+
+ +
    + {% for entry in entries %} +
  • {{ entry.name }}:

    {{ entry.created_at|format_time }} +

    {{ entry.title }}

    {{ entry.text|safe }} + {% else %} +
  • Unbelievable. No entries here so far + {% endfor %} +
+{% endblock %} diff --git a/Lyndon1994/0023/templates/layout.html b/Lyndon1994/0023/templates/layout.html new file mode 100644 index 00000000..acc89ada --- /dev/null +++ b/Lyndon1994/0023/templates/layout.html @@ -0,0 +1,17 @@ + + + + + Flaskr + + + +
+

Flaskr

+ {% for message in get_flashed_messages() %} +
{{ message }}
+ {% endfor %} + {% block body %}{% endblock %} +
+ + \ No newline at end of file diff --git a/Lyndon1994/0024/__init__.py b/Lyndon1994/0024/__init__.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/Lyndon1994/0024/__init__.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/Lyndon1994/0024/todo.py b/Lyndon1994/0024/todo.py new file mode 100644 index 00000000..40a96afc --- /dev/null +++ b/Lyndon1994/0024/todo.py @@ -0,0 +1 @@ +# -*- coding: utf-8 -*- diff --git a/Lyndon1994/README.md b/Lyndon1994/README.md new file mode 100644 index 00000000..7f9b1ae1 --- /dev/null +++ b/Lyndon1994/README.md @@ -0,0 +1,2 @@ +# Show-Me-the-Code +Show Me the Code Python version. https://github.com/Show-Me-the-Code/python diff --git a/Lyndon1994/source/0004-text.txt b/Lyndon1994/source/0004-text.txt new file mode 100644 index 00000000..906dc1c9 --- /dev/null +++ b/Lyndon1994/source/0004-text.txt @@ -0,0 +1,7 @@ +Architects look at thousands of buildings during their training, and study critiques of those buildings written by masters. In contrast, most software developers only ever get to know a handful of large programs well—usually programs they wrote themselves—and never study the great programs of history. As a result, they repeat one another's mistakes rather than building on one another's successes. + +Our goal is to change that. In these two books, the authors of four dozen open source applications explain how their software is structured, and why. What are each program's major components? How do they interact? And what did their builders learn during their development? In answering these questions, the contributors to these books provide unique insights into how they think. + +If you are a junior developer, and want to learn how your more experienced colleagues think, these books are the place to start. If you are an intermediate or senior developer, and want to see how your peers have solved hard design problems, these books can help you too. + +Follow us on our blog at http://aosabook.org/blog/ or on Twitter at @aosabook and using the #aosa hashtag. \ No newline at end of file diff --git a/Lyndon1994/source/0005/pics/17fb7c2dc017eef4d839b311c35a09df18ff6861.jpg b/Lyndon1994/source/0005/pics/17fb7c2dc017eef4d839b311c35a09df18ff6861.jpg new file mode 100644 index 00000000..c2239b3e Binary files /dev/null and b/Lyndon1994/source/0005/pics/17fb7c2dc017eef4d839b311c35a09df18ff6861.jpg differ diff --git a/Lyndon1994/source/0005/pics/1caf792fb6fe974a521128071ef41ef53881c99c.jpg b/Lyndon1994/source/0005/pics/1caf792fb6fe974a521128071ef41ef53881c99c.jpg new file mode 100644 index 00000000..07934944 Binary files /dev/null and b/Lyndon1994/source/0005/pics/1caf792fb6fe974a521128071ef41ef53881c99c.jpg differ diff --git a/Lyndon1994/source/0005/pics/21232fa7298b4bdfe4778c25ef24258f6cfb6327.jpg b/Lyndon1994/source/0005/pics/21232fa7298b4bdfe4778c25ef24258f6cfb6327.jpg new file mode 100644 index 00000000..9e84c32b Binary files /dev/null and b/Lyndon1994/source/0005/pics/21232fa7298b4bdfe4778c25ef24258f6cfb6327.jpg differ diff --git a/Lyndon1994/source/0005/pics/348dd2ae5ff6deb6ef7b6bf9ab23e43cf8d8d2c5.jpg b/Lyndon1994/source/0005/pics/348dd2ae5ff6deb6ef7b6bf9ab23e43cf8d8d2c5.jpg new file mode 100644 index 00000000..f69c3dec Binary files /dev/null and b/Lyndon1994/source/0005/pics/348dd2ae5ff6deb6ef7b6bf9ab23e43cf8d8d2c5.jpg differ diff --git a/Lyndon1994/source/0005/pics/46673332eec7befebb70e54652f68423dd15ffbb.jpg b/Lyndon1994/source/0005/pics/46673332eec7befebb70e54652f68423dd15ffbb.jpg new file mode 100644 index 00000000..c6b9d2da Binary files /dev/null and b/Lyndon1994/source/0005/pics/46673332eec7befebb70e54652f68423dd15ffbb.jpg differ diff --git a/Lyndon1994/source/0005/pics/50c0ebe8f13d8c4889faaba4daec14c298fd78a7.jpg b/Lyndon1994/source/0005/pics/50c0ebe8f13d8c4889faaba4daec14c298fd78a7.jpg new file mode 100644 index 00000000..2ae2800e Binary files /dev/null and b/Lyndon1994/source/0005/pics/50c0ebe8f13d8c4889faaba4daec14c298fd78a7.jpg differ diff --git a/Lyndon1994/source/0005/pics/5865440118a1550d8d27c4fdd9d28f6e9efaa99a.jpg b/Lyndon1994/source/0005/pics/5865440118a1550d8d27c4fdd9d28f6e9efaa99a.jpg new file mode 100644 index 00000000..ffcfbda0 Binary files /dev/null and b/Lyndon1994/source/0005/pics/5865440118a1550d8d27c4fdd9d28f6e9efaa99a.jpg differ diff --git a/Lyndon1994/source/0005/pics/7bf24be69bee676e503efc0b09caf484db5dd2b9.jpg b/Lyndon1994/source/0005/pics/7bf24be69bee676e503efc0b09caf484db5dd2b9.jpg new file mode 100644 index 00000000..4e28f702 Binary files /dev/null and b/Lyndon1994/source/0005/pics/7bf24be69bee676e503efc0b09caf484db5dd2b9.jpg differ diff --git a/Lyndon1994/source/0005/pics/8d1076bccf118eb0145495e3f1babbe1c3b30180.jpg b/Lyndon1994/source/0005/pics/8d1076bccf118eb0145495e3f1babbe1c3b30180.jpg new file mode 100644 index 00000000..52b00d6f Binary files /dev/null and b/Lyndon1994/source/0005/pics/8d1076bccf118eb0145495e3f1babbe1c3b30180.jpg differ diff --git a/Lyndon1994/source/0005/pics/afe35fd64c190588d8bf4a657d02c52ceea875b6.jpg b/Lyndon1994/source/0005/pics/afe35fd64c190588d8bf4a657d02c52ceea875b6.jpg new file mode 100644 index 00000000..85d18172 Binary files /dev/null and b/Lyndon1994/source/0005/pics/afe35fd64c190588d8bf4a657d02c52ceea875b6.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_17fb7c2dc017eef4d839b311c35a09df18ff6861.jpg b/Lyndon1994/source/0005/result/finish_17fb7c2dc017eef4d839b311c35a09df18ff6861.jpg new file mode 100644 index 00000000..c2943bf5 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_17fb7c2dc017eef4d839b311c35a09df18ff6861.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_1caf792fb6fe974a521128071ef41ef53881c99c.jpg b/Lyndon1994/source/0005/result/finish_1caf792fb6fe974a521128071ef41ef53881c99c.jpg new file mode 100644 index 00000000..482ee574 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_1caf792fb6fe974a521128071ef41ef53881c99c.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_21232fa7298b4bdfe4778c25ef24258f6cfb6327.jpg b/Lyndon1994/source/0005/result/finish_21232fa7298b4bdfe4778c25ef24258f6cfb6327.jpg new file mode 100644 index 00000000..95ea9f45 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_21232fa7298b4bdfe4778c25ef24258f6cfb6327.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_348dd2ae5ff6deb6ef7b6bf9ab23e43cf8d8d2c5.jpg b/Lyndon1994/source/0005/result/finish_348dd2ae5ff6deb6ef7b6bf9ab23e43cf8d8d2c5.jpg new file mode 100644 index 00000000..946153f6 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_348dd2ae5ff6deb6ef7b6bf9ab23e43cf8d8d2c5.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_46673332eec7befebb70e54652f68423dd15ffbb.jpg b/Lyndon1994/source/0005/result/finish_46673332eec7befebb70e54652f68423dd15ffbb.jpg new file mode 100644 index 00000000..dcd407f8 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_46673332eec7befebb70e54652f68423dd15ffbb.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_50c0ebe8f13d8c4889faaba4daec14c298fd78a7.jpg b/Lyndon1994/source/0005/result/finish_50c0ebe8f13d8c4889faaba4daec14c298fd78a7.jpg new file mode 100644 index 00000000..40347a93 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_50c0ebe8f13d8c4889faaba4daec14c298fd78a7.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_5865440118a1550d8d27c4fdd9d28f6e9efaa99a.jpg b/Lyndon1994/source/0005/result/finish_5865440118a1550d8d27c4fdd9d28f6e9efaa99a.jpg new file mode 100644 index 00000000..78a1ff40 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_5865440118a1550d8d27c4fdd9d28f6e9efaa99a.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_7bf24be69bee676e503efc0b09caf484db5dd2b9.jpg b/Lyndon1994/source/0005/result/finish_7bf24be69bee676e503efc0b09caf484db5dd2b9.jpg new file mode 100644 index 00000000..73f0e40f Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_7bf24be69bee676e503efc0b09caf484db5dd2b9.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_8d1076bccf118eb0145495e3f1babbe1c3b30180.jpg b/Lyndon1994/source/0005/result/finish_8d1076bccf118eb0145495e3f1babbe1c3b30180.jpg new file mode 100644 index 00000000..8f0caec6 Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_8d1076bccf118eb0145495e3f1babbe1c3b30180.jpg differ diff --git a/Lyndon1994/source/0005/result/finish_afe35fd64c190588d8bf4a657d02c52ceea875b6.jpg b/Lyndon1994/source/0005/result/finish_afe35fd64c190588d8bf4a657d02c52ceea875b6.jpg new file mode 100644 index 00000000..7cdf1f2a Binary files /dev/null and b/Lyndon1994/source/0005/result/finish_afe35fd64c190588d8bf4a657d02c52ceea875b6.jpg differ diff --git a/Lyndon1994/source/0006/1.txt b/Lyndon1994/source/0006/1.txt new file mode 100644 index 00000000..254a2332 --- /dev/null +++ b/Lyndon1994/source/0006/1.txt @@ -0,0 +1,7 @@ +Dethe is a geek dad, aesthetic programmer, mentor, and creator of the Waterbear visual programming tool. He co-hosts the Vancouver Maker Education Salons and wants to fill the world with robotic origami rabbits. + +In block-based programming languages, you write programs by dragging and connecting blocks that represent parts of the program. Block-based languages differ from conventional programming languages, in which you type words and symbols. + +Learning a programming language can be difficult because they are extremely sensitive to even the slightest of typos. Most programming languages are case-sensitive, have obscure syntax, and will refuse to run if you get so much as a semicolon in the wrong place—or worse, leave one out. Further, most programming languages in use today are based on English and their syntax cannot be localized. + +In contrast, a well-done block language can eliminate syntax errors completely. You can still create a program which does the wrong thing, but you cannot create one with the wrong syntax: the blocks just won't fit that way. Block languages are more discoverable: you can see all the constructs and libraries of the language right in the list of blocks. Further, blocks can be localized into any human language without changing the meaning of the programming language. \ No newline at end of file diff --git a/Lyndon1994/source/0006/2.txt b/Lyndon1994/source/0006/2.txt new file mode 100644 index 00000000..f1fc4500 --- /dev/null +++ b/Lyndon1994/source/0006/2.txt @@ -0,0 +1,7 @@ +Block-based languages have a long history, with some of the prominent ones being Lego Mindstorms, Alice3D, StarLogo, and especially Scratch. There are several tools for block-based programming on the web as well: Blockly, AppInventor, Tynker, and many more. + +The code in this chapter is loosely based on the open-source project Waterbear, which is not a language but a tool for wrapping existing languages with a block-based syntax. Advantages of such a wrapper include the ones noted above: eliminating syntax errors, visual display of available components, ease of localization. Additionally, visual code can sometimes be easier to read and debug, and blocks can be used by pre-typing children. (We could even go further and put icons on the blocks, either in conjunction with the text names or instead of them, to allow pre-literate children to write programs, but we don't go that far in this example.) + +The choice of turtle graphics for this language goes back to the Logo language, which was created specifically to teach programming to children. Several of the block-based languages above include turtle graphics, and it is a small enough domain to be able to capture in a tightly constrained project such as this. + +If you would like to get a feel for what a block-based-language is like, you can experiment with the program that is built in this chapter from author's GitHub repository. \ No newline at end of file diff --git a/Lyndon1994/source/0006/3.txt b/Lyndon1994/source/0006/3.txt new file mode 100644 index 00000000..f477eaad --- /dev/null +++ b/Lyndon1994/source/0006/3.txt @@ -0,0 +1,6 @@ +Goals and Structure +I want to accomplish a couple of things with this code. First and foremost, I want to implement a block language for turtle graphics, with which you can write code to create images through simple dragging-and-dropping of blocks, using as simple a structure of HTML, CSS, and JavaScript as possible. Second, but still important, I want to show how the blocks themselves can serve as a framework for other languages besides our mini turtle language. + +To do this, we encapsulate everything that is specific to the turtle language into one file (turtle.js) that we can easily swap with another file. Nothing else should be specific to the turtle language; the rest should just be about handling the blocks (blocks.js and menu.js) or be generally useful web utilities (util.js, drag.js, file.js). That is the goal, although to maintain the small size of the project, some of those utilities are less general-purpose and more specific to their use with the blocks. + +One thing that struck me when writing a block language was that the language is its own IDE. You can't just code up blocks in your favourite text editor; the IDE has to be designed and developed in parallel with the block language. This has some pros and cons. On the plus side, everyone will use a consistent environment and there is no room for religious wars about what editor to use. On the downside, it can be a huge distraction from building the block language itself. \ No newline at end of file diff --git a/Lyndon1994/source/0011/filtered_words.txt b/Lyndon1994/source/0011/filtered_words.txt new file mode 100644 index 00000000..69373b64 --- /dev/null +++ b/Lyndon1994/source/0011/filtered_words.txt @@ -0,0 +1,11 @@ +北京 +程序员 +公务员 +领导 +牛比 +牛逼 +你娘 +你妈 +love +sex +jiangge \ No newline at end of file diff --git a/Lyndon1994/source/0014/student.txt b/Lyndon1994/source/0014/student.txt new file mode 100644 index 00000000..f06a601f --- /dev/null +++ b/Lyndon1994/source/0014/student.txt @@ -0,0 +1,5 @@ +{ + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} \ No newline at end of file diff --git a/Lyndon1994/source/0014/student.xls b/Lyndon1994/source/0014/student.xls new file mode 100644 index 00000000..c8a41564 Binary files /dev/null and b/Lyndon1994/source/0014/student.xls differ diff --git a/Lyndon1994/source/0014/student.xml b/Lyndon1994/source/0014/student.xml new file mode 100644 index 00000000..9f7d7661 --- /dev/null +++ b/Lyndon1994/source/0014/student.xml @@ -0,0 +1,16 @@ + + + + + + { + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} + + + \ No newline at end of file diff --git a/Lyndon1994/source/0015/city.txt b/Lyndon1994/source/0015/city.txt new file mode 100644 index 00000000..312f5c19 --- /dev/null +++ b/Lyndon1994/source/0015/city.txt @@ -0,0 +1,5 @@ +{ + "1" : "上海", + "2" : "北京", + "3" : "成都" +} \ No newline at end of file diff --git a/Lyndon1994/source/0015/city.xls b/Lyndon1994/source/0015/city.xls new file mode 100644 index 00000000..1809fe86 Binary files /dev/null and b/Lyndon1994/source/0015/city.xls differ diff --git "a/Lyndon1994/source/0020/2017\345\271\26403\346\234\210\350\257\255\351\237\263\351\200\232\344\277\241.xls" "b/Lyndon1994/source/0020/2017\345\271\26403\346\234\210\350\257\255\351\237\263\351\200\232\344\277\241.xls" new file mode 100644 index 00000000..6f77a985 Binary files /dev/null and "b/Lyndon1994/source/0020/2017\345\271\26403\346\234\210\350\257\255\351\237\263\351\200\232\344\277\241.xls" differ diff --git a/README.md b/README.md index 7b884541..5d75dd92 100644 --- a/README.md +++ b/README.md @@ -8,20 +8,20 @@ Show Me the Code Python version. ### How to Add your solutions: - * fork this repo - * create a folder named with your github name - * create a folder named the problem num - * add your solution in the folder + * Fork this repo. + * Create a folder named with your github name. + * Create a folder named the problem num. + * Add your solution in the folder. For example, if you wanna add a solution for problem 0001, you should do like this: - * fork Show-Me-the-Code/python - * git clone YOUR_REPO_URL SOME_DIR - * cd SOME_DIR - * mkdir YOUR_GITHUB_USER_NAME - * cd YOU_GITHUB_USER_NAME - * mkdir 0001 - * cd 0001 - * and the write some code & test it + * Fork `Show-Me-the-Code/python`. + * git clone `YOUR_REPO_URL SOME_DIR`. + * cd `SOME_DIR`. + * mkdir `YOUR_GITHUB_USER_NAME`. + * cd `YOU_GITHUB_USER_NAME`. + * mkdir `0001`. + * cd `0001`. + * and the write some code & test it. -if all these steps done, send us an pull request. After we accepte your request, we'll invite you to this group. +If all these steps done, send us an pull request. After we accept your request, we'll invite you to this group. diff --git a/WangZhou/0000/consolab.ttf b/WangZhou/0000/consolab.ttf new file mode 100644 index 00000000..55f6bd2f Binary files /dev/null and b/WangZhou/0000/consolab.ttf differ diff --git a/WangZhou/0000/insert_num_angle.py b/WangZhou/0000/insert_num_angle.py new file mode 100644 index 00000000..73242822 --- /dev/null +++ b/WangZhou/0000/insert_num_angle.py @@ -0,0 +1,20 @@ +from PIL import Image, ImageDraw, ImageFont + + +def insert_angle_num(img): + """ + Insert a num on the right-upper angle,then save the new image. + :param img:string : filename of an Image object + """ + with Image.open(img) as im: + width, height = im.size + draw_image = ImageDraw.Draw(im) + color = '#ff0000' + num_font = ImageFont.truetype('consolab.ttf', 100) + draw_image.text((width - 80, 20), '7', font=num_font, fill=color) + im.save('new_message.jpg') + + +if __name__ == "__main__": + img = 'wz0000.jpg' + insert_angle_num(img) diff --git a/WangZhou/0000/new_message.jpg b/WangZhou/0000/new_message.jpg new file mode 100644 index 00000000..6f3bb4ef Binary files /dev/null and b/WangZhou/0000/new_message.jpg differ diff --git a/WangZhou/0000/wz0000.jpg b/WangZhou/0000/wz0000.jpg new file mode 100644 index 00000000..d4a4d920 Binary files /dev/null and b/WangZhou/0000/wz0000.jpg differ diff --git a/WangZhou/0001/gen_act_key.py b/WangZhou/0001/gen_act_key.py new file mode 100644 index 00000000..45909b32 --- /dev/null +++ b/WangZhou/0001/gen_act_key.py @@ -0,0 +1,21 @@ +import uuid + + +def gen_act_key(n): + """ + 生成 n 个激活码,保存在字典。 + :param n: int + :return: dict + """ + act_code_store = {} + + for i in range(n): + code0 = str(uuid.uuid1()).split('-')[0] + code1 = '-'.join(str(uuid.uuid3(uuid.NAMESPACE_DNS, f'{i}')).split('-')[1:]) + act_code = code0 + '-' + code1 + act_code_store[f'id-{i}'] = act_code + return act_code_store + + +if __name__ == "__main__": + activity_code = gen_act_key(200) diff --git a/doubi_sdust/0000.py b/doubi_sdust/0000.py new file mode 100644 index 00000000..dcc25f32 --- /dev/null +++ b/doubi_sdust/0000.py @@ -0,0 +1,20 @@ +''' + +第 0000 题: 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 类似于图中效果 + +''' +from PIL import Image, ImageDraw, ImageFont +#PIL https://pillow.readthedocs.org/ +def add_num(img): + draw = ImageDraw.Draw(img) + #加载TrueType或OpenType字体文件,并创建一个字体对象。 + myfont = ImageFont.truetype('C:/windows/fonts/Arial.ttf', size=20) + fillcolor = "#ff0000" + width, height = img.size + draw.text((width-40, 0), '2', font=myfont, fill=fillcolor) + img.save('result.jpg','jpeg') + return 0 + +image = Image.open('image.jpg') +print(image.format,image.size,image.mode) +add_num(image) \ No newline at end of file diff --git a/doubi_sdust/0001.py b/doubi_sdust/0001.py new file mode 100644 index 00000000..7f36876d --- /dev/null +++ b/doubi_sdust/0001.py @@ -0,0 +1,35 @@ +''' +第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? + +将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。 +''' +import random +import pymysql +def creat_num(num,long): + str = 'qwertyuiopasdfghjklzxcvbnm1234567890' + b = [] + for i in range(num): + a = '' + for j in range(long): + a += random.choice(str) + b.append(a) + return b + +def InsertIntoMysql(codelist): + # 打开数据库连接 + db = pymysql.connect(host='127.0.0.1',user='root',passwd='919824467',db='mysql') + # 使用 cursor() 方法创建一个游标对象 cursor + cur = db.cursor() + #数据库语句 + cur.execute('CREATE DATABASE IF NOT EXISTS code') + cur.execute('USE code') + cur.execute('''CREATE TABLE IF NOT EXISTS num( + id INT NOT NULL AUTO_INCREMENT, + code VARCHAR(32) NOT NULL, + PRIMARY KEY(id) )''') + for num in codelist: + cur.execute('INSERT INTO num(code) VALUES(%s)',(num)) + cur.connection.commit() + db.close() + +InsertIntoMysql(creat_num(200,10)) \ No newline at end of file diff --git a/doubi_sdust/0002.py b/doubi_sdust/0002.py new file mode 100644 index 00000000..28b8b1b8 --- /dev/null +++ b/doubi_sdust/0002.py @@ -0,0 +1 @@ +#refer to 0001.py \ No newline at end of file diff --git a/doubi_sdust/0003.py b/doubi_sdust/0003.py new file mode 100644 index 00000000..e69de29b diff --git a/doubi_sdust/0004.py b/doubi_sdust/0004.py new file mode 100644 index 00000000..eb433587 --- /dev/null +++ b/doubi_sdust/0004.py @@ -0,0 +1,14 @@ +''' +第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数。 +''' + +# encoding: utf-8 +import collections +import os + +with open('test.txt','r') as fp: + str1=fp.read().split(' ') +b = collections.Counter(str1) +with open('result.txt','w') as result_file: + for key,value in b.items(): + result_file.write(key+':'+str(value)+'\n') \ No newline at end of file diff --git a/doubi_sdust/0005.py b/doubi_sdust/0005.py new file mode 100644 index 00000000..00d842aa --- /dev/null +++ b/doubi_sdust/0005.py @@ -0,0 +1,15 @@ +''' +第 0005 题: 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。 +''' +from PIL import Image +import os.path + +def Size(dirPath, size_x, size_y): + f_list = os.listdir(dirPath) + for i in f_list: + if os.path.splitext(i)[1] == '.jpg': + img = Image.open(i) + img.thumbnail((size_x,size_y)) + img.save(i) + print(i) +Size('D:\PyCharm 2017.1.3\projects', 1136, 640) \ No newline at end of file diff --git a/doubi_sdust/0006.py b/doubi_sdust/0006.py new file mode 100644 index 00000000..9f573b36 --- /dev/null +++ b/doubi_sdust/0006.py @@ -0,0 +1,24 @@ +''' +第 0006 题: 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。 +''' +# encoding: utf-8 +import collections +import os.path +def judgeit(words): + for i in range(6): + if len(words[i]) > 2 and words[i] != 'the' and words[i] != 'her' and words[i] != 'his' and words[i] != 'and' and words[i] != 'she': + return words[i] + return words[7] + +def mainKeywords(dirPath): + f_list = os.listdir(dirPath) + for i in f_list: + if os.path.splitext(i)[1] == '.txt': + print('the keywords of' + i + ' is:' ) + with open(i, 'r') as fp: + str1 = fp.read().split(' ') + b = collections.Counter(str1) + keywords = sorted(b, key=lambda x: b[x],reverse = True) + print(judgeit(keywords)) + +mainKeywords('D:\PyCharm 2017.1.3\projects') \ No newline at end of file diff --git a/doubi_sdust/0007.py b/doubi_sdust/0007.py new file mode 100644 index 00000000..50a8f56b --- /dev/null +++ b/doubi_sdust/0007.py @@ -0,0 +1,39 @@ +''' +第 0007 题: 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 +''' +import os.path +import re +def mainKeywords(dirPath): + blank, comments, codelines, totalines, count, temp = 0, 0, 0, 0, 0, 0 + f_list = os.listdir(dirPath) + for i in f_list: + if os.path.splitext(i)[1] == '.py': + print(i) + with open(i, 'r', encoding='utf-8') as fp: + while True: + line = fp.readline() + totalines += 1 + if not line: + break + elif line.strip().startswith('#'): + comments += 1 + elif line.strip().startswith("'''") or line.strip().startswith('"""'): + comments += 1 + if line.count('"""') == 1 or line.count("'''") == 1: + while True: + line = fp.readline() + totalines += 1 + comments += 1 + if ("'''" in line) or ('"""' in line): + break + elif line.strip(): + codelines += 1 + else: + blank += 1 + print('the nuber of totalines is : ' + str(totalines-1)) + print('the nuber of comments is : ' + str(comments)) + print('the nuber of codelines is : ' + str(codelines)) + print('the nuber of blanklines is : ' + str(blank)) + blank, comments, codelines, totalines = 0, 0, 0, 0 + +mainKeywords('D:\PyCharm 2017.1.3\projects') \ No newline at end of file diff --git a/doubi_sdust/0008.py b/doubi_sdust/0008.py new file mode 100644 index 00000000..0821a8e0 --- /dev/null +++ b/doubi_sdust/0008.py @@ -0,0 +1,19 @@ +''' +第 0008 题: 一个HTML文件,找出里面的正文。 + +第 0009 题: 一个HTML文件,找出里面的链接。 +''' + +# coding=utf-8 +from bs4 import BeautifulSoup +def sechBodyUrl(path): + with open(path,encoding='utf-8') as fp: + text = BeautifulSoup(fp, 'lxml') + urls = text.findAll('a') + for u in urls: + print(u['href']) + content = text.get_text().strip('\n') + return content + +sechBodyUrl('0007.html') +#print(searchBody('0007.html')) \ No newline at end of file diff --git a/doubi_sdust/0009.py b/doubi_sdust/0009.py new file mode 100644 index 00000000..be2e68ee --- /dev/null +++ b/doubi_sdust/0009.py @@ -0,0 +1 @@ +#refer to 0008.py \ No newline at end of file diff --git a/doubi_sdust/0010.py b/doubi_sdust/0010.py new file mode 100644 index 00000000..e7e8dea8 --- /dev/null +++ b/doubi_sdust/0010.py @@ -0,0 +1,37 @@ +''' +第 0010 题: 使用 Python 生成类似于下图中的字母验证码图片 + +参考廖雪峰代码:liaoxuefeng.com/…/00140767171357714f87a053a824ffd811d98a83b58ec13000 +''' +from PIL import Image, ImageDraw, ImageFont, ImageFilter +import random + +# 随机字母: +def rndChar(): + return chr(random.randint(65, 90)) +# 随机颜色1: +def rndColor(): + return (random.randint(64, 255), random.randint(64, 255), random.randint(64, 255)) +# 随机颜色2: +def rndColor2(): + return (random.randint(32, 127), random.randint(32, 127), random.randint(32, 127)) + +# 240 x 60: +width = 240 +height = 60 +image = Image.new('RGB', (width, height), (255, 255, 255)) +# 创建Font对象: +font = ImageFont.truetype('C:/windows/fonts/Arial.ttf', 36) +# 创建Draw对象: +draw = ImageDraw.Draw(image) +# 填充每个像素: +for x in range(width): + for y in range(height): + draw.point((x, y), fill=rndColor()) +# 输出文字: +for t in range(4): + draw.text((60 * t + 10, 10), rndChar(), font=font, fill=rndColor2()) +# 模糊: +image = image.filter(ImageFilter.BLUR) +image.save('code.jpg', 'jpeg'); +image.show('code.jpg') \ No newline at end of file diff --git a/jessun1990/README.MD b/jessun1990/README.MD new file mode 100644 index 00000000..55f2d0ee --- /dev/null +++ b/jessun1990/README.MD @@ -0,0 +1,4 @@ +# My Repository + +My python-homework is here: [ https://github.com/jessun1990/python-homework ](https://github.com/jessun1990/python-homework) + diff --git "a/monkey/0008/The world's leading software development platform \302\267 GitHub.html" "b/monkey/0008/The world's leading software development platform \302\267 GitHub.html" new file mode 100644 index 00000000..4e6348b9 --- /dev/null +++ "b/monkey/0008/The world's leading software development platform \302\267 GitHub.html" @@ -0,0 +1,757 @@ + + + + + + + + + + + + + + + + + + + + + + + + The world's leading software development platform · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + + + + +
+ +
+ +
+
+ + + +
+ + +
+
+
+
+

Built for developers

+

+ GitHub is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside millions of other developers. +

+
+
+
+
+
+ +
+
+
+ + + +
+
+
+ GitHub for teams +
+

+ A better way to work together +

+

+ GitHub brings teams together to work through problems, move ideas forward, and learn from each other along the way. +

+ +
+ +
+
+
+
+ +
+
+

Write better code

+

+ Collaboration makes perfect. The conversations and code reviews that happen in Pull Requests help your team share the weight of your work and improve the software you build. +

+

+ Learn about code review on GitHub +

+
+
+ +
+
+ +
+
+

Manage your chaos

+

+ Take a deep breath. On GitHub, project management happens in Issues and Projects, right alongside your code. All you have to do is mention a teammate to get them involved. +

+

+ Learn about project management on GitHub +

+
+
+
+
+ +
+ +
+
+ security-admin + +
+ Security and administration +
+

+ Boxes? Check. +

+

+ We worried about your administrative and security needs so you don’t have to. From flexible hosting to authentication options, GitHub can help you meet your team’s requirements. +

+ +

+ + Learn about GitHub for Business + +

+ +
+
+ +
+
+

Code security

+

+ Prevent problems before they happen. Protected branches, signed commits, and required status checks protect your work and help you maintain a high standard for your code. +

+ +

Access controlled

+

+ Encourage teams to work together while limiting access to those who need it with granular permissions and authentication through SAML/SSO and LDAP. +

+ +

Hosted where you need it

+

+ Securely and reliably host your work on GitHub.com. Or, deploy GitHub Enterprise on your own servers or in a private cloud using Amazon Web Services, Azure or Google Cloud Platform. +

+
+
+
+
+ +
+
+
+ integrations + +
+ Integrations +
+

+ Build on GitHub +

+

+ Customize your process with GitHub apps and an intuitive API. Integrate the tools you already use or discover new favorites to create a happier, more efficient way of working. +

+

+ Learn about integrations +

+
+ +
+
+
+
+
+
+
+
+
+ +
+

+ Sometimes, there’s more than one tool for the job. Why not try something new? +

+

+ Browse GitHub Marketplace +

+
+
+
+ + + +
+
+

+ Get started for free — join the millions of developers already using GitHub to share their code, work together, and build amazing things. +

+
+
+
+
+ + + + +
+ + + + + + +
+ + + You can't perform that action at this time. +
+ + + + + + + + + + +
+ + You signed in with another tab or window. Reload to refresh your session. + You signed out in another tab or window. Reload to refresh your session. +
+ + + + + + + \ No newline at end of file diff --git a/monkey/0008/main.py b/monkey/0008/main.py new file mode 100644 index 00000000..08a3aef5 --- /dev/null +++ b/monkey/0008/main.py @@ -0,0 +1,27 @@ +# -*- coding:utf-8 -*- + +''' + +第 0008 题:一个HTML文件,找出里面的正文。 + +@Author monkey +@Date 2017-8-31 +''' +import json + +from bs4 import BeautifulSoup + + +def findContent(): + path = "The world's leading software development platform · GitHub.html" + + with open(path, encoding='UTF-8') as file: + soup = BeautifulSoup(file) + + # print(soup.prettify()) + print(soup.body) + + + +if __name__ == '__main__': + findContent() \ No newline at end of file diff --git "a/monkey/0009/The world's leading software development platform \302\267 GitHub.html" "b/monkey/0009/The world's leading software development platform \302\267 GitHub.html" new file mode 100644 index 00000000..4e6348b9 --- /dev/null +++ "b/monkey/0009/The world's leading software development platform \302\267 GitHub.html" @@ -0,0 +1,757 @@ + + + + + + + + + + + + + + + + + + + + + + + + The world's leading software development platform · GitHub + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+ Skip to content +
+ + + + + + + + + + +
+ +
+ +
+
+ + + +
+ + +
+
+
+
+

Built for developers

+

+ GitHub is a development platform inspired by the way you work. From open source to business, you can host and review code, manage projects, and build software alongside millions of other developers. +

+
+
+
+
+
+ +
+
+
+ + + +
+
+
+ GitHub for teams +
+

+ A better way to work together +

+

+ GitHub brings teams together to work through problems, move ideas forward, and learn from each other along the way. +

+ +
+ +
+
+
+
+ +
+
+

Write better code

+

+ Collaboration makes perfect. The conversations and code reviews that happen in Pull Requests help your team share the weight of your work and improve the software you build. +

+

+ Learn about code review on GitHub +

+
+
+ +
+
+ +
+
+

Manage your chaos

+

+ Take a deep breath. On GitHub, project management happens in Issues and Projects, right alongside your code. All you have to do is mention a teammate to get them involved. +

+

+ Learn about project management on GitHub +

+
+
+
+
+ +
+ +
+
+ security-admin + +
+ Security and administration +
+

+ Boxes? Check. +

+

+ We worried about your administrative and security needs so you don’t have to. From flexible hosting to authentication options, GitHub can help you meet your team’s requirements. +

+ +

+ + Learn about GitHub for Business + +

+ +
+
+ +
+
+

Code security

+

+ Prevent problems before they happen. Protected branches, signed commits, and required status checks protect your work and help you maintain a high standard for your code. +

+ +

Access controlled

+

+ Encourage teams to work together while limiting access to those who need it with granular permissions and authentication through SAML/SSO and LDAP. +

+ +

Hosted where you need it

+

+ Securely and reliably host your work on GitHub.com. Or, deploy GitHub Enterprise on your own servers or in a private cloud using Amazon Web Services, Azure or Google Cloud Platform. +

+
+
+
+
+ +
+
+
+ integrations + +
+ Integrations +
+

+ Build on GitHub +

+

+ Customize your process with GitHub apps and an intuitive API. Integrate the tools you already use or discover new favorites to create a happier, more efficient way of working. +

+

+ Learn about integrations +

+
+ +
+
+
+
+
+
+
+
+
+ +
+

+ Sometimes, there’s more than one tool for the job. Why not try something new? +

+

+ Browse GitHub Marketplace +

+
+
+
+ + + +
+
+

+ Get started for free — join the millions of developers already using GitHub to share their code, work together, and build amazing things. +

+
+
+
+
+ + + + +
+ + + + + + +
+ + + You can't perform that action at this time. +
+ + + + + + + + + + +
+ + You signed in with another tab or window. Reload to refresh your session. + You signed out in another tab or window. Reload to refresh your session. +
+ + + + + + + \ No newline at end of file diff --git a/monkey/0009/main.py b/monkey/0009/main.py new file mode 100644 index 00000000..8028f3fc --- /dev/null +++ b/monkey/0009/main.py @@ -0,0 +1,29 @@ +# -*- coding:utf-8 -*- + +''' + +第 0009 题:一个HTML文件,找出里面的链接。 + +@Author monkey +@Date 2017-8-31 +''' +import json + +from bs4 import BeautifulSoup + + +def findTagA(): + path = "The world's leading software development platform · GitHub.html" + + with open(path, encoding='UTF-8') as file: + soup = BeautifulSoup(file) + + # print(soup.prettify()) + links = [] + for i in soup.find_all('a'): + links.append(i['href']) + + print(links) + +if __name__ == '__main__': + findTagA() \ No newline at end of file diff --git a/monkey/0013/main.py b/monkey/0013/main.py index d62d05bd..8437bc33 100644 --- a/monkey/0013/main.py +++ b/monkey/0013/main.py @@ -26,9 +26,9 @@ def spider(url): # 下载图片 def download_Image(url, save_path): - urllib.request.urlretrieve(url, save_path) + urllib.urlretrieve(url, save_path) if __name__ == '__main__': url = "http://tieba.baidu.com/p/2166231880" - spider(url) \ No newline at end of file + spider(url) diff --git a/monkey/0014/main.py b/monkey/0014/main.py new file mode 100644 index 00000000..2f3bc10e --- /dev/null +++ b/monkey/0014/main.py @@ -0,0 +1,56 @@ +# -*- coding:utf-8 -*- + +''' + +第 0014 题: 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: +{ + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} +请将上述内容写到 student.xls 文件中。 + +@Author monkey +@Date 2017-8-31 +''' +import json +import xlwt + +def getStudent(): + + with open('student.txt', 'r', encoding = 'UTF-8') as file: + text = '' + for line in file: + text = text + line + + stu_json = json.loads(text, encoding = 'UTF-8') + + print(stu_json) + + writeInXLS(stu_json) + + +def writeInXLS(dict): + fileName = 'student.xls' + # 创建 xls 文件 + file = xlwt.Workbook(encoding = 'utf-8') + # 创建 表 + sheet = file.add_sheet('student', cell_overwrite_ok=True) + + row = 0 + col = 0 + + for k, v in sorted(dict.items(), key=lambda d:d[0]): + sheet.write(row, col, k) + for i in v: + col += 1 + sheet.write(row, col, i) + + row += 1 + col = 0 + + file.save(fileName) + print('写入成功') + +if __name__ == '__main__': + getStudent() \ No newline at end of file diff --git a/monkey/0014/student.txt b/monkey/0014/student.txt new file mode 100644 index 00000000..f06a601f --- /dev/null +++ b/monkey/0014/student.txt @@ -0,0 +1,5 @@ +{ + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] +} \ No newline at end of file diff --git a/monkey/0014/student.xls b/monkey/0014/student.xls new file mode 100644 index 00000000..19e2d043 Binary files /dev/null and b/monkey/0014/student.xls differ diff --git a/monkey/0015/city.txt b/monkey/0015/city.txt new file mode 100644 index 00000000..312f5c19 --- /dev/null +++ b/monkey/0015/city.txt @@ -0,0 +1,5 @@ +{ + "1" : "上海", + "2" : "北京", + "3" : "成都" +} \ No newline at end of file diff --git a/monkey/0015/city.xls b/monkey/0015/city.xls new file mode 100644 index 00000000..bf246c7d Binary files /dev/null and b/monkey/0015/city.xls differ diff --git a/monkey/0015/main.py b/monkey/0015/main.py new file mode 100644 index 00000000..e4ef735d --- /dev/null +++ b/monkey/0015/main.py @@ -0,0 +1,54 @@ +# -*- coding:utf-8 -*- + +''' +第 0015 题: 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示: + +{ + "1" : "上海", + "2" : "北京", + "3" : "成都" +} +请将上述内容写到 city.xls 文件中,如下图所示: + +@Author monkey +@Date 2017-8-31 +''' +import json +import xlwt + +def getCity(): + + with open('city.txt', 'r', encoding='UTF-8') as file: + text = '' + for line in file: + text = text + line + + city_json = json.loads(text, encoding = 'UTF-8') + print(city_json) + + writeInXLS(city_json) + + +def writeInXLS(dict): + fileName = 'city.xls' + + # 创建 文件 + file = xlwt.Workbook() + # 创建 表 + sheet = file.add_sheet('city', cell_overwrite_ok=True) + + row = 0 + col = 0 + + for k, v in sorted(dict.items(), key=lambda d:d[0]): + sheet.write(row, col, k) + col += 1 + sheet.write(row, col, v) + + row += 1 + col = 0 + + file.save(fileName) + +if __name__ == '__main__': + getCity() diff --git a/monkey/0016/main.py b/monkey/0016/main.py new file mode 100644 index 00000000..170ef6bb --- /dev/null +++ b/monkey/0016/main.py @@ -0,0 +1,55 @@ +# -*- coding:utf-8 -*- + +''' +纯文本文件 numbers.txt, 里面的内容(包括方括号)如下所示: + +[ + [1, 82, 65535], + [20, 90, 13], + [26, 809, 1024] +] +请将上述内容写到 numbers.xls 文件中,如下图所示: + +@Author monkey +@Date 2017-8-31 +''' +import json +import xlwt + +def getNumber(): + + with open('numbers.txt', 'r', encoding='UTF-8') as file: + text = '' + for line in file: + text = text + line + + number_json = json.loads(text, encoding = 'UTF-8') + print(number_json) + + writeInXLS(number_json) + + +def writeInXLS(list): + fileName = 'numbers.xls' + + # 创建 文件 + file = xlwt.Workbook() + # 创建 表 + sheet = file.add_sheet('numbers', cell_overwrite_ok=True) + + row = 0 + col = 0 + + + for l in list: + for i in l: + sheet.write(row, col, i) + col += 1 + + row += 1 + col = 0 + + file.save(fileName) + +if __name__ == '__main__': + getNumber() diff --git a/monkey/0016/numbers.txt b/monkey/0016/numbers.txt new file mode 100644 index 00000000..f5062e0a --- /dev/null +++ b/monkey/0016/numbers.txt @@ -0,0 +1,5 @@ +[ + [1, 82, 65535], + [20, 90, 13], + [26, 809, 1024] +] \ No newline at end of file diff --git a/monkey/0016/numbers.xls b/monkey/0016/numbers.xls new file mode 100644 index 00000000..3c9c2f3d Binary files /dev/null and b/monkey/0016/numbers.xls differ diff --git a/patchlion/0000/DrawHeadImage.py b/patchlion/0000/DrawHeadImage.py new file mode 100644 index 00000000..8bbc5148 --- /dev/null +++ b/patchlion/0000/DrawHeadImage.py @@ -0,0 +1,28 @@ +# -*- coding: utf-8 -*- +__author__ = 'PatchLion' + +from PIL import Image, ImageDraw,ImageFont + +def drawNumberOnIcon(imgpath, number): + img = Image.open(imgpath) + if (None == img): + print('打开图片失败') + return + + img = img.resize((160, 160)) + + print(imgpath, "->", img.format, img.size, img.mode) + draw = ImageDraw.Draw(img) + img_size = img.size + + font = ImageFont.truetype("Varela-Regular.otf", size=int(img_size[1]/4)) + text_size = font.getsize(str(number)) + + draw.text((img_size[0]-text_size[0], 0), str(number), font=font, fill=(255, 0, 0)) + + img.save('icon_withnumber.jpg') + + print('生成图片成功') + + +drawNumberOnIcon("icon.jpg", 21) \ No newline at end of file diff --git a/patchlion/0000/Varela-Regular.otf b/patchlion/0000/Varela-Regular.otf new file mode 100644 index 00000000..206f95a8 Binary files /dev/null and b/patchlion/0000/Varela-Regular.otf differ diff --git a/patchlion/0000/icon.JPG b/patchlion/0000/icon.JPG new file mode 100644 index 00000000..8d50fbef Binary files /dev/null and b/patchlion/0000/icon.JPG differ diff --git a/patchlion/0000/icon_withnumber.jpg b/patchlion/0000/icon_withnumber.jpg new file mode 100644 index 00000000..af81baea Binary files /dev/null and b/patchlion/0000/icon_withnumber.jpg differ diff --git a/patchlion/0001/CreateSN.py b/patchlion/0001/CreateSN.py new file mode 100644 index 00000000..3b2980a4 --- /dev/null +++ b/patchlion/0001/CreateSN.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +__author__ = 'PatchLion' +import uuid + +def createSN(count): + if count <= 0: + return + + + sns=[] + + for i in range(count): + sns.append(uuid.uuid4().hex.upper()) + + return sns + +def createSNAndSaveToFile(count, filepath): + sns = createSN(count) + + with open(filepath, 'wt') as f: + for sn in sns: + f.write(sn+"\n"); + +print(createSN(200)) +createSNAndSaveToFile(200, 'sns.txt') \ No newline at end of file diff --git a/patchlion/0001/sns.txt b/patchlion/0001/sns.txt new file mode 100644 index 00000000..8b3caa4e --- /dev/null +++ b/patchlion/0001/sns.txt @@ -0,0 +1,200 @@ +D6E7BE4F8DBB400DBCADFC71D0397C95 +E3C83441DCBD4916A4E921CF7E69BEEF +6DEB7C95E46B443FB464203C3239CAC9 +D9FCB5F316A743AB914E46074D813F08 +53896AC8D6EC4781AFE08D7A41FDD62A +A454638CA4F841698CD8443328053B8A +F1BD39FDDF6E488A96ED03ACE0880989 +7A18B38339AB42F0A29F96A13A65277C +92E8E5957A93425283CD8F9A5C7AC6A9 +1682747B4AC14B6BB854220C7795C351 +40584A6C19AB462FA0EDFEBCBA200317 +3B38874AD4E14D0384898C3F71570EA2 +6B3570EF96B343D2BA66D667202B7999 +756269BE448C46E989CEB279F4E6A0AC +8857CD736ECD45579A0E5BF365DFE303 +2DF003F62F8B4FD78C3582B2336FECD9 +0120A4D066C044C3BF4B3F283AC93F1C +685CBE0E5EC34384B435DFE05549E264 +EAECEAF83D214376937410867FFF813F +08EC93DB931E455099F207D64B2EF7BA +C27E8749C60443FAA1C9D332D8056E7D +BF2AF04E1BEB47E2808BB9F89CE48A57 +35806F99395D48CE95F3B20DB2C72877 +98C4CD32A09C47FCA792984144E34789 +69913A451CE943AC8F46E373C260E76F +88783C30A1A5418C9852CE1C11D66FC5 +251DFA24C113427DB1A4F84AD4A0A16B +A631E2EC4F804195A65C47EA3EC7BFE2 +DAF81DCA20374B50A4C2E5901FAFFE4C +E2705D418FD6428AA6F89232A03D1DF1 +2C09E4830228428B8683EF48662FD533 +B59451DA98094A439467E55A36BD1015 +54DA1A69C6994A96A2E3DD3F52AB47EB +298EACA4ED254F22AA577BF3F070F21D +6D3B63EE76E4440289ED91E9EAA2374B +2FDCEEC57F2F4D0E83C312DAE6404E0E +10C1BE2B6EE74AEEA798FD4F76D16F27 +4E73A1BAA99741B2B484DCDAD5541D97 +4CB1C9F16AA74FC996786497A034CF7A +1E5F42316AAF44B48F06F72C5DCADC96 +D97FFA9C38A74848AD4FFDC0BCDFE397 +D527818259154E03AFD63714A59D6CCF +5DDA33ADDA7A4C7380A7DFE5DAF429A5 +93B40E7017124F0083C13F2244DD58CB +FD657708028A462D9BFC2143B0E7F847 +B30EEFE0D52843DC9A7F71C5A2108A60 +BCA196A6BBE44AADAC7B1C421A7ED832 +2C7191D0AB0F4E1AA45CBC8756E6987F +BF15546D4BD84E02964D76165E9022D4 +C9DDD80402594334A5C4828C04832D60 +FA6532A3000C45478862A0156AD3E373 +F16CB5B1C76743379DE2104683CB840E +2B5C6D0A188D462A8F3D7930ACB112D3 +F3EA1DF6A64146D592FA562C18BF4DD2 +4C52BFA77E654E178E4F096DB33C3D5B +5DC2FD42388D48E7A95723E59BE1C259 +D291D238B3934F4FBF50E34452CFD557 +42C0AD39833949AD9BE90DA9444AD1D1 +4E8F59CF678445C494F34B5DA27D05B6 +7DBB506CB74D4C5AA7BC71A8C9F9846E +4DFDB7E3E0DD4C4A9E08CFE4053692F1 +7B322AE2926B4FD69080BB9012447437 +302D9BD6D5CB4B88B1A3213057C5CC45 +7D09EEAC14B648C39C92088DDCCC8B7E +6B3ED4C47E334791AE1CED843DAE4899 +CEA81BDA91A8439FB3018BEFB646F019 +315DBE136DB34FCA903D631286B1A662 +4B017A55EA7D410AAA790D2333C61594 +966549CCFA5C4B03BE79CFD916DC6269 +583AB01B84EA47CDA5A5C53AA27F06AA +8E6DFAF297584D0AAB6ACFA339830A83 +A65F7467EFA34D61B2D20C1195841148 +06F4F523DCD94696906F2E2A56B46AC1 +5A6A59EE44E34E42AD58933B65227E05 +FA83E66777134C51BA4DA9E94956C6CD +B64A713D76B941539628EA92B50A02D8 +9DCEA293DBCB45B2B560F6ECCEFCBF7B +E55AF3850F6A4F07BB28E47065D8A238 +3B58A064F9174242829B8E0ADF8BA09B +97A8300DD587458A92823F65DEFFFBB8 +F3A78DC166E94581A281533065F17311 +2D581CC2F7A2474B966C456559FAE3DA +4536F8162A2041F68CB07E86BD2F46C2 +5153184E53234ACC8874EE00EF6FDA0E +D57EB677DA234B629A24C056CB72BE00 +91901A4D1E1241448A6FD6C2413E818F +93BB457333444545B4CB7A18F1934FDF +9674B8DA0F2A405BB7E236DD40EDC7F1 +8207517B57AB484CB47DE54CBA20C893 +47A22567975746D2B42B822E5CBA4392 +C6BA941DCA8B409990A24BF64C9E06AA +4421081C06EE48218C5B1D173D29804A +367C39E7266A454E95D7888C9CE78F1C +05E590CB231A40F3B8CA9F9FEAD869D9 +FCE6EC0EF03A4103BE4247525DCF7B79 +EBCC771A7DE74ADD989A81D586170E6B +9C6060D6ECCF4A39BD08ABD50620D8EB +EBD26DD692964D14BFBA5A7E3B934338 +D7575BEF63CB4A779FF25E9CBC864EC4 +7B41987358D24CDCA157FFF855B3420D +D2A7DDC6BACC4A98B8239438CDACB3EE +C4316AB1F8584178B0E06A263F9DBCA8 +A0FE533D1D0B43398109ADB210CD0404 +E68EAF900E9A410B8FDB13F32ECAFEC2 +55617EA7008A44D1AD5E8016410E1107 +FB952D010F9F4F32AC2364BA13475B17 +24980F4C2248479BA54A3FCD35D8C1A9 +58AD60569A774F16B1D551E097E9454F +F9766715F95C416891A658475839AE7D +F670ECA0929149FFA1D5AA272EACF1AD +05F0A37684534FA282815093E7413D6A +EFA810265E5F4D80BA80BC3E0F36ECFD +96C9599153014A088DFCFE93E183C3F6 +C1762FCD8A9F4682ACA98D4CACCE24D0 +E4C8F0053414449294F74D190DD291E4 +199689A96CD041EB85CAE8C57BC6310E +048927803E8D40E3AFF100314A163DC8 +B9818ADDA4E54AD7B0BDE413849F42D3 +E83CC52FFD6C481D9526C0E890D12723 +47E26674DCA54DA2B0A6D1BAB5854CF3 +102D42B66DA74A25923E5FE663FB7D82 +CD8438F4F88E419FB70BD6AD461C8BAD +873FEA3FCB044970B15937CCFCC1AA13 +4025E874E046480BA91291D25D838E30 +B70D2D7AD78740F8979B9042E1E67B0A +2DE11879D52848128C2E3378E45E8C54 +99D680CCBB3A45AF8B0ABFBF32E57FF1 +4B3A7DE5BF6A488B8339910416E8C611 +4E5AD5924441485E932DD7120284E93E +D3C60168186244B2AA3FA579513A12D6 +75A9BD60F766410391861B8F6B958204 +7D3AB7509B1F4BF3B582446B759D16F9 +5A931FC10B1747FCA968B36A94DA6372 +1127110D4E66430C8A05128A87CF9BF5 +2E3391B7DCAB47FCBA4121925EE72616 +D585934B00364D22A44DC6F8A170BABA +F3375085D86347B8A9346EEB05D85EFE +6C98A9EB8CE5402A8008BC06E57FB72B +9C8528B3090E448DA64DE005811834CB +6394A70E285F4BADBC4D0C866DA3F8C7 +9DED2AC8E5914DFF8299309527764ADE +8CE5DA9D7B57476FBC00AC7AD1B9CE03 +0D6C8D235E694E429FA84D3380FF4F26 +B7232772ECC54307B5C3834B2C3952E2 +A94A3B61F994447F9B3171D8078F0475 +B726C16CB4D04E7590221B40197BC76C +A3C917BC085443558E87C352A9EDCD4E +17622D7067D941B6BB505AF0E4F27B6D +23218F4A89A549CAA2B30A992A37C639 +126DCC5794D44B4C8FE63CA36ECCDB5E +B5EA3D5D1A88464C8E5EBB1BB287E972 +7A8BEB2465C8408DA00201C1F7B4AA10 +F3AF716F58654B02B97433A27846C7E7 +A87AE973D49D4154AC9D3BD4D7081436 +F44F33C608F6454F997D497B26FB3BBA +969C4D7030C74661BCE12F793068D9D4 +D4DB2913A8D64F2BA98FEEB16028ECD3 +A4AE0465CCDC442FB3A793757CCB28A3 +8102CF06BAD24BBD8BEC48828AAC7D21 +CCD9B4EC7A67422D9447600ADDBE14EA +4A138CC7A4924CE99E0B22A838AD5B17 +04C5741D3D594A1EBDE6A9C44A3AEB2E +F3E98C2A7E0E4CDCB77BBE53BFC9CB20 +9983125A3B544AAE8F3FAEEE67780D43 +C92790AA97A54BCE9BC99210482722D0 +4124C0BE33024CD68CE0CB81289DBABA +D31F84B4EBA54F9EA1A63377DA620B02 +56ABB33312C14F6D95EF9B7E939355FD +A00C5FCC2A46473F8FBB9571C68925D0 +7DF5ABC4D6C841DDB65646C2101CDF75 +7DFB1BE67C1141CCA708EF1B0A2039D2 +77B726FD00DA4F42B8DE56B77B363FF8 +BC821284EE9D4EF99599A254301B7A9B +0FAA403A28DF4396B3E020FEB7EA79DF +F568103AA32E4985B544DF03CF6EB513 +8F8493CA9DC545CEB05A2BC09A0F2E5A +682F0A441022424D89EE3F17DC6F4BD9 +FA74F790D66E4DAA9AA842EF0030FD24 +B984010789BB4B74AC0F4C8635C3912B +AA6D2CBA27C643D48A8DB81A4EB16299 +9438EF86D80B4438948B8D593D90C91A +59C16C42EF514F78835521931A03D9B5 +8189E4E9B8AD4092BFBF24DC76D92C5C +AE5386C5809347D4A899218C86B0D10A +A450A51757EA4CD0B47528D2FD4E9A5F +DADFE9DE21A545F881F96D31ED817BB5 +CAAABF11539A49A5A7E5E055E18C5262 +B793CACDF5AE464F86ABC432966F3853 +D9B0417D1560454AADF1D87ECD98967A +2262EE1EA75C4FDF8674EE2271D23FD8 +91380450B6474EA69C4D3A1DE3280A23 +2B67B8C203C648FCA5F6C0A0B085837F +49AAAB2A48C645B5B0E2A3EA94143EB4 +AEC612FF401E4F448C9B5B5F32CA3F95 +BB651687308E420E84C2BF2475F1BBFC +6BAFD6CE048644E6AF4C83B445A44167 +94775518A9CE40F3892427E4C0F9AA28 +27BE68E1B727408499DB50CDED3042F3 +212F1919D1FD44EDA80652FC1BB9B5D7 +4898E391F2704A81BA13D664A9ED433D diff --git a/patchlion/0002/SaveSNsToMySQL.py b/patchlion/0002/SaveSNsToMySQL.py new file mode 100644 index 00000000..ae7ee817 --- /dev/null +++ b/patchlion/0002/SaveSNsToMySQL.py @@ -0,0 +1,35 @@ +# -*- coding: utf-8 -*- +__author__ = 'PatchLion' + +import pymysql + +sns = [] + +with open('../0001/sns.txt', 'rt') as f: + for line in f.readlines(): + sn = line.strip() + sns.append(sn) + +print(sns) + +def insertToDB(sns): + if(len(sns) == 0): + return + + conn = pymysql.connect(host='127.0.0.1', port=3306,user='root',password='root', db='python') + cur = conn.cursor() + try: + cur.execute('DELETE FROM sns') + conn.commit() + + for sn in sns: + cur.execute('INSERT INTO sns VALUE ("%s")' % sn) + conn.commit() + conn.close() + + print('Done!') + except: + conn.rollback() + + +insertToDB(sns) \ No newline at end of file diff --git a/patchlion/0004/CountChar.py b/patchlion/0004/CountChar.py new file mode 100644 index 00000000..00b4c7de --- /dev/null +++ b/patchlion/0004/CountChar.py @@ -0,0 +1,21 @@ +# -*- coding: utf-8 -*- +__author__ = 'PatchLion' + +result = {} + +def doCount(c): + if c in result.keys(): + result[c] = result[c]+1 + else: + result[c]=1 + +def countChar(file_path): + with open(file_path, 'rt') as f: + txt = f.read() + f.close() + list(map(doCount, txt)) + +countChar('PrivacyPolicy.txt') + +print(result) +print(len(result)) diff --git a/patchlion/0004/PrivacyPolicy.txt b/patchlion/0004/PrivacyPolicy.txt new file mode 100644 index 00000000..2400c7cd --- /dev/null +++ b/patchlion/0004/PrivacyPolicy.txt @@ -0,0 +1,37 @@ +Privacy Policy +Last Updated: July 13, 2015 +========================= +Your privacy is important to xxxxx. Our Privacy Policy covers how we collect, use, disclose, transfer, and store your information. We hope our policy is straightforward and easy-to-understand. Please take a minute to review the details of our privacy practices below. + +Collection and Use of Non-Personal Information +We may collect non-personal information, such as data that does not allow direct association with any specific individual. Non-personal data is collected, used, transferred, and disclosed for a number of purposes. These purposes include the use of cookies and other technologies that give us a better understanding of our users' needs. A "cookie" is a small data file that is stored on your device. Most Internet browsers automatically accept cookies. We use information collected from cookies to improve users' experience and the overall quality of our services. + +Collection and Use of Personal Information / Content +Personal information may be collected in a number of ways when you use any of the products or services offered by xxxxx. We may prompt you to voluntarily provide information, including personal information. For example, we may ask to collect your name, email address, user name, telephone number and credit card number whenever you register for an account, purchase our products, or contact us via email. + +From time-to-time we may also collect personal information you provide in connection with your participation in surveys, sweepstakes, contests, promotional offers, and other activities on the site. + +When you use our email support services, we collect your correspondence in order to build up a public knowledge base, which will be available to all users of the site. Your correspondence will most likely not be used verbatim, but paraphrased in an FAQ format. + +We use the information collected through xxxxx products: (I) to communicate with you; (II) to process your requests and transactions; (III) to improve the site; (IV) to customize the services and/or products we provide to you; (V) to assist with our product and service development; (VI) to perform marketing analysis; and (VII) for other purposes related to our business. + +The images you upload to xxxxx for editing will not be stored unless your request a link to revisit your works or you actually request a xxxxx service that requires storage of this image (e.g. to temporarily save the unfinished works under your xxxxx account). + +If you are using xxxxx Market Service to share / sell your photo works, refer to clause "3 xxxxx's Use" of the "xxxxx Market Terms" in the "Terms of Services" for detailed information on how we handle these images. + +Transparency and Choice +You may configure your browser to block cookies, including cookies associated with our services. However, many of our services may not function correctly with cookies disabled. You can also control which social websites you upload images to. + +Third party accounts +xxxxx does not store your Facebook, Twitter, or Flickr passwords. Your account information is not disclosed to xxxxx and you are free to cancel any of your social networking website connections with xxxxx at any time. + +Enforcement +We regularly review our own compliance with our Privacy Policy. If you submit a formal written complaint, we will contact you and try our best to resolve the issue. + +Changes +Our Privacy Policy may change occasionally. We will not reduce your rights under this Privacy Policy without providing explicit, advanced notice. We will post any privacy policy changes on this page and, in the event of significant changes, we will provide a more prominent notice (such as an email notification). We will also archive prior versions of this Privacy Policy for your review. + + +If you have any questions regarding this Privacy Policy, please feel free to contact us(Support@xxxxx.com). + + diff --git a/patchlion/0010/CreateIdentifyingCode.py b/patchlion/0010/CreateIdentifyingCode.py new file mode 100644 index 00000000..8a9fc92b --- /dev/null +++ b/patchlion/0010/CreateIdentifyingCode.py @@ -0,0 +1,33 @@ +# -*- coding: utf-8 -*- +__author__ = 'PatchLion' + +from PIL import Image, ImageDraw, ImageFont, ImageFilter +import random + +def randChar(): + #65-90 A-Z + return chr(random.randint(65, 90)) + +def randColor(): + return (random.randint(0, 255), random.randint(0, 255), random.randint(0, 255)) + +def createIdentifyingCode(size, charcount=4): + width=size*charcount + height=size + + img = Image.new('RGB', (width, height), (255, 255, 255)) + draw = ImageDraw.Draw(img) + for x in range(width): + for y in range(height): + draw.point((x, y), fill=randColor()) + + font = ImageFont.truetype("../0000/Varela-Regular.otf", size=size) + #draw.text((0, 0), randChar(), fill=randColor()) + for i in range(charcount): + draw.text((i*size + 10, -10), randChar(), fill=randColor(), font=font) + + img = img.filter(ImageFilter.BLUR) + img.save('ic.jpg', 'jpeg') + +createIdentifyingCode(60) + diff --git a/patchlion/0010/ic.jpg b/patchlion/0010/ic.jpg new file mode 100644 index 00000000..ac1461a8 Binary files /dev/null and b/patchlion/0010/ic.jpg differ diff --git a/preytaren/README.md b/preytaren/README.md new file mode 100644 index 00000000..e558abb8 --- /dev/null +++ b/preytaren/README.md @@ -0,0 +1,3 @@ +# Show-Me-the-Code +preytaren 的解答链接 [戳这里](https://github.com/preytaren/showMeTheCode-Solutions), +大概完成了20个题目左右 diff --git a/rosalesjahaziel/0001/0001.py b/rosalesjahaziel/0001/0001.py new file mode 100644 index 00000000..1c0511b5 --- /dev/null +++ b/rosalesjahaziel/0001/0001.py @@ -0,0 +1,12 @@ +import random +import string + + +# this method use the 'key' to select 10 random characters +def generateCode(count): + for code in range(count): + key = string.upper('0123456789abcefghijklmnopqrstuvwxyz') + code = string.join(random.sample(key, 10)) + print(code) + +generateCode(10) # generate the amount of codes you send as count diff --git a/will/0000/add_num.py b/will/0000/add_num.py new file mode 100644 index 00000000..cb116444 --- /dev/null +++ b/will/0000/add_num.py @@ -0,0 +1,37 @@ +# 第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果 +''' +涉及模块/库: + 1.Pillow :http://pillow-cn.readthedocs.io/zh_CN/latest/ + 2.random +核心方法 + 1.ImageFont Module: + PIL.ImageFont.truetype(font=None, size=10, index=0, encoding='', filename=None) + 2.ImageDraw Module: + PIL.ImageDraw.Draw.text(xy, text, fill=None, font=None, anchor=None) +想法思路: + 1.Pillow库所读的图片以左上角为原点,类似于第四象限 + 2.数字添加在图片的右上角,注意控制图片的位置,及xy参数 +''' + + +import random +from PIL import Image, ImageDraw, ImageFont +new = 'new.jpg' + +def add_num(pic, text): + 'add a message number on pics' + try: + im = Image.open(pic) + except: + print('failed') + width, height = im.size + fontsize = height / 4 + draw = ImageDraw.Draw(im) + font = ImageFont.truetype('arial.ttf', int(fontsize)) + draw.text((0.7*width, 0.02*height), text, font=font, fill='red') + im.save(new) + +if __name__ == "__main__": + number = str(random.randint(1, 99)) + pic = './old.jpg' + add_num(pic, number) diff --git a/will/0001/app_store.py b/will/0001/app_store.py new file mode 100644 index 00000000..1ca23d04 --- /dev/null +++ b/will/0001/app_store.py @@ -0,0 +1,62 @@ +# 第 0001 题: 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? +''' +想法思路: + 1. 字符串方式 + 2. 时间戳方式 + 3. UUID全局标识符,使用uuid1或者uuid5算法 + 4. 加密算法 +''' + +import random, string, time, math, uuid + +chars = string.ascii_letters + string.digits + +def gen1(): + ''' + 根据26个大小写字母和数字随机选择10个 + 涉及模块: + 1. random: + random.random()函数是这个模块中最常用的方法了,它会生成一个随机的浮点数,范围是在0.0~1.0之间。 + random.uniform()正好弥补了上面函数的不足,它可以设定浮点数的范围,一个是上限,一个是下限。 + random.randint()随机生一个整数int类型,可以指定这个整数的范围,同样有上限和下限值。 + random.choice()可以从任何序列,比如list列表中,选取一个随机的元素返回,可以用于字符串、列表、元组等。 + random.shuffle()如果你想将一个序列中的元素,随机打乱的话可以用这个函数方法。 + random.sample()可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。 + 2. string + string.digits: 0-9 + string.printable:可打印字符集 + string.ascii_letters: 大小字母集 + ''' + key = ''.join(random.sample(chars, 10)) + #key2 = ''.join(random.choice(chars) for i in range(10)) + return key + +def gen2(): + ''' + 当前时间戳生成 + 1. math.modf(x)返回一个list,包括小数部分及整数部分 + 2. https://gist.github.com/willhunger/85b119793f01211de50db0e0a257dbf0 + 3. http://www.wklken.me/posts/2015/03/03/python-base-datetime.html + ''' + key = math.modf(time.time())[0] + return key + +def gen3(): + ''' + UUID:通用唯一识别码,由一组32位数的16进制数字所构成 + uuid1()——基于时间戳 + 由MAC地址、当前时间戳、随机数生成。可以保证全球范围内的唯一性,但MAC的使用同时带来安全性问题,局域网中可以使用IP来代替MAC。 + uuid2()——基于分布式计算环境DCE(Python中没有这个函数) + 算法与uuid1相同,不同的是把时间戳的前4位置换为POSIX的UID,实际中很少用到该方法。 + uuid3()——基于名字的MD5散列值 + 通过计算名字和命名空间的MD5散列值得到,保证了同一命名空间中不同名字的唯一性,和不同命名空间的唯一性,但同一命名空间的同一名字生成相同的uuid。 + uuid4()——基于随机数 + 由伪随机数得到,有一定的重复概率,该概率可以计算出来。 + uuid5()——基于名字的SHA-1散列值 + 算法与uuid3相同,不同的是使用 Secure Hash Algorithm 1 算法 + + ''' + return uuid.uuid4() + +for i in range(200): + print(gen2()) diff --git a/will/0002/into_mysql.py b/will/0002/into_mysql.py new file mode 100644 index 00000000..18f23064 --- /dev/null +++ b/will/0002/into_mysql.py @@ -0,0 +1,44 @@ +# 第 0002 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。 +''' + 相关模块/库 : pymysql + 1. http://www.runoob.com/python3/python3-mysql.html +''' +import random, string, time, math, uuid, pymysql + +chars = string.ascii_letters + string.digits + +def gen1(): + key = ''.join(random.sample(chars, 10)) + #key2 = ''.join(random.choice(chars) for i in range(10)) + return key + +def gen2(): + key = math.modf(time.time())[0] + return key + +def gen3(): + return uuid.uuid4() + +def dbp(): + db = pymysql.connect('localhost', 'root', '1213', 'python') + cursor = db.cursor() + cursor.execute("DROP TABLE IF EXISTS CODE") + sql = """CREATE TABLE CODE ( + app_code CHAR(100) NOT NULL + )""" + cursor.execute(sql) + return db, cursor + +if __name__ == '__main__': + db, cursor = dbp() + for i in range(200): + add_code = "INSERT INTO CODE(app_code) VALUES ('%s')" % gen2() + # print(add_code) + try: + cursor.execute(add_code) + db.commit() + except: + db.rollback() + db.close() + print('finish') + diff --git a/will/0003/into_redis.py b/will/0003/into_redis.py new file mode 100644 index 00000000..362a1aa0 --- /dev/null +++ b/will/0003/into_redis.py @@ -0,0 +1,24 @@ +# 第 0003 题: 将 0001 题生成的 200 个激活码(或者优惠券)保存到 Redis 非关系型数据库中。 +import random, string, time, math, uuid, redis + +chars = string.ascii_letters + string.digits + +def gen1(): + key = ''.join(random.sample(chars, 10)) + #key2 = ''.join(random.choice(chars) for i in range(10)) + return key + +def gen2(): + key = math.modf(time.time())[0] + return key + +def gen3(): + return uuid.uuid4() + +if __name__ == '__main__': + r = redis.Redis(host='localhost', port=6379, db=0) + # r.set('name', 'will') + # print(r.get('name')) + for i in range(200): + r.sadd('code', gen1()) + r.save() diff --git a/will/0004/sum.py b/will/0004/sum.py new file mode 100644 index 00000000..6ee85b28 --- /dev/null +++ b/will/0004/sum.py @@ -0,0 +1,21 @@ +# 第 0004 题: 任一个英文的纯文本文件,统计其中的单词出现的个数。 + +import re +path = './a.txt' + +def count(data): + words = re.compile('[a-zA-Z0-9]+') + di = {} + for i in words.findall(data): + if i not in di: + di[i] = 1 + else: + di[i] += 1 + return di + +if __name__ == '__main__': + with open(path, 'r') as file: + data = file.read().lower() + sumofword = count(data) + print(sumofword) + file.close() diff --git a/will/README.md b/will/README.md new file mode 100644 index 00000000..bfd61ac7 --- /dev/null +++ b/will/README.md @@ -0,0 +1,199 @@ +## Python 练习册,每天一个小程序 ## + + +#### 说明: #### + +- Python 练习册,每天一个小程序。注:将 Python 换成其他语言,大多数题目也适用 +- 不会出现诸如「打印九九乘法表」、「打印水仙花」之类的题目 +- [点此链接,会看到部分题目的代码,仅供参考](https://github.com/Show-Me-the-Code/python) +- 本文本文由@史江歌(shijiangge@gmail.com QQ:499065469)根据互联网资料收集整理而成,感谢互联网,感谢各位的分享。鸣谢!本文会不断更新。 + +> Talk is cheap. Show me the code.--Linus Torvalds + +---------- + +**第 0000 题:** 将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 +类似于图中效果 + +![头像](http://i.imgur.com/sg2dkuY.png?1) + +**第 0001 题:** 做为 Apple Store App 独立开发者,你要搞限时促销,为你的应用**生成激活码**(或者优惠券),使用 Python 如何生成 200 个激活码(或者优惠券)? + +**第 0002 题:** 将 0001 题生成的 200 个激活码(或者优惠券)保存到 **MySQL** 关系型数据库中。 + +**第 0003 题:** 将 0001 题生成的 200 个激活码(或者优惠券)保存到 **Redis** 非关系型数据库中。 + +**第 0004 题:** 任一个英文的纯文本文件,统计其中的单词出现的个数。 + +**第 0005 题:** 你有一个目录,装了很多照片,把它们的尺寸变成都不大于 iPhone5 分辨率的大小。 + +**第 0006 题:** 你有一个目录,放了你一个月的日记,都是 txt,为了避免分词的问题,假设内容都是英文,请统计出你认为每篇日记最重要的词。 + +**第 0007 题:** 有个目录,里面是你自己写过的程序,统计一下你写过多少行代码。包括空行和注释,但是要分别列出来。 + +**第 0008 题:** 一个HTML文件,找出里面的**正文**。 + +**第 0009 题:** 一个HTML文件,找出里面的**链接**。 + +**第 0010 题:** 使用 Python 生成类似于下图中的**字母验证码图片** + +![字母验证码](http://i.imgur.com/aVhbegV.jpg) + +- [阅读资料](http://stackoverflow.com/questions/2823316/generate-a-random-letter-in-python) + +**第 0011 题:** 敏感词文本文件 filtered_words.txt,里面的内容为以下内容,当用户输入敏感词语时,则打印出 Freedom,否则打印出 Human Rights。 + + 北京 + 程序员 + 公务员 + 领导 + 牛比 + 牛逼 + 你娘 + 你妈 + love + sex + jiangge + +**第 0012 题:** 敏感词文本文件 filtered_words.txt,里面的内容 和 0011题一样,当用户输入敏感词语,则用 星号 * 替换,例如当用户输入「北京是个好城市」,则变成「**是个好城市」。 + +**第 0013 题:** 用 Python 写一个爬图片的程序,爬 [这个链接里的日本妹子图片 :-)](http://tieba.baidu.com/p/2166231880) + +- [参考代码](http://www.v2ex.com/t/61686 "参考代码") + +**第 0014 题:** 纯文本文件 student.txt为学生信息, 里面的内容(包括花括号)如下所示: + + { + "1":["张三",150,120,100], + "2":["李四",90,99,95], + "3":["王五",60,66,68] + } + +请将上述内容写到 student.xls 文件中,如下图所示: + +![student.xls](http://i.imgur.com/nPDlpme.jpg) + +- [阅读资料](http://www.cnblogs.com/skynet/archive/2013/05/06/3063245.html) 腾讯游戏开发 XML 和 Excel 内容相互转换 + +**第 0015 题:** 纯文本文件 city.txt为城市信息, 里面的内容(包括花括号)如下所示: + + { + "1" : "上海", + "2" : "北京", + "3" : "成都" + } + +请将上述内容写到 city.xls 文件中,如下图所示: + +![city.xls](http://i.imgur.com/rOHbUzg.png) + + +**第 0016 题:** 纯文本文件 numbers.txt, 里面的内容(包括方括号)如下所示: + + [ + [1, 82, 65535], + [20, 90, 13], + [26, 809, 1024] + ] + +请将上述内容写到 numbers.xls 文件中,如下图所示: + +![numbers.xls](http://i.imgur.com/iuz0Pbv.png) + +**第 0017 题:** 将 第 0014 题中的 student.xls 文件中的内容写到 student.xml 文件中,如 + +下所示: + + + + + + { + "1" : ["张三", 150, 120, 100], + "2" : ["李四", 90, 99, 95], + "3" : ["王五", 60, 66, 68] + } + + + + +**第 0018 题:** 将 第 0015 题中的 city.xls 文件中的内容写到 city.xml 文件中,如下所示: + + + + + + { + "1" : "上海", + "2" : "北京", + "3" : "成都" + } + + + +**第 0019 题:** 将 第 0016 题中的 numbers.xls 文件中的内容写到 numbers.xml 文件中,如下 + +所示: + + + + + + + [ + [1, 82, 65535], + [20, 90, 13], + [26, 809, 1024] + ] + + + + +**第 0020 题:** [登陆中国联通网上营业厅](http://iservice.10010.com/index_.html) 后选择「自助服务」 --> 「详单查询」,然后选择你要查询的时间段,点击「查询」按钮,查询结果页面的最下方,点击「导出」,就会生成类似于 2014年10月01日~2014年10月31日通话详单.xls 文件。写代码,对每月通话时间做个统计。 + +**第 0021 题:** 通常,登陆某个网站或者 APP,需要使用用户名和密码。密码是如何加密后存储起来的呢?请使用 Python 对密码加密。 + +- 阅读资料 [用户密码的存储与 Python 示例](http://zhuoqiang.me/password-storage-and-python-example.html) + +- 阅读资料 [Hashing Strings with Python](http://www.pythoncentral.io/hashing-strings-with-python/) + +- 阅读资料 [Python's safest method to store and retrieve passwords from a database](http://stackoverflow.com/questions/2572099/pythons-safest-method-to-store-and-retrieve-passwords-from-a-database) + +**第 0022 题:** iPhone 6、iPhone 6 Plus 早已上市开卖。请查看你写得 第 0005 题的代码是否可以复用。 + +**第 0023 题:** 使用 Python 的 Web 框架,做一个 Web 版本 留言簿 应用。 + +[阅读资料:Python 有哪些 Web 框架](http://v2ex.com/t/151643#reply53) + +- ![留言簿参考](http://i.imgur.com/VIyCZ0i.jpg) + + +**第 0024 题:** 使用 Python 的 Web 框架,做一个 Web 版本 TodoList 应用。 + +- ![SpringSide 版TodoList](http://i.imgur.com/NEf7zHp.jpg) + +**第 0025 题:** 使用 Python 实现:对着电脑吼一声,自动打开浏览器中的默认网站。 + + + 例如,对着笔记本电脑吼一声“百度”,浏览器自动打开百度首页。 + + 关键字:Speech to Text + +参考思路: +1:获取电脑录音-->WAV文件 + python record wav + +2:录音文件-->文本 + + STT: Speech to Text + + STT API Google API + +3:文本-->电脑命令 diff --git a/wssywh/0000/0000.py b/wssywh/0000/0000.py new file mode 100644 index 00000000..34932429 --- /dev/null +++ b/wssywh/0000/0000.py @@ -0,0 +1,18 @@ +#coding:utf-8 +#第 0000 题:将你的 QQ 头像(或者微博头像)右上角加上红色的数字,类似于微信未读信息数量那种提示效果。 +from PIL import Image, ImageDraw, ImageFont + +__author__ = 'Hunter' + +def picture_num(img,num): + im = ImageDraw.Draw(img) + print(img.size) + numFont = ImageFont.truetype("ahronbd.ttf",300) + im.text((260, -50), num, fill=(255, 0, 0),font=numFont) + img.save("wechat_100.jpg") + img.show() + + +if __name__ == '__main__': + img = Image.open("wechat.jpg") + picture_num(img,"100") \ No newline at end of file diff --git a/wssywh/0000/ahronbd.ttf b/wssywh/0000/ahronbd.ttf new file mode 100644 index 00000000..a0bd1911 Binary files /dev/null and b/wssywh/0000/ahronbd.ttf differ diff --git a/wssywh/0000/wechat.jpg b/wssywh/0000/wechat.jpg new file mode 100644 index 00000000..e1966da9 Binary files /dev/null and b/wssywh/0000/wechat.jpg differ diff --git a/wssywh/0000/wechat_100.jpg b/wssywh/0000/wechat_100.jpg new file mode 100644 index 00000000..99a17c13 Binary files /dev/null and b/wssywh/0000/wechat_100.jpg differ diff --git a/wssywh/0001/0001.py b/wssywh/0001/0001.py new file mode 100644 index 00000000..0e2ac617 --- /dev/null +++ b/wssywh/0001/0001.py @@ -0,0 +1,19 @@ +#coding:utf-8 + +"""第0001题:做为Apple Store App独立开发者,你要搞限时促销,为你的应用生成激活码(或者优惠券), +使用Python如何生成200个激活码(或者优惠券)?""" + + + +import uuid + +def get_id(num): + list_id = [] + for i in range(num): + id = str(uuid.uuid1()).replace('-','') + list_id.append(id) + return list_id +id = get_id(200) +with open("file_id.txt","w") as file: + for i in id: + file.write(i+"\n") \ No newline at end of file diff --git a/wssywh/0001/file_id b/wssywh/0001/file_id new file mode 100644 index 00000000..e69de29b diff --git a/wssywh/0001/file_id.txt b/wssywh/0001/file_id.txt new file mode 100644 index 00000000..50758132 --- /dev/null +++ b/wssywh/0001/file_id.txt @@ -0,0 +1,200 @@ +bac213149c1c11e791d47427ea33ef0a +bac213159c1c11e791d47427ea33ef0a +bac213169c1c11e791d47427ea33ef0a +bac213179c1c11e791d47427ea33ef0a +bac213189c1c11e791d47427ea33ef0a +bac213199c1c11e791d47427ea33ef0a +bac2131a9c1c11e791d47427ea33ef0a +bac2131b9c1c11e791d47427ea33ef0a +bac2131c9c1c11e791d47427ea33ef0a +bac2131d9c1c11e791d47427ea33ef0a +bac2131e9c1c11e791d47427ea33ef0a +bac2131f9c1c11e791d47427ea33ef0a +bac213209c1c11e791d47427ea33ef0a +bac213219c1c11e791d47427ea33ef0a +bac213229c1c11e791d47427ea33ef0a +bac213239c1c11e791d47427ea33ef0a +bac213249c1c11e791d47427ea33ef0a +bac213259c1c11e791d47427ea33ef0a +bac213269c1c11e791d47427ea33ef0a +bac213279c1c11e791d47427ea33ef0a +bac213289c1c11e791d47427ea33ef0a +bac213299c1c11e791d47427ea33ef0a +bac2132a9c1c11e791d47427ea33ef0a +bac2132b9c1c11e791d47427ea33ef0a +bac2132c9c1c11e791d47427ea33ef0a +bac2132d9c1c11e791d47427ea33ef0a +bac2132e9c1c11e791d47427ea33ef0a +bac2132f9c1c11e791d47427ea33ef0a +bac213309c1c11e791d47427ea33ef0a +bac213319c1c11e791d47427ea33ef0a +bac213329c1c11e791d47427ea33ef0a +bac213339c1c11e791d47427ea33ef0a +bac213349c1c11e791d47427ea33ef0a +bac213359c1c11e791d47427ea33ef0a +bac213369c1c11e791d47427ea33ef0a +bac213379c1c11e791d47427ea33ef0a +bac213389c1c11e791d47427ea33ef0a +bac213399c1c11e791d47427ea33ef0a +bac2133a9c1c11e791d47427ea33ef0a +bac2133b9c1c11e791d47427ea33ef0a +bac2133c9c1c11e791d47427ea33ef0a +bac2133d9c1c11e791d47427ea33ef0a +bac2133e9c1c11e791d47427ea33ef0a +bac2133f9c1c11e791d47427ea33ef0a +bac213409c1c11e791d47427ea33ef0a +bac213419c1c11e791d47427ea33ef0a +bac213429c1c11e791d47427ea33ef0a +bac213439c1c11e791d47427ea33ef0a +bac213449c1c11e791d47427ea33ef0a +bac213459c1c11e791d47427ea33ef0a +bac213469c1c11e791d47427ea33ef0a +bac213479c1c11e791d47427ea33ef0a +bac213489c1c11e791d47427ea33ef0a +bac213499c1c11e791d47427ea33ef0a +bac2134a9c1c11e791d47427ea33ef0a +bac2134b9c1c11e791d47427ea33ef0a +bac2134c9c1c11e791d47427ea33ef0a +bac2134d9c1c11e791d47427ea33ef0a +bac2134e9c1c11e791d47427ea33ef0a +bac2134f9c1c11e791d47427ea33ef0a +bac213509c1c11e791d47427ea33ef0a +bac213519c1c11e791d47427ea33ef0a +bac213529c1c11e791d47427ea33ef0a +bac213539c1c11e791d47427ea33ef0a +bac213549c1c11e791d47427ea33ef0a +bac213559c1c11e791d47427ea33ef0a +bac213569c1c11e791d47427ea33ef0a +bac213579c1c11e791d47427ea33ef0a +bac213589c1c11e791d47427ea33ef0a +bac213599c1c11e791d47427ea33ef0a +bac2135a9c1c11e791d47427ea33ef0a +bac2135b9c1c11e791d47427ea33ef0a +bac2135c9c1c11e791d47427ea33ef0a +bac2135d9c1c11e791d47427ea33ef0a +bac2135e9c1c11e791d47427ea33ef0a +bac2135f9c1c11e791d47427ea33ef0a +bac213609c1c11e791d47427ea33ef0a +bac213619c1c11e791d47427ea33ef0a +bac213629c1c11e791d47427ea33ef0a +bac213639c1c11e791d47427ea33ef0a +bac213649c1c11e791d47427ea33ef0a +bac213659c1c11e791d47427ea33ef0a +bac213669c1c11e791d47427ea33ef0a +bac213679c1c11e791d47427ea33ef0a +bac213689c1c11e791d47427ea33ef0a +bac213699c1c11e791d47427ea33ef0a +bac2136a9c1c11e791d47427ea33ef0a +bac2136b9c1c11e791d47427ea33ef0a +bac2136c9c1c11e791d47427ea33ef0a +bac2136d9c1c11e791d47427ea33ef0a +bac2136e9c1c11e791d47427ea33ef0a +bac2136f9c1c11e791d47427ea33ef0a +bac213709c1c11e791d47427ea33ef0a +bac213719c1c11e791d47427ea33ef0a +bac213729c1c11e791d47427ea33ef0a +bac213739c1c11e791d47427ea33ef0a +bac213749c1c11e791d47427ea33ef0a +bac213759c1c11e791d47427ea33ef0a +bac213769c1c11e791d47427ea33ef0a +bac213779c1c11e791d47427ea33ef0a +bac213789c1c11e791d47427ea33ef0a +bac213799c1c11e791d47427ea33ef0a +bac2137a9c1c11e791d47427ea33ef0a +bac2137b9c1c11e791d47427ea33ef0a +bac2137c9c1c11e791d47427ea33ef0a +bac2137d9c1c11e791d47427ea33ef0a +bac2137e9c1c11e791d47427ea33ef0a +bac2137f9c1c11e791d47427ea33ef0a +bac213809c1c11e791d47427ea33ef0a +bac213819c1c11e791d47427ea33ef0a +bac213829c1c11e791d47427ea33ef0a +bac213839c1c11e791d47427ea33ef0a +bac213849c1c11e791d47427ea33ef0a +bac213859c1c11e791d47427ea33ef0a +bac213869c1c11e791d47427ea33ef0a +bac213879c1c11e791d47427ea33ef0a +bac213889c1c11e791d47427ea33ef0a +bac213899c1c11e791d47427ea33ef0a +bac2138a9c1c11e791d47427ea33ef0a +bac2138b9c1c11e791d47427ea33ef0a +bac2138c9c1c11e791d47427ea33ef0a +bac2138d9c1c11e791d47427ea33ef0a +bac2138e9c1c11e791d47427ea33ef0a +bac2138f9c1c11e791d47427ea33ef0a +bac213909c1c11e791d47427ea33ef0a +bac213919c1c11e791d47427ea33ef0a +bac213929c1c11e791d47427ea33ef0a +bac213939c1c11e791d47427ea33ef0a +bac213949c1c11e791d47427ea33ef0a +bac213959c1c11e791d47427ea33ef0a +bac213969c1c11e791d47427ea33ef0a +bac213979c1c11e791d47427ea33ef0a +bac213989c1c11e791d47427ea33ef0a +bac213999c1c11e791d47427ea33ef0a +bac2139a9c1c11e791d47427ea33ef0a +bac2139b9c1c11e791d47427ea33ef0a +bac2139c9c1c11e791d47427ea33ef0a +bac2139d9c1c11e791d47427ea33ef0a +bac2139e9c1c11e791d47427ea33ef0a +bac2139f9c1c11e791d47427ea33ef0a +bac213a09c1c11e791d47427ea33ef0a +bac213a19c1c11e791d47427ea33ef0a +bac213a29c1c11e791d47427ea33ef0a +bac213a39c1c11e791d47427ea33ef0a +bac213a49c1c11e791d47427ea33ef0a +bac213a59c1c11e791d47427ea33ef0a +bac213a69c1c11e791d47427ea33ef0a +bac213a79c1c11e791d47427ea33ef0a +bac213a89c1c11e791d47427ea33ef0a +bac213a99c1c11e791d47427ea33ef0a +bac213aa9c1c11e791d47427ea33ef0a +bac213ab9c1c11e791d47427ea33ef0a +bac213ac9c1c11e791d47427ea33ef0a +bac213ad9c1c11e791d47427ea33ef0a +bac213ae9c1c11e791d47427ea33ef0a +bac213af9c1c11e791d47427ea33ef0a +bac213b09c1c11e791d47427ea33ef0a +bac213b19c1c11e791d47427ea33ef0a +bac213b29c1c11e791d47427ea33ef0a +bac213b39c1c11e791d47427ea33ef0a +bac213b49c1c11e791d47427ea33ef0a +bac213b59c1c11e791d47427ea33ef0a +bac213b69c1c11e791d47427ea33ef0a +bac213b79c1c11e791d47427ea33ef0a +bac213b89c1c11e791d47427ea33ef0a +bac213b99c1c11e791d47427ea33ef0a +bac213ba9c1c11e791d47427ea33ef0a +bac213bb9c1c11e791d47427ea33ef0a +bac213bc9c1c11e791d47427ea33ef0a +bac213bd9c1c11e791d47427ea33ef0a +bac213be9c1c11e791d47427ea33ef0a +bac213bf9c1c11e791d47427ea33ef0a +bac213c09c1c11e791d47427ea33ef0a +bac213c19c1c11e791d47427ea33ef0a +bac213c29c1c11e791d47427ea33ef0a +bac213c39c1c11e791d47427ea33ef0a +bac213c49c1c11e791d47427ea33ef0a +bac213c59c1c11e791d47427ea33ef0a +bac213c69c1c11e791d47427ea33ef0a +bac213c79c1c11e791d47427ea33ef0a +bac213c89c1c11e791d47427ea33ef0a +bac213c99c1c11e791d47427ea33ef0a +bac213ca9c1c11e791d47427ea33ef0a +bac213cb9c1c11e791d47427ea33ef0a +bac213cc9c1c11e791d47427ea33ef0a +bac213cd9c1c11e791d47427ea33ef0a +bac213ce9c1c11e791d47427ea33ef0a +bac213cf9c1c11e791d47427ea33ef0a +bac213d09c1c11e791d47427ea33ef0a +bac213d19c1c11e791d47427ea33ef0a +bac213d29c1c11e791d47427ea33ef0a +bac213d39c1c11e791d47427ea33ef0a +bac213d49c1c11e791d47427ea33ef0a +bac213d59c1c11e791d47427ea33ef0a +bac213d69c1c11e791d47427ea33ef0a +bac213d79c1c11e791d47427ea33ef0a +bac213d89c1c11e791d47427ea33ef0a +bac213d99c1c11e791d47427ea33ef0a +bac213da9c1c11e791d47427ea33ef0a +bac213db9c1c11e791d47427ea33ef0a diff --git a/wssywh/0002/0002.py b/wssywh/0002/0002.py new file mode 100644 index 00000000..11fa3167 --- /dev/null +++ b/wssywh/0002/0002.py @@ -0,0 +1,24 @@ +#coding:utf-8 +"""第 0002 题:将 0001 题生成的 200 个激活码(或者优惠券)保存到 MySQL 关系型数据库中。""" + +import MySQLdb + +list_id = [] +with open("../0001/file_id.txt",'r') as file: + files = file.readlines() + for content in files: + list_id.append(str(content).replace('\n','')) +try: + conn = MySQLdb.connect(host='localhost',user='root',passwd='123456',port=3306) + cur = conn.cursor() + cur.execute('create database if not exists test') + conn.select_db('test') + cur.execute('create table if not exists Activation_code(id int ,uuid varchar(50))') + for i in range(len(list_id)): + cur.execute('insert into Activation_code values(%s,%s)',(i,list_id[i])) + conn.commit() + cur.close() + conn.close() +except MySQLdb.Error as e: + print("Mysql Error %d: %s" % (e.args[0], e.args[1])) +