整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          史上最牛逼的一行JavaScript代碼

          天給大家?guī)硪恍蟹浅E1频腏avaScript代碼,誰說我們JavaScript不厲害,就把這串代碼扔給他,看是什么代碼這么厲害吧,話不多說直接分享了!

          分享之前我還是要推薦下我自己的前端學(xué)習(xí)群:659247717,不管你是小白還是大牛,小編我都挺歡迎,不定期分享干貨,包括我自己整理的一份2017最新的前端資料和零基礎(chǔ)入門教程,送給大家,歡迎初學(xué)和進(jìn)階中的小伙伴



          一、JS運(yùn)算符的優(yōu)先級(jí)

          根據(jù)此規(guī)則,我們把這一串運(yùn)算分為以下16個(gè)子表達(dá)式:

          二、JS的類型轉(zhuǎn)化

          三、步步執(zhí)行

          四、最后

          最后再來給程序員提幾點(diǎn)建議:

          1. 如果你是完全的初學(xué)者,特別是過了青少年時(shí)期的人,開始寫代碼的時(shí)候也許很困難。年輕人無所畏懼,也沒有什么負(fù)擔(dān),他們可以花大量的時(shí)間在喜歡的東西上。所以各種挑戰(zhàn)對(duì)他們來說也不過是短暫的障礙罷了。

          2. 但過了青少年期后你會(huì)希望快速的見到成效。因?yàn)槟銢]有這么多的時(shí)間去花上幾個(gè)小時(shí)就為了搞清楚一些細(xì)節(jié)的東西。但這些東西你必須深入去理解它,不要因此沮喪,堅(jiān)持完成課程的任務(wù),把bug都找出來,直到你完全理解。當(dāng)你到達(dá)勝利的彼岸時(shí),你會(huì)知道這一切都是值得的,你會(huì)發(fā)現(xiàn)編程非常有趣而且在上面花的時(shí)間都會(huì)得到可觀的回報(bào)。

          3. 一個(gè)人必須去感受和領(lǐng)悟構(gòu)建程序帶來的強(qiáng)烈快感。當(dāng)你一步步的掌握知識(shí)點(diǎn),一點(diǎn)點(diǎn)的將程序搭建起來時(shí),就會(huì)對(duì)自己產(chǎn)生激勵(lì)與肯定,帶來十分美妙的滿足感。

          4. 總有一天你會(huì)意識(shí)到之前忍受的所有困難都是值得的。因?yàn)槟銓⒁蔀橐幻鈽s的程序員,你也清楚作為JavaScript開發(fā)者,你的前途一片光明。就像在你之前成千上萬的程序員一樣,你打敗了最難的bug,你沒有退步,你沒有放手,你沒有找任何借口讓自己放棄。

          5. 話題到這里就結(jié)束了,web前端學(xué)習(xí)的可以來我的群,群里每天都有對(duì)應(yīng)資料學(xué)習(xí):659247717,歡迎初學(xué)和進(jìn)階中的小伙伴。

          如果想看到更加系統(tǒng)的文章和學(xué)習(xí)方法經(jīng)驗(yàn)可以關(guān)注我的微信公眾號(hào):‘web前端課程’關(guān)注后回復(fù)‘給我資料’可以領(lǐng)取一套完整的學(xué)習(xí)視頻

          譯:Python開發(fā)者 - Jake_on 英文:Quora

          http://python.jobbole.com/85986/

          有網(wǎng)友在 Quora 上提問,「你用 Python 寫過最牛逼的程序/腳本是什么?」。本文摘編了 3 個(gè)國外程序員的多個(gè)小項(xiàng)目,含代碼。

          Manoj Memana Jayakumar, 3000+ 頂

          更新:憑借這些腳本,我找到了工作!可看我在這個(gè)帖子中的回復(fù),《Has anyone got a job through Quora? Or somehow made lots of money through Quora?》

          1. 電影/電視劇 字幕一鍵下載器

          我們經(jīng)常會(huì)遇到這樣的情景,就是打開字幕網(wǎng)站subscene 或者opensubtitles, 搜索電影或電視劇的名字,然后選擇正確的抓取器,下載字幕文件,解壓,剪切并粘貼到電影所在的文件夾,并且需把字幕文件重命名以匹配電影文件的名字。是不是覺得太無趣呢?對(duì)了,我之前寫了一個(gè)腳本,用來下載正確的電影或電視劇字幕文件,并且存儲(chǔ)到與電影文件所在位置。所有的操作步驟僅需一鍵就可以完成。懵逼了嗎?

          請看這個(gè) Youtube 視頻:https://youtu.be/Q5YWEqgw9X8

          源代碼存放在GitHub:subtitle-downloader更新:目前,該腳本支持多個(gè)字幕文件同時(shí)下載。步驟:按住 Ctrl ,選擇你想要為其下載字幕的多個(gè)文件 , 最后執(zhí)行腳本即可

          2. IMDb 查詢/電子表格生成器

          我是一個(gè)電影迷,喜歡看電影。我總是會(huì)為該看哪一部電影而困惑,因?yàn)槲宜鸭舜罅康碾娪啊K裕覒?yīng)該如何做才能消除這種困惑,選擇一部今晚看的電影?沒錯(cuò),就是IMDb。我打開 http://imdb.com,輸入電影的名字,看排名,閱讀和評(píng)論,找出一部值得看的電影。

          但是,我有太多電影了。誰會(huì)想要在搜索框輸入所有的電影的名字呢?我肯定不會(huì)這樣做,尤其是我相信“如果某些東西是重復(fù)性的,那么它應(yīng)該是可以自動(dòng)化的”。因此,我寫了一個(gè) python 腳本, 目的是為了使用 非官方的 IMDb API 來獲取數(shù)據(jù)。我選擇一個(gè)電影文件(文件夾),點(diǎn)擊右鍵,選擇‘發(fā)送到’,然后 點(diǎn)擊 IMDB.cmd (順便提一下,IMDB.cmd 這個(gè)文件就是我寫的 python 腳本),就是這樣。

          我的瀏覽器會(huì)打開這部電影在IMDb網(wǎng)站上的準(zhǔn)確頁面。

          僅僅只需點(diǎn)擊一個(gè)按鍵,就可以完成如上操作。如果你不能夠了解這個(gè)腳本到底有多酷,以及它可以為你節(jié)省多少時(shí)間,請看這個(gè) Youtube 視頻:https://youtu.be/JANNcimQGyk

          從現(xiàn)在開始,你再也不需要打開你的瀏覽器,等待加載IMDb的頁面,鍵入電影的名字。這個(gè)腳本會(huì)幫你完成所有的操作。跟往常一樣,源代碼放在了GitHub:imdb ,并且附有操作說明。當(dāng)然,由于這個(gè)腳本必須去掉文件或文件夾中的無意義的字符,比如“DVDRip, YIFY, BRrip”等,所以在運(yùn)行腳本的時(shí)候會(huì)有一定比例的錯(cuò)誤。但是經(jīng)過測試,這個(gè)腳本在我?guī)缀跛械碾娪拔募隙歼\(yùn)行的很好。

          2014-04-01更新:

          許多人在問我是否可以寫一個(gè)腳本,可以發(fā)現(xiàn)一個(gè)文件夾中所有電影的詳細(xì)信息,因?yàn)槊恳淮沃荒馨l(fā)現(xiàn)一個(gè)電影的詳細(xì)信息是非常麻煩的。我已經(jīng)更新了這個(gè)腳本,支持處理整個(gè)文件夾。腳本會(huì)分析這個(gè)文件夾里的所有子文件夾,從 IMDb上抓取所有電影的詳細(xì)信息 ,然后打開一個(gè)電子表格,根據(jù)IMDb 上的排名,從高到低降序排列所有的電影。這個(gè)表格中包含了 (所有電影)在 IMDb URL, 年份,情節(jié),分類,獲獎(jiǎng)信息,演員信息,以及其他的你可能在 IMBb找到的信息。下面是腳本執(zhí)行后,生成的表格范例:

          Your very own personal IMDb database! What more can a movie buff ask for? ;)

          Source on GitHub:imdb你也可以有一個(gè)個(gè)人 IMDb 數(shù)據(jù)庫!一個(gè)電影愛好者還能夠要求更多嗎?:)源代碼在 GitHubimdb

          3. theoatmeal.com 連載漫畫下載器

          我個(gè)人超級(jí)喜歡 Matthew Inman 的漫畫。它們在瘋狂搞笑的同時(shí),卻又發(fā)人深省。但是,我很厭煩重復(fù)點(diǎn)擊下一個(gè),然后才能閱讀每一個(gè)漫畫。另外,由于每一個(gè)漫畫都由多福圖片組成,所以手動(dòng)下載這些漫畫是非常困難的。

          基于如上原因,我寫了一個(gè) python 腳本 ,用來從這個(gè)站點(diǎn)下載所有的漫畫。這個(gè)腳本利用 BeautifulSoup (http://www.crummy.com/software/B… ) 解析 HTML 數(shù)據(jù), 所以在運(yùn)行腳本前,必須安裝 BeautifulSoup。用于下載燕麥片(馬修.英曼的一部漫畫作品)的下載器已經(jīng)上傳到GitHub:theoatmeal.com-downloader 。(漫畫)下載完后的文件夾是這樣的 :D

          4. someecards.com 下載器成功地從http://www.theoatmeal.com 下載了整部漫畫后,我在想是否我可以做同樣的事情 , 從另一個(gè)我喜歡的站點(diǎn)— 搞笑的,唯一的http://www.someecards.com. 下載一些東西呢?

          somececards 的問題是,圖片命名是完全隨機(jī)的,所有圖片的排放沒有特定的順序,并且一共有52 個(gè)大的類別, 每一個(gè)類別都有數(shù)以千計(jì)的圖片。

          我知道,如果我的腳本是多線程的話,那將是非常完美的,因?yàn)橛写罅康臄?shù)據(jù)需要解析和下載,因此我給每一個(gè)類別中的每一頁都分配一個(gè)線程。這個(gè)腳本會(huì)從網(wǎng)站的每一個(gè)單獨(dú)的分類下載搞笑的電子賀卡,并且把每一個(gè)放到單獨(dú)的文件夾。現(xiàn)在,我擁有這個(gè)星球上最好笑的電子賀卡私人收藏。下載完成后,我的文件夾是這樣的:

          沒錯(cuò),我的私人收藏總共包括:52個(gè)類別,5036個(gè)電子賀卡。源代碼在這里:someecards.com-downloader編輯:很多人問我是否可以共享我下載的所有文件,(在這里,我要說)由于我的網(wǎng)絡(luò)不太穩(wěn)定,我沒辦法把我的收藏上傳到網(wǎng)絡(luò)硬盤,但是我已經(jīng)上傳一個(gè)種子文件,你們可以在這里下載:somecards.com Site Rip torrent

          種下種子,傳播愛:)

          Akshit Khurana,4400+ 頂

          感謝 500 多個(gè)朋友在 Facebook 上為我送出的生日祝福

          有三個(gè)故事讓我的21歲生日變的難忘,這是最后一個(gè)故事。我傾向于在每一條祝福下親自評(píng)論,但是使用 python 來做更好。

           1…
          2
          31. # Thanking everyone who wished me on my birthday
          4
          52. import requests
          6
          73. import json
          8
          94.
          10
          115. # Aman s post time
          12
          136. AFTER = 1353233754
          14
          157. TOKEN =
          16
          178.
          18
          199. def get_posts:
          20
          2110. """Returns dictionary of id, first names of people who posted on my wall
          22
          2311. between start and end time"""
          24
          2512. query = ("SELECT post_id, actor_id, message FROM stream WHERE "
          26
          2713. "filter_key = others AND source_id = me AND "
          28
          2914. "created_time > 1353233754 LIMIT 200")
          30
          3115.
          32
          3316. payload = { q : query, access_token : TOKEN}
          34
          3517. r = requests.get( https://graph.facebook.com/fql , params=payload)
          36
          3718. result = json.loads(r.text)
          38
          3919. return result[ data ]
          40
          4120.
          42
          4321. def commentall(wallposts):
          44
          4522. """Comments thank you on all posts"""
          46
          4723. #TODO convert to batch request later
          48
          4924. for wallpost in wallposts:
          50
          5125.
          52
          5326. r = requests.get( https://graph.facebook.com/%s %
          54
          5527. wallpost[ actor_id ])
          56
          5728. url = https://graph.facebook.com/%s/comments % wallpost[ post_id ]
          58
          5929. user = json.loads(r.text)
          60
          6130. message = Thanks %s :) % user[ first_name ]
          62
          6331. payload = { access_token : TOKEN, message : message}
          64
          6532. s = requests.post(url, data=payload)
          66
          6733.
          68
          6934. print "Wall post %s done" % wallpost[ post_id ]
          70
          7135.
          72
          7336. if __name__ == __main__ :
          74
          7537. commentall(get_posts)
          76
          77…

          為了能夠順利運(yùn)行腳本,你需要從Graph API Explorer(需適當(dāng)權(quán)限)獲得 token。本腳本假設(shè)特定時(shí)間戳之后的所有帖子都是生日祝福。

          盡管對(duì)評(píng)論功能做了一點(diǎn)改變,我仍然喜歡每一個(gè)帖子。

          當(dāng)我的點(diǎn)贊數(shù),評(píng)論數(shù)以及評(píng)論結(jié)構(gòu)在 ticker(Facebook一項(xiàng)功能,朋友可以看到另一個(gè)朋友在做什么,比如點(diǎn)贊,聽歌,看電影等) 中爆漲后,我的一個(gè)朋友很快發(fā)現(xiàn)此事必有蹊蹺。

          盡管這個(gè)不是我最滿意的腳本,但是它簡單,快捷,有趣。

          當(dāng)我和 Sandesh Agrawal 在網(wǎng)絡(luò)實(shí)驗(yàn)室討論時(shí),有了寫這個(gè)腳本的想法。為此,Sandesh Agrawal 耽擱了實(shí)驗(yàn)室作業(yè),深表感謝。

          Tanmay Kulshrestha,3300+ 頂

          好了,在我失去這個(gè)項(xiàng)目之前(一個(gè)豬一樣的朋友格式化了我的硬盤,我的所有代碼都在那個(gè)硬盤上)或者說,在我忘記這些代碼之前,我決定來回答這個(gè)問題。

          整理照片

          當(dāng)我對(duì)圖像處理感興趣之后,我一直致力于研究機(jī)器學(xué)習(xí)。我寫這個(gè)有趣的腳本,目的是為了分類圖片,很像 Facebook 做的那樣(當(dāng)然這是一個(gè)不夠精確的算法)。我使用了 OpenCV 的人臉檢測算法,“haarcascade_frontalface_default.xml”,它可以從一張照片中檢測到人臉。

          你可能已經(jīng)察覺到這張照片的某些地方被錯(cuò)誤地識(shí)別為人臉。我試圖通過修改一些參數(shù)(來修正這一問題),但還是某些地方被錯(cuò)誤地識(shí)別為人臉,這是由相機(jī)的相對(duì)距離導(dǎo)致的。我會(huì)在下一階段解決這一問題(訓(xùn)練步驟)。

          這個(gè)訓(xùn)練算法需要一些訓(xùn)練素材,每個(gè)人需要至少需要100-120個(gè)訓(xùn)練素材(當(dāng)然多多益善)。我太懶了,并沒有為每一個(gè)人挑選照片,并把它們復(fù)制粘帖到訓(xùn)練文件夾。所以,你可能已經(jīng)猜到,這個(gè)腳本會(huì)打開一個(gè)圖片,識(shí)別人臉,并顯示每一個(gè)人臉(腳本會(huì)根據(jù)處于當(dāng)前節(jié)點(diǎn)的訓(xùn)練素材給每一個(gè)人臉預(yù)測一個(gè)名字)。伴隨著每次你標(biāo)記的照片,Recognizer 會(huì)被更新,并且還會(huì)包含上一次的訓(xùn)練素材。在訓(xùn)練過程中,你可以增加新的名字。我使用 python 庫 tkinter 做了一個(gè) GUI。因此,大多數(shù)時(shí)候,你必須初始化一小部分照片(給照片中的人臉命名),其他的工作都可以交給訓(xùn)練算法。因此,我訓(xùn)練了 Recognizer ,然后讓它(Recognizer)去處理所有的圖片。

          我使用圖片中包含的人的人名來命名圖片,(例如:Tanmay&*****&*****)。因此,我可以遍歷整個(gè)文件夾,然后可以通過輸入人名的方法來搜索圖片。

          初始狀態(tài)下,當(dāng)一個(gè)人臉還沒有訓(xùn)練素材時(shí)(素材庫中還沒有包括這個(gè)人臉的名字),需要詢問他/她的名字。

          我可以增加一個(gè)名字,像這個(gè)樣子:

          當(dāng)訓(xùn)練了幾個(gè)素材后,它會(huì)像這個(gè)樣子:

          最后一個(gè)是針對(duì)應(yīng)對(duì)那些垃圾隨機(jī)方塊而使用的變通解決方案。

          帶名字的最終文件夾。

          所以,現(xiàn)在尋找圖片變得相當(dāng)簡單。順便提一下,很抱歉(我)放大了這些照片。

           1import cv2
          2
          3import sys
          4
          5import os,random,string
          6
          7#choices=[ Add a name ]
          8
          9import os
          10
          11current_directory=os.path.dirname(os.path.abspath(__file__))
          12
          13from Tkinter import Tk
          14
          15from easygui import *
          16
          17import numpy as np
          18
          19x= os.listdir(current_directory)
          20
          21new_x=
          22
          23testing=
          24
          25for i in x:
          26
          27if i.find( . )==-1:
          28
          29new_x+=[i]
          30
          31else:
          32
          33testing+=[i]
          34
          35x=new_x
          36
          37g=x
          38
          39choices=[ Add a name ]+x
          40
          41y= range(1,len(x)+1)
          42
          43def get_images_and_labels:
          44
          45global current_directory,x,y,g
          46
          47if x==:
          48
          49return (False,False)
          50
          51image_paths=
          52
          53for i in g:
          54
          55path=current_directory+ +i
          56
          57for filename in os.listdir(path):
          58
          59final_path=path+ +filename
          60
          61image_paths+=[final_path]
          62
          63# images will contains face images
          64
          65images =
          66
          67# labels will contains the label that is assigned to the image
          68
          69labels =
          70
          71for image_path in image_paths:
          72
          73# Read the image and convert to grayscale
          74
          75img = cv2.imread(image_path,0)
          76
          77# Convert the image format into numpy array
          78
          79image = np.array(img, uint8 )
          80
          81# Get the label of the image
          82
          83backslash=image_path.rindex
          84
          85underscore=image_path.index( _ ,backslash)
          86
          87nbr = image_path[backslash+1:underscore]
          88
          89t=g.index(nbr)
          90
          91nbr=y[t]
          92
          93# If face is detected, append the face to images and the label to labels
          94
          95images.append(image)
          96
          97labels.append(nbr)
          98
          99#cv2.imshow("Adding faces to traning set...", image)
          100
          101#cv2.waitKey(50)
          102
          103# return the images list and labels list
          104
          105return images, labels
          106
          107# Perform the tranining
          108
          109def train_recognizer:
          110
          111recognizer = cv2.createLBPHFaceRecognizer
          112
          113images, labels = get_images_and_labels
          114
          115if images==False:
          116
          117return False
          118
          119cv2.destroyAllWindows
          120
          121recognizer.train(images, np.array(labels))
          122
          123return recognizer
          124
          125def get_name(image_path,recognizer):
          126
          127global x,choices
          128
          129#if recognizer== :
          130
          131# recognizer=train_recognizer
          132
          133cascadePath = "haarcascade_frontalface_default.xml"
          134
          135faceCascade = cv2.CascadeClassifier(cascadePath)
          136
          137#recognizer=train_recognizer
          138
          139x1=testing
          140
          141global g
          142
          143print image_path
          144
          145image = cv2.imread(image_path)
          146
          147img = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
          148
          149predict_image = np.array(img, uint8 )
          150
          151faces = faceCascade.detectMultiScale(
          152
          153img,
          154
          155scaleFactor=1.3,
          156
          157minNeighbors=5,
          158
          159minSize=(30, 30),
          160
          161flags = http://cv2.cv.CV_HAAR_SCALE_IMAGE
          162
          163)
          164
          165for (x, y, w, h) in faces:
          166
          167f= image[y:y+w,x:x+h]
          168
          169cv2.imwrite( temp.jpg ,f)
          170
          171im= temp.jpg
          172
          173nbr_predicted, conf = recognizer.predict(predict_image[y: y + h, x: x + w])
          174
          175predicted_name=g[nbr_predicted-1]
          176
          177print "{} is Correctly Recognized with confidence {}".format(predicted_name, conf)
          178
          179if conf>=140:
          180
          181continue
          182
          183msg= Is this +predicted_name
          184
          185reply = buttonbox(msg, image=im, choices=[ Yes , No ])
          186
          187if reply== Yes :
          188
          189reply=predicted_name
          190
          191directory=current_directory+ +reply
          192
          193if not os.path.exists(directory):
          194
          195os.makedirs(directory)
          196
          197random_name= .join(random.choice(string.ascii_uppercase + string.digits) for _ in range(7))
          198
          199path=directory+ +random_name+ .jpg
          200
          201cv2.imwrite(path,f)
          202
          203else:
          204
          205msg = "Who is this?"
          206
          207reply = buttonbox(msg, image=im, choices=choices)
          208
          209if reply == Add a name :
          210
          211name=enterbox(msg= Enter the name , title= Training , strip=True)
          212
          213print name
          214
          215choices+=[name]
          216
          217reply=name
          218
          219directory=current_directory+ +reply
          220
          221if not os.path.exists(directory):
          222
          223os.makedirs(directory)
          224
          225random_name= .join(random.choice(string.ascii_uppercase + string.digits) for _ in range(7))
          226
          227path=directory+ +random_name+ .jpg
          228
          229print path
          230
          231cv2.imwrite(path,f)
          232
          233
          234
          235# calculate window position
          236
          237root = Tk
          238
          239pos = int(root.winfo_screenwidth * 0.5), int(root.winfo_screenheight * 0.2)
          240
          241root.withdraw
          242
          243WindowPosition = "+%d+%d" % pos
          244
          245
          246
          247# patch rootWindowPosition
          248
          249rootWindowPosition = WindowPosition
          250
          251def detect_faces(img):
          252
          253global choices,current_directory
          254
          255imagePath = img
          256
          257faceCascade = cv2.CascadeClassifier(cascPath)
          258
          259image = cv2.imread(imagePath)
          260
          261gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
          262
          263faces = faceCascade.detectMultiScale(
          264
          265gray,
          266
          267scaleFactor=1.3,
          268
          269minNeighbors=5,
          270
          271minSize=(30, 30),
          272
          273flags = http://cv2.cv.CV_HAAR_SCALE_IMAGE
          274
          275)
          276
          277
          278
          279print "Found {0} faces!".format(len(faces))
          280
          281m=0
          282
          283for (x, y, w, h) in faces:
          284
          285m+=1
          286
          287padding=0
          288
          289f= image[y-padding:y+w+padding,x-padding:x+h+padding]
          290
          291cv2.imwrite( temp.jpg ,f)
          292
          293im= temp.jpg
          294
          295msg = "Who is this?"
          296
          297reply = buttonbox(msg, image=im, choices=choices)
          298
          299if reply == Add a name :
          300
          301name=enterbox(msg= Enter the name , title= Training , strip=True)
          302
          303print name
          304
          305choices+=[name]
          306
          307reply=name
          308
          309directory=current_directory+ +reply
          310
          311if not os.path.exists(directory):
          312
          313os.makedirs(directory)
          314
          315random_name= .join(random.choice(string.ascii_uppercase + string.digits) for _ in range(7))
          316
          317path=directory+ +random_name+ .jpg
          318
          319print path
          320
          321cv2.imwrite(path,f)
          322
          323def new(img,recognizer):
          324
          325imagePath = current_directory+ +img
          326
          327print imagePath
          328
          329get_name(imagePath,recognizer)
          330
          331cascPath = haarcascade_frontalface_default.xml
          332
          333b=0
          334
          335os.system("change_name.py")
          336
          337for filename in os.listdir("."):
          338
          339b+=1
          340
          341if b%10==0 or b==1:
          342
          343os.system("change_name.py")
          344
          345recognizer=train_recognizer
          346
          347if filename.endswith( .jpg ) or filename.endswith( .png ):
          348
          349print filename
          350
          351imagePath=filename
          352
          353#detect_faces(imagePath)
          354
          355new(imagePath,recognizer)
          356
          357os.remove(filename)
          358
          359raw_input( Done with this photograph )

          我想進(jìn)一步修改它的搜索功能,其中會(huì)包含更多的搜索類型,比如基于地理位置,微笑的臉,傷心的臉等等。(這樣我就可以在 Skylawns 上 搜索快樂的 Tanmay & 沮喪的 Akshay & 快樂的…)

          我還寫了很多腳本,但那都是很久之前的事情了,我也懶得再去檢查這些代碼了,我會(huì)列出部分代碼。

          GitHub 鏈接:tanmay2893/Image-Sorting

          Gmail 郵件通知

          在那段時(shí)間,我沒有智能手機(jī)。導(dǎo)致我常常錯(cuò)過來自于我所在的研究所的郵件(在我的研究所的郵件 ID),我寫了一個(gè)腳本,可以在我的筆記本上運(yùn)行,而且能給我的手機(jī)發(fā)信息。我使用 python 的 IMAP 庫來獲取郵件。我可以輸入一些重要的人的名字,這樣一來,當(dāng)這些人給我發(fā)了郵件后,我可以收到短信通知。對(duì)于短信, 我使用了 way2sms.com(寫了一個(gè) python 腳本,自動(dòng)登陸我的賬戶,然后發(fā)送 短信)。

          PNR(Passenger Name Record旅客訂座記錄,下同) 狀態(tài)短訊

          鐵路方面不經(jīng)常發(fā)送 PNR 狀態(tài)消息。因此,我寫了一個(gè)腳本,可以從印度鐵路網(wǎng)站獲取 PNR 狀態(tài)。這是非常容易的,因?yàn)槟莻€(gè)網(wǎng)站沒有驗(yàn)證碼,即使有,也只是形同虛設(shè)的驗(yàn)證碼(在過去,一些字母會(huì)被寫在看起來像圖片一樣的東西上面,因?yàn)樗麄優(yōu)檫@些字母使用了一個(gè) “check” 的背景圖)。我們可以輕松地從 HTML 網(wǎng)頁得到這些字母。我不明白他們這樣做的目的是什么,難道僅僅是為了愚弄他們自己嗎?不管怎么樣,我使用短信息腳本來處理它,經(jīng)過一段時(shí)間間隔,它會(huì)在我的筆記本上運(yùn)行一次,就像是一個(gè)定時(shí)任務(wù),只要 PNR 狀態(tài)有更新,它就會(huì)把更新信息發(fā)送給我。

          YouTube 視頻下載器

          這個(gè)腳本會(huì)從 Youtube 頁面下載所有的 Youtube 視頻 以及他們所有的字幕文件(從Download and save subtitles 下載)。為了使下載速度更快一點(diǎn),我使用了多線程。還有一個(gè)功能是,即使你的電腦重啟了,仍然可以暫停和恢復(fù)播放下載的(視頻)。我原本想做一個(gè)UI的,但是我太懶了… 一旦我的下載任務(wù)完成,我就不去關(guān)心 UI 的事情了。

          板球比分通知器

          我猜想這個(gè)功能已經(jīng)在別的地方提到過了。一個(gè)窗口通知器。(在右下角的通知區(qū)域,它會(huì)告訴你實(shí)時(shí)比分以及評(píng)論信息)。如果你愿意的化,在某些時(shí)間段,你也可以關(guān)掉它。

          WhatsApp 消息

          這個(gè)并不太實(shí)用,我只是寫著玩玩。因?yàn)?Whatsapp 有網(wǎng)頁版,我使用 selenium 和 Python 下載我的所有聯(lián)系人的顯示圖片,并且,一旦有人更新了他們的顯示圖片,我將會(huì)知道。(如何做到的?非常簡單,在設(shè)定好時(shí)間間隔后,我會(huì)一遍又一遍的不停下載所有的頭像信息,一旦照片的尺寸發(fā)生變化,我將會(huì)知道他/她更新了顯示圖片)。然后我會(huì)給他/她發(fā)一個(gè)信息,不錯(cuò)的頭像。我僅僅使用了一次來測試它的可用性。

          Nalanda 下載器

          我們一般在這個(gè)叫 ‘Nalanda’ 的網(wǎng)站上下載一些教學(xué)課件以及其他的課程資料, ‘Nalanda’ 在 BITS Pilani (Nalanda). 我自己懶得在考試前一天下載所有的課件,所以,我寫了這個(gè)這個(gè)下載器,它可以把每一門科的課件下載到相應(yīng)的文件夾。

          代碼:

           1import mechanize,os,urllib2,urllib,requests,getpass,time
          2
          3start_time = time.time
          4
          5from bs4 import BeautifulSoup
          6
          7br=mechanize.Browser
          8
          9br.open( https://nalanda.bits-pilani.ac.in/login/index.php )
          10
          11br.select_form(nr=0)
          12
          13
          14
          15name=
          16
          17while name== :
          18
          19 try:
          20
          21 print *******
          22
          23 username=raw_input( Enter Your Nalanda Username: )
          24
          25 password=getpass.getpass( Password: )
          26
          27 br.form[ username ]=username
          28
          29 br.form[ password ]=password
          30
          31 res=br.submit
          32
          33 response=res.read
          34
          35 soup=BeautifulSoup(response)
          36
          37 name=str(soup.find( div ,attrs={ class : logininfo }).a.string)[:-2]
          38
          39 except:
          40
          41 print Wrong Password
          42
          43f=open( details.txt , w )
          44
          45f.write(username+ n +password)
          46
          47f.close
          48
          49print Welcome, +name
          50
          51print All the files will be downloaded in your Drive C in a folder named "nalanda"
          52
          53#print soup.prettify
          54
          55div=soup.find_all( div ,attrs={ class : box coursebox })
          56
          57
          58l=len(div)
          59
          60a=
          61
          62for i in range(l):
          63
          64 d=div[i]
          65
          66 s=str(d.div.h2.a.string)
          67
          68 s=s[:s.find( ( )]
          69
          70 c=(s,str(d.div.h2.a[ href ]))
          71
          72 path= c:nalanda +c[0]
          73
          74 if not os.path.exists(path):
          75
          76 os.makedirs(path)
          77
          78 a+=[c]
          79
          80#print a
          81
          82overall=
          83
          84for i in range(l):
          85
          86 response=br.open(a[i][1])
          87
          88 page=response.read
          89
          90 soup=BeautifulSoup(page)
          91
          92 li=soup.find_all( li ,attrs={ class : section main clearfix })
          93
          94 x=len(li)
          95
          96 t=
          97
          98 folder=a[i][0]
          99
          100 print Downloading +folder+ files...
          101
          102 o=
          103
          104 for j in range(x):
          105
          106 g=li[j].ul
          107
          108 #print g
          109
          110 #raw_input
          111
          112 if g!=None:
          113
          114 temp=http://g.li[ class ].split
          115
          116 #raw_input
          117
          118 if temp[1]== resource :
          119
          120 #print yes
          121
          122 #print ********************
          123
          124 o+=[j]
          125
          126 h=li[j].find( div ,attrs={ class : content })
          127
          128 s=str(h.h3.string)
          129
          130 path= c:nalanda +folder
          131
          132 if path[-1]== :
          133
          134 path=path[:-1]
          135
          136 path+= +s
          137
          138 if not os.path.exists(path):
          139
          140 os.makedirs(path)
          141
          142 f=g.find_all( li )
          143
          144 r=len(f)
          145
          146 z=
          147
          148 for e in range(r):
          149
          150 p=f[e].div.div.a
          151
          152 q=f[e].find( span ,attrs={ class : resourcelinkdetails }).contents
          153
          154 link=str(p[ href ])
          155
          156 text=str(p.find( span ).contents[0])
          157
          158 typ=
          159
          160 if str(q[0]).find( word )!=-1:
          161
          162 typ= .docx
          163
          164 elif str(q[0]).find( JPEG )!=-1:
          165
          166 typ= .jpg
          167
          168 else:
          169
          170 typ= .pdf
          171
          172 if typ!= .docx :
          173
          174 res=br.open(link)
          175
          176 soup=BeautifulSoup(res.read)
          177
          178 if typ== .jpg :
          179
          180 di=soup.find( div ,attrs={ class : resourcecontent resourceimg })
          181
          182 link=di.img[ src ]
          183
          184 else:
          185
          186 di=soup.find( div ,attrs={ class : resourcecontent resourcepdf })
          187
          188 link=di.object[ data ]
          189
          190 try:
          191
          192 if not os.path.exists(path+ +text+typ):
          193
          194 br.retrieve(link,path+ +text+typ)[0]
          195
          196 except:
          197
          198 print Connectivity Issues
          199
          200 z+=[(link,text,typ)]
          201
          202 t+=[(s,z)]
          203
          204 if t==:
          205
          206 print No Documents in this subject
          207
          208 overall+=[o]
          209
          210 #raw_input( Press any button to resume )
          211
          212#print overall
          213
          214print Time Taken to Download: +str(time.time-start_time)+ seconds
          215
          216print Do you think you can download all files faster than this :P
          217
          218print Closing in 10 seconds
          219
          220time.sleep(10)

          我自己的 DC++

          這個(gè)腳本并不是很有用,目前只有一些學(xué)生在用它, 況且,DC ++ 已經(jīng)提供了一些很酷的功能。我原本可以優(yōu)化我自己的版本,但是,由于我們已經(jīng)有了DC ++,我并沒有這么做,盡管我已經(jīng)使用 nodeJS 和 python 寫了一個(gè)基礎(chǔ)版本。

          工作原理:

          打開 DC++ , 進(jìn)入一個(gè)中心站點(diǎn),然后連接,我寫了一個(gè) python 腳本來做這件事。腳本會(huì)在 PC上創(chuàng)建一個(gè)服務(wù)器(可以通過修改 SimpleHTTPRequestHandler 來完成)。

          在服務(wù)器端(使用了NodeJS),它會(huì)拿到 PC 的連接,共享給其他的用戶。

          這個(gè)是主頁面:

          這個(gè)頁面顯示了所有的用戶和他們的鏈接。因?yàn)槲医o Nick 加了一個(gè)超鏈接,所以在鏈接這一攔是空的。

          所以,當(dāng)用戶數(shù)量增加以后,這個(gè)頁面會(huì)列出所有的用戶列表。基本上,這個(gè)頁面充當(dāng)了一個(gè)你和另外一個(gè)人聯(lián)系的中間人角色。我還做了一個(gè)在所有用戶中搜索特定文件的功能。

          這里是客戶端的 python 文件(這是一段很長的代碼,我上傳到了 Ideone)

          所有這些代碼僅僅用于教育目的。

          「關(guān)鍵詞」,獲取優(yōu)質(zhì)資源

          回復(fù)關(guān)鍵詞「pybook03」,立即獲取主頁君與小伙伴一起翻譯的《Think Python 2e》電子版回復(fù)關(guān)鍵詞「入門資料」,立即獲取主頁君整理的 10 本 Python 入門書的電子版回復(fù)關(guān)鍵詞「m」,立即獲取Python精選優(yōu)質(zhì)文章合集回復(fù)關(guān)鍵詞「」,將數(shù)字替換成 0 及以上數(shù)字,有驚喜好禮哦~

          題圖:pexels,CC0 授權(quán)。

          好文章,我在看

          天逛論壇看到了一位程序員大佬,真的是大佬,寫了一個(gè)街頭霸王游戲,我很早學(xué)JavaScript的時(shí)候自己也想過寫游戲,但是那時(shí)候思維技術(shù)什么都不是很到位,所以一直沒有去寫,現(xiàn)在也沒有那個(gè)閑情去寫這個(gè)了,當(dāng)然對(duì)于剛學(xué)好JavaScript的確是是一個(gè)鍛煉思維和技術(shù)的最好案例,博主寫了三天搞定的,這技術(shù),我覺得已經(jīng)很牛逼了,自己也COPY了一份源碼,雖然自己沒有去寫出來,但是也瀏覽了一遍他的代碼,總體來說很不錯(cuò)了,分享給頭條上的小伙伴看看,想練手的自己也可以下載一份去練習(xí)下,做完成就感還是挺強(qiáng)的。

          街頭霸王大家應(yīng)該都玩過吧,好吧截圖示意下:

          小部分源碼分享,整套源碼大概幾千行代碼,文末有完整版領(lǐng)取地址:

          最后在對(duì)剛剛?cè)腴T學(xué)習(xí)的程序員提點(diǎn)建議:

          1. 技術(shù)是有體系的,但是又是非常零散的。這些零散的小知識(shí)太多了,而且在實(shí)際使用中,你并不需要把所有的零散小知識(shí)都學(xué)會(huì),那樣太慢了,更何況,在做真實(shí)的項(xiàng)目中,根本用不到這些小知識(shí)。用不到的東西很容易就會(huì)忘啊。所以這就是你看視頻或者是教程之后,就算是懂了也會(huì)很快就忘記的原因。怎么解決?多寫多練,學(xué)習(xí)致用。
          2. 嚴(yán)格按照任務(wù)序列去做,不要太糾結(jié)于細(xì)節(jié),學(xué)會(huì)把不會(huì)的內(nèi)容放一放,留在腦袋里一直讓它困惑。保持足夠的進(jìn)度,當(dāng)積攢到一定程度,你發(fā)現(xiàn)他成為你學(xué)習(xí)的瓶頸的時(shí)候,再去解決它。否則你會(huì)就迷失到知識(shí)的海洋中,根本找不到方向。
          3. 需要文章中的游戲源碼及python全套學(xué)習(xí)資料的按以下步驟獲取!

          1、評(píng)論
          2、轉(zhuǎn)發(fā)
          3、關(guān)注
          4、后臺(tái)私信【python】即可獲取!


          主站蜘蛛池模板: 国产AⅤ精品一区二区三区久久| 精品一区二区高清在线观看| 亚洲综合激情五月色一区| 亚洲av无码一区二区三区人妖 | 国产一区在线视频观看| 亚洲午夜精品一区二区| 国产综合无码一区二区三区| 国产在线观看一区二区三区四区 | 99精品一区二区三区| 中文字幕VA一区二区三区| 亚洲av无码天堂一区二区三区| 怡红院一区二区三区| 在线精品一区二区三区电影| 精品一区二区三区在线播放视频 | 中文字幕乱码一区久久麻豆樱花| 中文字幕亚洲一区二区va在线| 一区二区网站在线观看| 视频一区在线播放| 一区精品麻豆入口| 久久成人国产精品一区二区 | 在线播放国产一区二区三区| 亚洲永久无码3D动漫一区| 久久无码一区二区三区少妇| 久久国产高清一区二区三区 | 中文字幕av日韩精品一区二区 | 国产成人av一区二区三区在线| 毛片无码一区二区三区a片视频| 3d动漫精品啪啪一区二区中文| 人妻av无码一区二区三区| 99精品一区二区免费视频| 亚洲一区二区三区免费视频| 2021国产精品视频一区| 无码人妻av一区二区三区蜜臀 | 奇米精品视频一区二区三区| 中文字幕一区二区三区精彩视频| 末成年女A∨片一区二区| 精品无码国产一区二区三区51安| 中文字幕日韩精品一区二区三区 | 区三区激情福利综合中文字幕在线一区亚洲视频1 | 亚洲夜夜欢A∨一区二区三区| 久久99国产精品一区二区|