iT邦幫忙

0

[D-350]Python 7/100天_綜合案例1

  • 分享至 

  • xImage
  •  

==今天的課題
課本:https://reurl.cc/ROvEv6
綜合案例1:双色球选号
起手式餵狗:https://zh.wikipedia.org/wiki/%E5%8F%8C%E8%89%B2%E7%90%83
由此可知
1.獎號由6紅1藍組成,紅範圍1-33、藍範圍1-16

import random
for blue in range (1,7):
    print('blue%d=%d'%(blue,random.randint(1,33)))
print('red=%d'%(random.randint(1,16)))

結果會重複,但樂透好像不能重複
這讓我想到之前的驗證碼練習
既然都有直接隨機字串了,或許random裡會有隨機數字又不重複的方法可以用?
===
結果找到了sample這個方法,他跟randint不同的地方在於一次可以取出一定數量的內容
不過只能輸出字串..也就是說只能輸出個位數字
這時我又想到之前的驗證碼,老師的解答是直接在一個變數裡打上所有的材料
所以我也來試試看

import random
red=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33]
blue=[1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16]
print('red=%s \nblue=%s'%(random.sample(red,5),random.sample(blue,1)))

搞定

看答案

from random import randrange, randint, sample


def display(balls):
    """
    输出列表中的双色球号码
    """
    for index, ball in enumerate(balls):
#enumerate=枚舉
        if index == len(balls) - 1:
            print('|', end=' ')
        print('%02d' % ball, end=' ')
#%02d=兩位數佔位符,不夠的用0填充
    print()


def random_select():
    """
    随机选择一组号码
    """
    red_balls = [x for x in range(1, 34)]
    selected_balls = []
    selected_balls = sample(red_balls, 6)
    selected_balls.sort()
    selected_balls.append(randint(1, 16))
    return selected_balls
#採用的是6紅+1藍的模式,1藍用append加上去的

def main():
    n = int(input('机选几注: '))
    for _ in range(n):
#_為循環此數的意思
        display(random_select())
#display(balls),然後隨機出球


if __name__ == '__main__':
    main()

有種「雖然內容都看得懂,但要我模仿還是寫不出來」的感覺,不知道該怎麼辦,不然就先繼續學吧(?


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

1 則留言

1
柳丁柚
iT邦新手 1 級 ‧ 2022-11-29 15:33:59

剛開始學程式的人的通病呢
不用擔心
純粹是寫的code不夠多而已
多刷題就好了

還有建議看完解答後重構一下自己的程式碼
不然知識永遠沒有辦法變成經驗

原來如此!感謝前輩大大的分享&建議

我要留言

立即登入留言