设为首页收藏本站

Crossin的编程教室

 找回密码
 立即加入
楼主: manhong2112
打印 上一主题 下一主题

新人報到

[复制链接]

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

26#
发表于 2016-1-21 11:20:10 |只看该作者
manhong2112 发表于 2016-1-20 20:18
2048 bj4

有意思。你可以用pygame把它做出来
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

25#
发表于 2016-1-20 20:18:50 |只看该作者
本帖最后由 manhong2112 于 2016-1-20 21:08 编辑

2048 bj4
  1. import random
  2. from copy import deepcopy as copy


  3. def print2048(block):
  4.     for i in range(len(block)):
  5.         print(str(block[i]).replace(", ", "]["))


  6. def get(block, x, y):
  7.     a = copy(block)
  8.     return a[y][x]


  9. def set(block, x, y, value):
  10.     a = copy(block)
  11.     a[y][x] = value
  12.     return a


  13. def add(block, x, y, value):
  14.     a = copy(block)
  15.     a[y][x] += value
  16.     return a


  17. def up(block):
  18.     a = copy(block)
  19.     for i in range(0, 4):
  20.         for x in range(0, 4)[::-1]:
  21.             for y in range(0, 3):
  22.                 if get(a, x, y + 1) == get(a, x, y) or get(a, x, y) == 0:
  23.                     a = add(a, x, y, get(a, x, y + 1))
  24.                     a = set(a, x, y + 1, 0)
  25.     return a


  26. def down(block):
  27.     a = copy(block)
  28.     for i in range(0, 4):
  29.         for x in range(0, 4):
  30.             for y in range(1, 4):
  31.                 if get(a, x, y - 1) == get(a, x, y) or get(a, x, y) == 0:
  32.                     a = add(a, x, y, get(a, x, y - 1))
  33.                     a = set(a, x, y - 1, 0)
  34.     return a


  35. def left(block):
  36.     a = copy(block)
  37.     for i in range(0, 4):
  38.         for x in range(0, 3):
  39.             for y in range(0, 4)[::-1]:
  40.                 if get(a, x + 1, y) == get(a, x, y) or get(a, x, y) == 0:
  41.                     a = add(a, x, y, get(a, x + 1, y))
  42.                     a = set(a, x + 1, y, 0)
  43.     return a


  44. def right(block):
  45.     a = copy(block)
  46.     for i in range(0, 4):
  47.         for x in range(1, 4):
  48.             for y in range(0, 4):
  49.                 if get(a, x - 1, y) == get(a, x, y) or get(a, x, y) == 0:
  50.                     a = add(a, x, y, get(a, x - 1, y))
  51.                     a = set(a, x - 1, y, 0)
  52.     return a


  53. def reset():
  54.     a = ([0, 0, 0, 0],
  55.          [0, 0, 0, 0],
  56.          [0, 0, 0, 0],
  57.          [0, 0, 0, 0])

  58.     return set(a, random.randrange(0,4), random.randrange(0,4), random.choice([2, 4]))


  59. def add_number(block):
  60.     a = copy(block)
  61.     b = []
  62.     for i in range(0, 4):
  63.         for j in range(0, 4):
  64.             if get(a, i, j) == 0:
  65.                 b.append((i, j))
  66.     if (not b) and right(a) == left(a) == up(a) == down(a):
  67.         print2048(a)
  68.         print("You lose")
  69.         exit()
  70.     if (not b) or right(a) == left(a) == up(a) == down(a):
  71.         return a

  72.     c = random.choice(b)
  73.     return set(block, c[0], c[1], random.choice([2, 4]))


  74. f = {"w": up,
  75.      "a": left,
  76.      "s": down,
  77.      "d": right}

  78. block2048 = reset()

  79. while 1:
  80.     block2048 = add_number(block2048)
  81.     print2048(block2048)
  82.     while 1:
  83.         try:
  84.             block2048 = f[input("Choose Direction (w a s d) > ")](block2048)
  85.         except KeyError:
  86.             print("E> Value Error")
  87.             continue
  88.         break
复制代码
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

24#
发表于 2016-1-17 19:26:15 |只看该作者
本帖最后由 manhong2112 于 2016-1-23 19:45 编辑

