實現一個電話號碼生成器

任務背景

以前在測試一個系統的時候,常常須要用到手機號碼,可是一個手機號使用後就不能再次使用了,因此常常要想一些可用的手機號,如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

相關文章
相關標籤/搜索