官术网_书友最值得收藏!

1.5.2 變量的作用

西西船長(zhǎng)說:“我這里有4本星球日志,記錄了我們航行中經(jīng)過的星球情況,現(xiàn)在要分發(fā)給大熊、格蘭特蕾妮和克里克里3位船員。每人每次只能發(fā)1本,請(qǐng)問一共有多少種不同的分發(fā)辦法?”

大家立馬開始考慮各自想法來解決西西船長(zhǎng)的問題。西西船長(zhǎng)說:“這個(gè)問題其實(shí)屬于數(shù)學(xué)當(dāng)中非常常見的排列組合問題,即求從4個(gè)數(shù)中取3個(gè)不同的數(shù)進(jìn)行排列組合的結(jié)果。首先,將4本星球日志編號(hào)為1~4,給三位船員也編號(hào)為A、B、C。3個(gè)人每次從4本星球日志中任選1本,即每人都有4種選擇,由于1本日志不可能同時(shí)發(fā)給一個(gè)以上的人,因此只要這3個(gè)人所選日志的編號(hào)不同,就是一次有效的分發(fā)方法。聽起來挺復(fù)雜,不過大家別急,現(xiàn)階段我只是請(qǐng)大家體會(huì)一下使用變量的好處,請(qǐng)看以下代碼。”


#星球日志的分配
a,b,c,i=0,0,0,0
print("A,B,C三位船員所得書號(hào)分別為:\n")
for a in range(1,5):            # a,b,c的取值范圍都是1,2,3,4
    for b in range(1,5):
        for c in range(1,5):
            if(a!=b and a!=c and c!=b):
                print("大熊:%2d 格蘭特蕾妮:%2d 克里克里:%2d  "% (a,b,c))
                i+=1
                if(i%4==0):
                    print("\n")
print("%d本星球日志共有%d種分發(fā)方法\n" % (4,i))

在IDLE中新建一個(gè)文件,輸入上面的代碼,保存為star_books.py,然后選擇菜單Run→Run Module運(yùn)行程序,得到如圖1-14所示的結(jié)果。

圖1-14 4本星球日志的分配

“看,Python很快就計(jì)算出4本星球日志一共有24種分發(fā)方法。”西西船長(zhǎng)停頓了一下說,“不過,如果現(xiàn)在又有一本新的星球日志要分配,那么有多少種分發(fā)方法呢?如果有10本或更多的日志要分配呢?”

“那就要不斷地修改程序中所有出現(xiàn)數(shù)字5的地方,把5改成6,或改成10,或改成更大的數(shù)……這也太麻煩了吧!”大熊嘀咕道。

“說得好!如果我們用一個(gè)變量來存放星球日志的數(shù)量,會(huì)怎樣呢?”西西船長(zhǎng)請(qǐng)大家看下面修改后的代碼。


#星球日志的分配
N=6      #星球日志的數(shù)量
a,b,c,i=0,0,0,0
print("A,B,C三位船員所得書號(hào)分別為:\n")
for a in range(1,N+1):
    for b in range(1,N+1):
        for c in range(1,N+1):
            if(a!=b and a!=c and c!=b):
                print("大熊:%2d 格蘭特蕾妮:%2d 克里克里:%2d  "% (a,b,c))
                i+=1
                if(i%4==0):
                    print("\n")
print("%d本星球日志共有%d種分發(fā)方法\n" % (N,i))

首先,在代碼第2行創(chuàng)建了一個(gè)變量N,給它賦值6,用來代表星球日志的數(shù)量。再將原來代碼中的數(shù)字5全部用變量N + 1來替換。再次運(yùn)行程序,就會(huì)得出6本日志分配的結(jié)果,如圖1-15所示。

圖1-15 6本星球日志的分配

如果有更多的星球日志需要分配,只需要修改N的賦值就可以了,其他代碼完全不需要修改。你們也可以試一試!

主站蜘蛛池模板: 正镶白旗| 芦山县| 金坛市| 莱阳市| 连云港市| 吉木萨尔县| 东光县| 彭州市| 肃宁县| 法库县| 定边县| 诸城市| 诸城市| 京山县| 息烽县| 久治县| 吉木乃县| 岢岚县| 呼玛县| 江门市| 巴塘县| 昌都县| 万源市| 仁怀市| 根河市| 祁连县| 温泉县| 防城港市| 辰溪县| 项城市| 灌南县| 连山| 雅江县| 内黄县| 新余市| 通化市| 芦山县| 郑州市| 平定县| 获嘉县| 司法|