以前在測試一個系統的時候,常常須要用到手機號碼,可是一個手機號使用後就不能再次使用了,因此常常要想一些可用的手機號,如18888888888等等,每次想手機號也挺麻煩的,因此此次想着作一個生成手機號的小工具。app
一、基本實現dom
import random list_1 = ["134", "135", "136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "172", "178", "182", "183", "184", "187", "188", "198"] # 中國移動號碼段 list_2 = ["130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186"] # 中國聯通號碼段 list_3 = ["133", "149", "153", "173", "177", "180", "181", "189", "191", "199", "193"] # 中國電信號碼段 num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] # 存放0-9數字,號碼的4-11位從這裏取 phone_all = list() # 存放全部生成的電話號碼 phone_output = list() # 存放去重後的電話號碼 def create_phone(count, choice): # 參數1爲生成號碼的個數,參數2爲運營商選擇 for t in range(count): phone = random.choice(choice) + "".join(random.choice(num) for i in range(8)) #使用random函數生成電話號碼 if phone not in phone_all: # 判斷該電話號碼是否是出現過 phone_output.append(phone) # 沒出現則放到phone_output phone_all.append(phone) # 把生成的每一個號碼都存起來,用去去重比對 print(phone_output) # 打印去重後的電話 if __name__ == '__main__': create_phone(10, list_3)
二、使用Tkinter作一個界面小工具函數
代碼以下工具
# -*- coding:utf-8 -*- import tkinter as tk from tkinter import ttk from tkinter import * import random class Phone(): def __init__(self): self.window = tk.Tk() # 建立window窗口 self.window.title("手機號碼生成器") # 定義窗口名稱 # self.window.resizable(0,0) # 禁止調整窗口大小 self.menu = ttk.Combobox(self.window, width=6) self.path = StringVar() # self.lab1 = tk.Label(self.window, text="目標路徑:") self.lab2 = tk.Label(self.window, text="選擇運營商:") self.lab3 = tk.Label(self.window, text="生成數量:") self.count = tk.Entry(self.window, width=5) self.info = tk.Text(self.window, height=20) # 建立一個文本展現框,並設置尺寸 self.menu['value'] = ('中國聯通', '中國移動', '中國電信') self.menu.current(0) # 添加一個按鈕,用於觸發生成號碼 self.t_button1 = tk.Button(self.window, text='生成號碼', relief=tk.RAISED, width=8, height=1, command=self.create_phone) # 添加一個按鈕,用於觸發清空輸出框功能 self.c_button2 = tk.Button(self.window, text='清空輸出', relief=tk.RAISED, width=8, height=1, command=self.cle) def gui_arrang(self): """完成頁面元素佈局,設置各部件的位置""" # self.lab1.grid(row=0, column=0) self.lab2.grid(row=0, column=0) # 選擇運營商標題按鈕位置 self.menu.grid(row=0, column=1, sticky=W) # 選擇運營商下拉框位置 self.lab3.grid(row=1, column=0) # 生成數量標題位置 self.count.grid(row=1, column=1, sticky=W) # 生成數量輸入框位置 self.info.grid(row=2, rowspan=5, column=0, columnspan=3, padx=15, pady=15) # 展現結果文本框位置 self.t_button1.grid(row=0, column=2) # 生成號碼按鈕位置 self.c_button2.grid(row=1, column=2) # 清空輸出按鈕 def get_choice(self): category = { 'list_1': ["134", "135", "136", "137", "138", "139", "147", "150", "151", "152", "157", "158", "159", "172", "178", "182", "183", "184", "187", "188", "198"], # 中國移動號碼段 'list_2': ["130", "131", "132", "145", "155", "156", "166", "171", "175", "176", "185", "186"], # 中國聯通號碼段 'list_3': ["133", "149", "153", "173", "177", "180", "181", "189", "191", "199", "193"] # 中國電信號碼段 } cid = None if self.menu.get() == "中國聯通": cid = category["list_1"] elif self.menu.get() == "中國移動": cid = category["list_2"] elif self.menu.get() == "中國電信": cid = category["list_3"] return cid @staticmethod def basic_num(): num = ["0", "1", "2", "3", "4", "5", "6", "7", "8", "9"] return num def create_phone(self): phone_all = list() # 存放全部生成的電話號碼 phone_output = list() # 存放去重後的電話號碼 for t in range(int(self.count.get())): phone = random.choice(self.get_choice()) + "".join(random.choice(self.basic_num()) for i in range(8)) if phone not in phone_all: phone_output.append(phone) # 判斷電話號碼是否是出現過,沒出現就追加到phone_output中 # phone_output = "".join(phone) phone_all.append(phone) # 把生成的每個號碼都追加到phone_all(去重參考物) # phone_all = "".join(phone) # print(phone_output) step = 6 # 設置一個值,每次顯示6個號碼 for b in [phone_output[i:i + step] for i in range(0, len(phone_output), step)]: # 每次打印6個號碼 print(",".join(b)) # 把列表中的號碼取出來並以","隔開,形式是字符串 self.info.insert('end', ",".join(b) + '\n') # 輸出到頁面,而且每輸出一組(6個)就追加一個換行符 def cle(self): """定義一個函數,用於清空輸出框的內容""" self.info.delete(1.0, "end") # 從第一行清除到最後一行 def main(): t = Phone() t.gui_arrang() tk.mainloop() if __name__ == '__main__': main()
界面以下:oop
由於開始輸出到界面的時候是按照顯示框的大小自動換行的,因此有時會遇到一個號碼分兩行顯示,爲了解決這個問題,考慮以下:
(1)每次只輸出6個電話號碼,也就是6個爲一組佈局
(2)輸出一組後,緊接着輸出一個換行符測試
關於第一點,在網上搜索了一下,如何把一個列表中的數據按照必定數量分組輸出,方法以下ui
參考博客:https://blog.csdn.net/Mr_Cat123/article/details/80584988
a = [1,2,3,4,5,6,7,8,9,10,11]
step = 3
b = [a[i:i+step] for i in range(0,len(a),step)]
print(b)
>>>[[1, 2, 3], [4, 5, 6], [7, 8, 9], [10, 11]]
>>> b[1]
[4, 5, 6]
上面的step是指每次輸出3個數字
關於第二點,開始是在每一個列表後追加一個換行符,發現每次顯示到界面時,都會顯示一個{}spa
後來想着多是數據格式的問題,不能把換行符加到列表中,而後處理了一下,先把列表轉換成字符(使用join()方法),而後在每組字符後追加一個換行符,以下.net