B站視頻解析
把以前用js寫的插件 (雖然並沒有寫完) 功能用Python實現
輸入av號,輸出up主,硬幣數,收藏數,tag,視頻真實地址,彈幕地址等等等等..
  1. import urllib.request as urllib
  2. import json
  3. import html
  4. import sys

  5. api_1 = "http://api.bilibili.com"
  6. api_2 = "http://interface.bilibili.com"
  7. api_3 = "http://comment.bilibili.com"
  8.    
  9. bilibilijj = "http://www.bilibilijj.com"
  10. api_key = "8e9fc618fbd41e28"

  11. def get_json(url):
  12.     return json.loads(urllib.urlopen(url).read().decode("unicode-escape").replace('\r\n', ''))

  13. def printf(str, *obj):
  14.     print(str.format(*obj))

  15. def get_info(aid):
  16.     video_info = [get_json("{0}/view?type=json&appkey={1}&id={2}".format(api_1, api_key, aid))]
  17.     pages_num = video_info[0]['pages']
  18.     if pages_num > 2:
  19.         for i in range(1, a + 1):
  20.             video_info.append(get_json("{0}/view?type=json&appkey={1}&id={2}&page={3}".format(api_1, api_key, aid, i)))
  21.     return video_info

  22.    
  23. def print_info(video_info):
  24.     cid = video_info['cid']
  25.     link_info = get_json('{0}/playurl?type=mp4&otype=json&quality=4&appkey={1}&cid={2}'.format(api_2, api_key, cid))

  26.     try:
  27.         printf(">> cid: {0}", cid)
  28.         printf(">> Title: {0} Author: {1} Upload Time: {2}", html.unescape(video_info['title']), video_info['author'], video_info['created_at'])
  29.         printf(">> Play: {0} Coins: {1} Fav: {2} Pages: {3}", video_info['play'], video_info['coins'], video_info['favorites'], video_info['pages'])
  30.         printf(">> Type: {0} Tag: {1}", video_info['typename'], video_info['tag'].split(','))
  31.         printf(">> Description: {0}", html.unescape(video_info['description']))
  32.         printf(">> Danmu file link at: {0}/{1}.xml", api_3, cid)
  33.         printf(">> Video link at bilibilijj: {0}/freedown/spare/{1}.mp4", bilibilijj, cid)
  34.         try:
  35.             printf(">> Video link at: {0}", link_info['durl'][0]['url'])
  36.         except KeyError:
  37.             printf("E> Failed to get Video Link: {0}", link_info)
  38.             return
  39.     except KeyError:
  40.         print("E> Video not found")
  41.         printf("D> {0}", video_info)
  42.         return

  43. def main():
  44.     aid = input("aid of video \n> av")
  45.     video_info = []

  46.     try:
  47.         int(aid)
  48.     except ValueError:
  49.         print("Value Error")
  50.         return

  51.     try:
  52.         video_info = get_info(aid)
  53.     except KeyError:
  54.         printf("E> Video not found")
  55.         return

  56.     i = 0
  57.     for video_info in video_info:
  58.         i += 1
  59.         printf("\n>> ====== Page {0} ======", i)
  60.         print_info(video_info)

  61. main()
复制代码
EDIT: 新增多P支持...
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

23#
发表于 2016-1-17 15:21:01 |只看该作者
重命名目錄下資料夾外的所有檔案,不包括子目錄
會先重命名為md5 hash碼,若重複直接刪除
再順號碼重命名一次
  1. import os
  2. import hashlib


  3. def md5(file):
  4.     hash = hashlib.md5()
  5.     with open(file, "rb") as f:
  6.         for chunk in iter(lambda: f.read(8192), b""):
  7.             hash.update(chunk)
  8.     return hash.hexdigest()


  9. def rename(old, new, state):
  10.     new += '.' + old.split('.')[-1]
  11.     if not (state or old == new):
  12.         try:
  13.             os.remove(new)
  14.         except WindowsError:
  15.             {}
  16.     os.rename(old, new)


  17. def main():
  18.     for state in [0, 1]:
  19.         i = 1
  20.         for file in os.listdir('.'):
  21.             if file == 'rename.py' or os.path.isdir(file):
  22.                 continue
  23.             rename(file, str(i) if state else md5(file), state)
  24.             i += 1
  25.             # os.remove('rename.py')

  26. main()
复制代码
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

22#
发表于 2016-1-17 15:10:38 |只看该作者
每周一坑 記帳本
  1. # coding: utf-8
  2. import pickle
  3. from datetime import datetime
  4. from sys import exit

  5. now = datetime.now()


  6. class Account:
  7.     def __init__(self, user_id=""):
  8.         self.account = {}
  9.         self.count = 0
  10.         self.user_id = user_id
  11.         with open('account.db', 'rb') as db:
  12.             try:
  13.                 self.user_id = pickle.load(db)
  14.                 self.account = pickle.load(db)
  15.                 self.count = pickle.load(db)
  16.             except EOFError:
  17.                 pass

  18.     def add_account(self, item, money):
  19.         int(money)
  20.         self.count += 1
  21.         self.account[self.count] = str(now.date()) + "|" + money + "|" + item

  22.     def check_money(self):
  23.         total = 0
  24.         for record_id in range(1, len(self.account) + 1):
  25.             total += int(self.account[record_id].split("|")[1])

  26.         print("== You have", total, "==")

  27.     def list_account(self):
  28.         print("Date\t\t$\t\tItem")
  29.         for record_id in range(1, len(self.account) + 1):
  30.             print(self.account[record_id].replace('|', "\t\t"))

  31.     def close_account(self):
  32.         with open('account.db', 'wb') as db:
  33.             pickle.dump(self.user_id, db)
  34.             pickle.dump(self.account, db)
  35.             pickle.dump(self.count, db)
  36.         print("Good Bye!")
  37.         exit(0)


  38. f = {"0": lambda x: x.close_account(),
  39.      "1": lambda x: x.add_account(input("Item > "), input("Money > ")),
  40.      "2": lambda x: x.check_money(),
  41.      "3": lambda x: x.list_account()}

  42. account = Account()

  43. while True:
  44.     print("What do you want? ")
  45.     print("  Add record to account, input 1")
  46.     print("  Check your money, input 2")
  47.     print("  List the log of your account, input 3")
  48.     print("  If you want to exit, input 0")
  49.     try:
  50.         f[input("> ")](account)
  51.     except KeyError:
  52.         print("Wrong Input")
  53.     except ValueError:
  54.         print("Wrong Value")
复制代码
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

21#
发表于 2016-1-17 15:08:52 |只看该作者
【每周一坑】3道题
  1. def ex1(text):
  2.     i = {}
  3.     for j in text:
  4.         if j in i:
  5.             i[j] += 1
  6.         else:
  7.             i[j] = 1
  8.     return sorted(i.items(), key=lambda i: i[1], reverse=True)


  9. print(ex1("History is his story."))
复制代码
  1. def ex2():
  2.     from random import randint
  3.     from sys import exit

  4.     class Game:
  5.         thrownNumber = 0
  6.         gameRound = 0

  7.         def start_game(self):
  8.             self.gameRound += 1
  9.             print("New Game start, Round", self.gameRound)
  10.             self.thrownNumber = randint(3, 18)

  11.         def end_game(self, *players):
  12.             for i in players:
  13.                 player_score = 0
  14.                 player_score += i.bet.get("big", 0) * 2 if self.thrownNumber >= 11 else 0
  15.                 player_score += i.bet.get("small", 0) * 2 if self.thrownNumber < 11 else 0
  16.                 player_score += i.bet.get(str(self.thrownNumber), 0) * 10
  17.                 i.score += player_score
  18.                 i.bet = {}

  19.     class Player:
  20.         def __init__(self, player_id, score=100):
  21.             self.player_id = player_id
  22.             self.score = score
  23.             self.bet = {}

  24.         def add_bet(self, bet_type, bet_score):
  25.             if self.score - bet_score < 0:
  26.                 raise ValueError()
  27.             self.bet[bet_type] = self.bet.get(bet_type, 0) + bet_score
  28.             self.score -= bet_score

  29.     class Computer(Player):
  30.         def __init__(self, player_id, score=100):
  31.             super().__init__(player_id, score)

  32.         def add_bet(self):
  33.             for i in range(randint(1, 5)):
  34.                 try:
  35.                     bet_score = randint(1, int(self.score / randint(1, 5)) + 1)
  36.                     if randint(0, 1):
  37.                         super().add_bet("big" if randint(0, 1) else "small", bet_score)
  38.                     else:
  39.                         super().add_bet(str(randint(3, 18)), bet_score)
  40.                     pass
  41.                 except ValueError:
  42.                     break

  43.     comp = Computer("Computer")
  44.     player = Player(input("Input Your Name: \n> "))
  45.     game = Game()

  46.     # game main body
  47.     while True:
  48.         game.start_game()
  49.         # print(game.thrownNumber)

  50.         # read input
  51.         print("Input 'quit' to end game, input 'end' or leave blank to end input, input as '<type/number> <bet>' to bet")
  52.         while True:
  53.             tmp = input("> ")
  54.             if tmp == "end" or tmp == "": break
  55.             if tmp == "quit": exit(0)
  56.             tmp = tmp.split(" ")
  57.             try:
  58.                 player.add_bet(tmp[0], int(tmp[1]))
  59.             except ValueError:
  60.                 print("Over your existing score")
  61.             except IndexError:
  62.                 print("Wrong input, try again")

  63.         comp.add_bet()
  64.         print(comp.player_id, " bet ", comp.bet, sep="")
  65.         print(player.player_id, " bet ", player.bet, sep="")

  66.         game.end_game(player, comp)
  67.         print("Number is", game.thrownNumber)

  68.         print(comp.player_id, "'s score: ", comp.score, sep="")
  69.         print(player.player_id, "'s score: ", player.score, sep="")

  70.         print("=" * 24, sep="")


  71. ex2()
复制代码
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

20#
发表于 2016-1-17 15:02:20 |只看该作者
每日一坑 6 查找文件内容
  1. import re
  2. import os


  3. def check(dir, text):
  4.     for i in os.listdir(dir):
  5.         if os.path.isdir(i):
  6.             check(dir + "/" + i, text)
  7.         if re.search(r'.*\.txt', i):
  8.             file = open(dir + "/" + i, encoding="utf8").read()
  9.             print(str(i) + "\n" if re.search(text, file) else "", end="")


  10. check(os.getcwd(), "hello world")
复制代码
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

19#
发表于 2016-1-17 15:01:03 |只看该作者
每日一坑 5 文字竖排
  1. # -*- coding:utf8 -*-
  2. poem = "\
  3. 静夜思 李白\n\
  4. 床前明月光,\n\
  5. 疑似地上霜。\n\
  6. 举头望明月,\n\
  7. 低头思故乡。".split('\n')

  8. poem = poem[::-1]

  9. poemLength = 0
  10. for i in poem:
  11.     poemLength = len(i) if poemLength < len(i) else poemLength
  12. poemWidth = len(poem)

  13. for i in range(0, poemLength):
  14.     for j in range(0, poemWidth):
  15.         try:
  16.             print(poem[j][i] if poem[j][i] != " " else "  ", end="|")
  17.         except IndexError:
  18.             print(end="  |")
  19.     print()
复制代码
回复

使用道具 举报

174

主题

45

好友

11万

积分

管理员

Rank: 9Rank: 9Rank: 9

18#
发表于 2016-1-17 15:00:10 |只看该作者
支持一下!
欢迎在这里记录学习过程
#==== Crossin的编程教室 ====#
微信ID:crossincode
网站:http://crossincode.com
回复

使用道具 举报

1

主题

0

好友

207

积分

中级会员

Rank: 3Rank: 3

17#
发表于 2016-1-17 14:55:59 |只看该作者
本帖最后由 manhong2112 于 2016-1-17 14:58 编辑

每日一坑 4 查找文件import re
  1. import re
  2. import os


  3. def check(dir):
  4.     for i in os.listdir(dir):
  5.         if os.path.isdir(i):
  6.             check(dir + "/" + i)
  7.         print(str(i) + "\n" if re.search(r'.*\.txt', i) else "", end="")


  8. check(os.getcwd())
复制代码
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即加入

QQ|手机版|Archiver|Crossin的编程教室 ( 苏ICP备15063769号  

GMT+8, 2024-6-16 14:03 , Processed in 0.025447 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部