1、新建python文件,testprimenum.py;
② 我用了100行Python代碼,實現了與女神尬聊微信(附代碼)
朋友圈很多人都想學python,有一個很重要的原因是它非常適合入門。對於 人工智慧演算法 的開發,python有其他編程語言所沒有的獨特優勢, 代碼量少 ,開發者只需把精力集中在演算法研究上面。
本文介紹一個用python開發的,自動與美女尬聊的小軟體。以下都是滿滿的干貨,是我工作之餘時寫的,經過不斷優化,現在分享給大家。那現在就讓我們抓緊時間開始吧!
准備:
編程工具IDE:pycharm
python版本: 3.6.0
首先新建一個py文件,命名為:ai_chat.py
PS: 以下五步的代碼直接復制到單個py文件裡面就可以直接運行。為了讓讀者方便寫代碼,我把代碼都貼出來了,但是排版存在問題,我又把在pycharm的代碼排版給截圖出來。
第一步: 引入關鍵包
簡單介紹一下上面幾個包的作用: pickle 包 是用來對數據序列化存文件、反序列化讀取文件,是人類不可讀的,但是計算機去讀取時速度超快。(就是用記事本打開是亂碼)。 而 json包 是一種文本序列化,是人類可讀的,方便你對其進行修改(記事本打開,可以看到裡面所有內容,而且都認識。) gensim 包 是自然語言處理的其中一個python包,簡單容易使用,是入門NLP演算法必用的一個python包。 jieba包 是用來分詞,對於演算法大咖來說效果一般般,但是它的速度非常快,適合入門使用。
以上這些包,不是關鍵,學習的時候,可以先跳過。等理解整個程序流程後,可以一個一個包有針對性地去看文檔。
第二步:靜態配置
這里path指的是對話語料(訓練數據)存放的位置,model_path是模型存儲的路徑。
這里是個人編程的習慣,我習慣把一些配置,例如:文件路徑、模型存放路徑、模型參數統一放在一個類中。當然,實際項目開發的時候,是用config 文件存放,不會直接寫在代碼里,這里為了演示方便,就寫在一起,也方便運行。
第三步: 編寫一個類,實現導數據、模型訓練、對話預測一體化
首次運行的時候,會從靜態配置中讀取訓練數據的路徑,讀取數據,進行訓練,並把訓練好的模型存儲到指定的模型路徑。後續運行,是直接導入模型,就不用再次訓練了。
對於model類,我們一個一個來介紹。
initialize() 函數和 __init__() 函數 是對象初始化和實例化,其中包括基本參數的賦值、模型的導入、模型的訓練、模型的保存、最後返回用戶一個對象。
__train_model() 函數,對問題進行分詞,使用 gesim 實現詞袋模型,統計每個特徵的 tf-idf , 建立稀疏矩陣,進而建立索引。
__save_model() 函數 和 __load_model() 函數 是成對出現的,很多項目都會有這兩個函數,用於保存模型和導入模型。不同的是,本項目用的是文件存儲的方式,實際上線用的是資料庫
get_answer() 函數使用訓練好的模型,對問題進行分析,最終把預測的回答內容反饋給用戶。
第四步:寫三個工具類型的函數,作為讀寫文件。
其中,獲取對話材料,可以自主修改對話內容,作為機器的訓練的數據。我這里只是給了幾個簡單的對話語料,實際上線的項目,需要大量的語料來訓練,這樣對話內容才飽滿。
這三個工具函數,相對比較簡單一些。其中 get_data() 函數,裡面的數據是我自己編的,大家可以根據自己的習慣,添加自己的對話數據,這樣最終訓練的模型,對話方式會更貼近自己的說話方式。
第五步: 調用模型,進行對話預測
主函數main(), 就是你整個程序運行的起點,它控制著所有步驟。
運行結果:
程序後台運行結果:
如果有疑問想獲取源碼( 其實代碼都在上面 ),可以後台私信我,回復:python智能對話。 我把源碼發你。最後,感謝大家的閱讀,祝大家工作生活愉快!
③ 如何用python編寫一個從隨機數表1~100中抽取三個樣本的隨機數程序
#導入隨機數模塊
import random
#定義一個空的數組,用作取樣表
reList = []
#為取樣表賦值,1~100
for i in range(1,101):
reList.append(i)
#使用sample方法,取3個隨機數
res = random.sample(reList,k=3)
print("三個隨機數是:{}".format(res))
④ Python挑戰100題(14~20)
題目:給你個小寫英文字元串a和一個非負數b(0<=b<26), 將a中的每個小寫字元替換成字母表中比它大b的字母。這里將字母表的z和a相連,如果超過了z就回到了a。
例如a="cagy", b=3,
則輸出 :fdjb
提示: ord('a') = 97, ord('b') = 98, chr(97) = a
參考答案:
題目:給你一個字元串a和一個正整數n,判斷a中是否存在長度為n的迴文子串。如果存在,則輸出YES,否則輸出NO。
迴文串的定義: 記串str逆序之後的字元串是str1,若str=str1,則稱str是迴文串,如"abcba".
參考答案:
題目:給你兩個時間st和et(00:00:00<=st <= et<=23:59:59), 請你給出這兩個時間間隔的秒數。
如:st="00:00:00", et="00:00:10", 則輸出10.
參考答案:
方法一:切片
方法二:time模塊
題目:給你一個時間t(t是一個字典,共有六個字元串key(year,month,day,hour,minute,second),值為每個值為數字組成的字元串,
如t={'year':','month':Ə','day':ཚ','hour':ཌ','minute':ཀྵ','second':ƈ'}
請將其按照以下格式輸出, 格式:XXXX-XX-XX XX:XX:XX。如上例應該輸出: 2013-09-30 16:45:02。
參考答案:
方法一:利用datetime模塊
方法二:一行
題目:給你一個整數組成的列表L,按照下列條件輸出:
若L是升序排列的,則輸出"UP";
若L是降序排列的,則輸出"DOWN";
若L無序,則輸出"WRONG"。
參考答案:
題目:一個環形的公路上有n個加油站,編號為0,1,2,...n-1,
每個加油站加油都有一個上限,保存在列表limit中,即limit[i]為第i個加油站加油的上限,
而從第i個加油站開車開到第(i+1)%n個加油站需要cost[i]升油,cost為一個列表。
現在有一輛開始時沒有油的車,要從一個加油站出發繞這個公路跑一圈回到起點。
給你整數n,列表limit和列表cost,你來判斷能否完成任務。
如果能夠完成任務,輸出起始的加油站編號,如果有多個,輸出編號最小的。
如果不能完成任務,輸出-1。
參考答案:
構造新的limit和cost並遍歷,來源 http://www.pythontip.com/coding/report_detail/3195/
題目:給你一個整數列表L,判斷L中是否存在相同的數字,
若存在,輸出YES,否則輸出NO。
參考答案:
⑤ Python寫100個隨機整數並寫入文件
以下是一個Python程序,可以生成100個隨機整數(范團族圍在1到100之間),並將它們寫斗或胡入文件random_numbers.txt中。其中,使用了random模塊生成隨機數,以及with open() as語句來打開文件和自動關閉文件。
python復制代碼import random# 生成100個隨機整數numbers = [random.randint(1, 100) for i in range(100)]# 將隨機數寫入文件with open('random_numbers.txt', 'w') as f: for num in numbers:
f.write(str(num) + '\n')print('隨機數已寫入文件')
運行空攔該程序後,會在當前目錄下生成random_numbers.txt文件,並將100個隨機整數寫入其中。