以上四種情況均為最常見的排列組合,從有無順序和是否重復兩個維度進行思考,建議理解并背誦。
創新互聯建站堅持“要么做到,要么別承諾”的工作理念,服務領域包括:網站設計、成都網站建設、企業官網、英文網站、手機端網站、網站推廣等服務,滿足客戶于互聯網時代的興化網站設計、移動媒體設計的需求,幫助企業找到有效的互聯網解決方案。努力成為您成熟可靠的網絡建設合作伙伴!
在使用python計算排列組合之前,需要計算階乘,可以有兩種方式,一是使用math庫中的factorial函數,二是使用如下的遞歸函數。
按照排列的公式:
按照組合的公式:
3.1 生日問題
假設一個班級中共有n個人,一年有365天,其中每天作為生日的概率是相等的,那么其中至少有兩個人的生日在同一天的概率是多少?
此題屬于全排列問題,需要反向思考,寫出公式之后直接輸入到python中計算
3.2 大樂透問題
大樂透的玩法是這樣的,從35個紅球中選擇5個,從12個紅球中選擇2個,如果全中,那就中一等獎。那么請問,中一等獎的概率是多少?
此題屬于組合問題,中獎的可能性為一種,因此分子為1,分母為所有的組合情況。
在日常的工作學習中,我們肯定會遇到排列組合問題,比如,在5種顏色的球中,任意取3個,共有多少種組合方式,這也包括有放回和無放回抽樣。
在python中,自帶的排列組合函數,都在python的指導工具包itertools中。
product 笛卡爾積(有放回抽樣排列)
permutations 排列(不放回抽樣排列)
combinations 組合,沒有重復(不放回抽樣組合)
combinations_with_replacement 組合,有重復(有放回抽樣組合)
python3中返回的為對象,可以通過迭代讀取將值輸出。
end
#!/usr/bin/env?python?
#?-*-?coding:?UTF-8?-*-?
#python2.7?
import?string,random
def?get_clice(num):
res?=[]?
tmp?=?list(string.lowercase)
for?i?in?range(num):
res.append(''.join(random.sample(tmp,random.randint(3,7))))
return?res
print?get_clice(20)
除了這3個數都選0個外共有239種組合,代碼(縮進見圖):
c=0
for i in range(5):
for j in range(6):
for k in range(8):
r='1.25+'*i+'2.5+'*j+'3+'*k
if r:
c+=1
print(r[:-1],'=',sum((1.25*i,2.5*j,3*k)),sep='')
print(f'共{c}種組合')
import math
m = int(input("請輸入第一個數字:"))
n = int(input("請輸入第二個數字:"))
if m 0 or n 0 or m - n 0:
print("負數是沒有階乘,請重新輸入!")
else:
result = math.factorial(m) / math.factorial(n) / math.factorial(m - n)
print("按照公式C(m, n) = m!/n! /(m - n)!,C({0},{1})的答案為 {2}".format(m, n, result))
網頁題目:python函數計算組合 python函數計算組合數
文章位置:http://vcdvsql.cn/article18/dooojdp.html
成都網站建設公司_創新互聯,為您提供手機網站建設、動態網站、網頁設計公司、App設計、面包屑導航、網站收錄
聲明:本網站發布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網站立場,如需處理請聯系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創新互聯