iT邦幫忙

0

(11/18)Python100天-第七天_練習2

  • 分享至 

  • xImage
  •  

因為發現
1.每天寫code的時間有限
2.之後的練習難度會增加,或許不能都一天內解完
所以想把Title改一下,之後方便回來看。
先以目前的進度為主要標籤試試,有不方便再改~
====
課本:https://reurl.cc/ROvEv6
今天要解決的問題是:
设计一个函数产生指定长度的验证码,验证码由大小写字母和数字构成。
函式=>驗證碼(驗證碼規則:1.長度固定2.大小寫字母和數字)
大寫字母=A-Z、小寫字母=a-z、數字=0-9
也就是說我需要寫一個函式能
1.組合四個變數
2.每個變數可以隨機顯示A-Z+0-9+a-z
方法一:

from random import randint #使用亂數的整數模組
alp='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789' #將亂數內容指派給alp這個變數
for i in range(0,4): #用for迴圈使這個設定重複四次
    i=randint(1,62) #借用剛剛設定的i(就不用再初始化一個變數)亂數每次alp代表的位置
    print (alp[i],end="")#每次印出alp位置(重複四次),並且不分行

在寫這個方法的時候因為太久沒有用random,所以稍微查了一下,結果發現其實random早已提供一個亂數字串的方法,試試看~
方法二:

import random ,string
for x in range(4):
    a=''.join(random.choice(string.ascii_letters+string.digits))
    print(a,end="")

(來源:https://tinyurl.com/2gf3qz7h)
出來的結果是一樣的,但這位大大的結果更為簡潔...又被秀了嗚嗚
但是在最一開始的時候其實也有想到是不是能用8進位的表示符來代替字母
不過測試的結果好像是不行--
接下來看解答

import random#導入random模組
def generate_code(code_len=4):#驗證碼生成器(默認長度為4)
    """
    生成指定长度的验证码

    :param code_len: 验证码的长度(默认4个字符)#param不知道是什麼意思

    :return: 由大小写英文字母和数字构成的随机验证码
    """
    all_chars = '0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
    last_pos = len(all_chars) - 1#最後一個位置&不懂為何要-1?
    code = ''
    for _ in range(code_len):#默認為4,可在一開始做更改
        index = random.randint(0, last_pos)
        code += all_chars[index]
    return code

感覺大方向跟我的第一個方法是差不多的,只是他間接執行了幾種不同的變數,這樣做的好處可能是很多地方可以調整,就像自由重訓器材,而我原本的解法只能算是史密斯
====
今天很早就把他寫完了只是到了晚上才看答案,上了一整天班的我現在真的隨時會睡著QQ
所以雖然文章裡還有很多不求甚解的部分,但我還是選擇pass,等之後再編輯ㄅ


圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言