Python生成隨機驗證碼,大樂透號碼


實例筆記之生成隨機號碼
擴展知識 - yield(生成器)

隨機生成驗證碼
示例代碼:

import random     # 導入標准模塊中的random

if __name__ == '__main__':
    check_code = ""                      # 保存驗證碼的變量
    for i in range(4):                  # 循環4次
        index = random.randrange(0, 4)    # 隨機生成0~3中的一個數
        if index != i and index+1 != i:  # 從此開始就是隨機生成一個字符或數字(不知道上面代碼到底產生了幾(因為隨機),也不需要知道,反正結果能出4個字符驗證碼即可)
            check_code += chr(random.randint(97, 122))  # 隨機生成a~z中的一個小寫字母
        elif index+1 == i:
            check_code += chr(random.randint(65, 90))   # 隨機生成A~Z中的一個大寫字母
        else:
            check_code += str(random.randint(1, 9))     # 隨機生成1~9中的一個數字
    print("驗證碼:", check_code)        # 輸出生成的驗證碼


執行結果:
	驗證碼: xufz  # 隨機不一定是這個

以上是生成4位隨機驗證碼示例代碼,需要位數更多改一下數字即可。

生成大樂透號碼

原始代碼:

"""
輸入注數生成大樂透號碼
紅球取值范圍1-36,籃球1-12
"""
import random


class GreatLotto:
    """
    需要一個生成次數count
    """
    global result  # 聲明全局變量
    result = []

    def __init__(self, count):
        self.count = count

    def randoms(self):
        """
        :return: 返回傳入次數的隨機彩票號碼(返回的是一個整體列表)
        """
        for i in range(self.count):
            for j in range(7):
                if j <= 4:
                    index1 = random.randrange(1, 36)
                    result.append(index1)
                if j > 4:
                    index1 = random.randrange(1, 13)
                    result.append(index1)
        return result  # 返回生成結果

    def start(self):
        """
        :return: 根據傳入的次數判斷列表取值的開始數
        """
        for l in range(self.count):
            if l < 1:
                two = l
            else:
                two = l * 7
            yield two  # yield是生成器,將每次循環生成的結果儲存(如果使用了return會結束循環,導致只能執行一次)

    def ends(self, rer):
    """根據傳入的次數判斷列表取值的結束數"""
        for k in range((len(rer) + 1) // 7):  # 小數不能循環我們用地板除
            one = (k + 1) * 7
            yield one  # yield是生成器,將每次循環生成的結果儲存(如果使用了return會結束循環,導致只能執行一次)


if __name__ == '__main__':
    num = int(input("請輸入需要生成的注數:"))
    Great = GreatLotto(num)  # 實例化GreatLotto 並將輸入的次數傳入
    lists = Great.randoms()  # 得到返回的生成結果
    zips = zip(Great.start(), Great.ends(lists))  # 壓縮兩個函數 使for循環可以同時循環兩個對象
    for m, n in zips:  # 遍歷兩個函數的生成器
        print(lists[m:n])

執行結果:
	請輸入需要生成的注數:3
	[6, 15, 9, 34, 9, 8, 8]
	[17, 18, 6, 15, 6, 5, 2]
	[9, 29, 23, 22, 32, 1, 8]

改進版本:

"""
輸入注數生成大樂透號碼
紅球取值范圍1-36,籃球1-12
"""
import random


class GreatLotto:
    """
    需要一個生成次數count
    """
    global result  # 聲明全局變量
    result = []

    def __init__(self, count):
        self.count = count

    def randoms(self):
        """
        :return: 返回傳入次數的隨機彩票號碼(返回的是一個整體列表)
        """
        for i in range(self.count):
            for j in range(7):
                if j <= 4:
                    index1 = random.randrange(1, 36)
                    result.append(index1)
                if j > 4:
                    index1 = random.randrange(1, 13)
                    result.append(index1)
        return result  # 返回生成結果

    def start_end(self):
        """
        :return: 根據傳入的次數判斷列表取值的開始數和結束數
        """
        for k in range(self.count):
            if k < 1:
                start1 = k
            else:
                start1 = k * 7
            end1 = start1 + 7
            yield end1, start1  # yield是生成器,將每次循環生成的結果儲存(如果使用了return會結束循環,導致只能執行一次)


if __name__ == '__main__':
    try:
        num = int(input("請輸入需要生成的注數:"))
    except ValueError:
        print('輸入的格式錯誤!!!')
        num = int(input("請重新輸入需要生成的注數:"))
    Great = GreatLotto(num)  # 實例化GreatLotto 並將輸入的次數傳入
    lists = Great.randoms()  # 得到返回的生成結果
    for end, start in Great.start_end():  # 遍歷兩個函數的生成器
        print(lists[start:end])  # 輸出最終生成的結果

執行結果:
	請輸入需要生成的注數:3
	[32, 27, 30, 2, 28, 10, 11]
	[25, 20, 15, 11, 34, 3, 3]
	[15, 11, 8, 15, 26, 7, 5]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM