python小工具

您所在的位置:网站首页 python生成电话号码 python小工具

python小工具

2023-10-12 23:05| 来源: 网络整理| 查看: 265

任务背景

在测试某个系统时经常会用到手机号码,但是有时一个手机号使用后就不能再次使用了,经常要想一些可用的手机号,如18888888888等等,每次想手机号也挺麻烦的,所以这次想着做一个生成手机号的小工具。

实现过程

1. 基本实现

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)

效果如下:

2. 使用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()

效果如下:

遇到的问题

因为开始输出到界面的时候是按照显示框的大小自动换行的,所以有时会遇到一个号码分两行显示,为了解决这个问题,考虑如下: (1) 每次只输出6个电话号码,也就是6个为一组

(2) 输出一组后,紧接着输出一个换行符

关于第一点,在网上搜索了一下,如何把一个列表中的数据按照一定数量分组输出,方法如下:

参考博客: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个数字

关于第二点,开始是在每个列表后追加一个换行符,发现每次显示到界面时,都会显示一个{},如下:

后来想着可能是数据格式的问题,不能把换行符加到列表中,然后处理了一下,先把列表转换成字符(使用join()方法),然后在每组字符后追加一个换行符,如下



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3