首页 > 其他 > 详细

第二次任务:随机从26个小写字母和0到10中生成10000个12位随机码,并编号写入txt文件中

时间:2018-10-29 17:15:02      阅读:374      评论:0      收藏:0      [点我收藏+]

从上次任务后两星期了,第二个任务终于完成了(个人习惯:一个任务完成后总结)

这次的任务相对于上一个任务难度加大了,能学到的东西也更多了。不多说,先上我自己琢磨出来的代码

import string
import random

#将随机数生成并创建TXT文件
with open("test_str.txt", "w") as f:
     for i in range(1, 10001):
         oneStr = ‘‘.join(random.sample(string.ascii_lowercase + string.digits, 12))
         oneStr = oneStr + \n
         f.write(oneStr)

#刷选出重复字符串并生成新的字符串取代
f=open("test_str.txt","r+")
i=0
n=1
for line in f.readlines():
    hang = f.readlines()
    for i in hang:
        for n in hang:
             if i==n:
                 n=n+1
                 if i.hang==n.hang:
                     for k in range(1,2):                        newStr=‘‘.join(random.sample(string.ascii_lowercase + string.digits, 12))
                        oldStr=n.hang
                        oldStr.replace(oldStr,newStr);
                        f.close()

#给每行随机数前面加上编号
file=open("test_str.txt","r")
lines=file.readlines()
file.close()
file=open("test_str.txt",w)
for k,v in enumerate(lines):
    k+=1
    file.write("【%d】 %s"%(k,v))
file.close()

自己琢磨出来的代码,我觉得这一题的难点在于怎样去除重复,要保证10000个代码肯定没有重复。

我的思路是:先生成,然后筛选出重复,最后将新生成的字符替换掉重复字符

作为一个初学者,只能想到以这种最死板的方法

下面上大佬代码

# -&- coding: utf-8 -*-
import random

def func():
    str = "abcdefghijklmnopqistuvwxyz0123456789"
    randstr = random.randint(1,36)
    return str[randstr-1:randstr]

def funcrand(list):
    a = ""
    for numtwo in range(1, 12):
        a += func()
    if(a in list):
        funcrand(list)
    return a

linkrand = []

while (len(linkrand) != 10000):

    linkrand.append(funcrand(linkrand))

txtName = "test_str.txt"

file = open(txtName,w,encoding=utf-8)

for i in range(0,10000):
    x = str(i)
    result = ""+x+""+linkrand[i]+\n
    file.write(result)

两个一对比,能很明显的看出来孰高孰低。

 

下面记录下这次任务的收获:

一、函数

1、def函数
     

2、digits生成0到9数字(str)
      ascii_letters生成所有字母(A到Z和a到z)

3、语法: ‘sep‘.join(seq)

     参数说明

     sep:分隔符。可以为空
     seq:要连接的元素序列、字符串、元组、字典
     上面的语法即:以sep作为分隔符,将seq所有的元素合并成一个新的字符串
     返回值:返回一个以分隔符sep连接各个元素后生成的字符串
     >>> seq1 = [‘hello‘,‘good‘,‘boy‘,‘doiido‘]
     >>> print ‘ ‘.join(seq1)
     hello good boy doiido

     >>> print ‘:‘.join(seq1)
     hello:good:boy:doiido

 

4、random.sample()可以从指定的序列中,随机的截取指定长度的片断,不作原地修改。
     andom.sample的函数原型为:random.sample(sequence, k),从指定序列中随机获取指定长度的片断。sample函数不会修改原有序列。

     list = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
     slice = random.sample(list, 5) #从list中随机获取5个元素,作为一个片断返回
     print slice
     print list #原有序列并没有改变。
     print( random.randint(1,10) ) # 产生 1 到 10 的一个整数型随机数
     print( random.random() ) # 产生 0 到 1 之间的随机浮点数
     print( random.uniform(1.1,5.4) ) # 产生 1.1 到 5.4 之间的随机浮点数,区间可以不是整数
     print( random.choice(‘tomorrow‘) ) # 从序列中随机选取一个元素
     print( random.randrange(1,100,2) ) # 生成从1到100的间隔为2的随机整数

     a=[1,3,5,6,7] # 将序列a中的元素顺序打乱
     random.shuffle(a)

 


5、with open("名字.txt", "w") as f:
     f.write(oneStr+‘\n‘)
     创建文本并打印

     f=open("aa.txt","r")
     lines=f.readline() #按行读取文件中的内容
     for line in lines: #循环输出读取的内容

 

 

 

6、enumerate()是python的内置函数

     enumerate在字典上是枚举、列举的意思
     对于一个可迭代的(iterable)/可遍历的对象(如列表、字符串),enumerate将其组成一个索引序列,利用它可以同时获得索引和值
     enumerate多用于在for循环中得到计数

     list1 = ["这", "是", "一个", "测试"]
     for index, item in enumerate(list1):
     print index, item
     >>>
     0 这
     1 是
     2 一个
     3 测试


     print line

     w:写打开
     a:追加打开(从eof开始,必要时创建新文件)
     r:读打开,如果open(“this.txt”)这种写法,默认就是r
     r+:读写打开
     w+:读写打开
     a+:读写打开
     rb、wb、ab:二进制打开
     rb+、wb+、ab+:二进制读写模式打开

 

 

7、def:定义一个模块的变量,或者说是类的变量。def命令定义一个函数。后接函数名称由字幕数字或下划线组成。括号中为函数变量,变量之间以逗号隔开。最后以:收                    尾。此为一个完整的函数定义。引用函数时,函数名称 + 参数名称即可

 

 

 

接着是思路方面的问题,作为初学者,在编程思维方面还没有完全适应,所以我使用的还是最传统的先输出字符串,在筛选替换出重复字符串,最后整理完成任务。而用老程序员的思维来看(上串代码),应该是运用算法在写入的同时进行对比,直接避免了重复。相比来看,我自己写的代码占用资源太多,在写入的不多的情况下可以使用,但是如果数据量加大,我的代码就不在适合。所以,编程不光要实现目的,还要运用最优的算法,期求资源最大化的得到利用。这也是自身的不足点,同时对于任务完成的效率也有待提高。

第二次任务:随机从26个小写字母和0到10中生成10000个12位随机码,并编号写入txt文件中

原文:https://www.cnblogs.com/zxbhzh/p/9871724.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!