天天看點

水仙花數以及質數的判斷 | Python從入門到精通:入門篇之十六

第十五節:流程控制語句之循環語句

練習1:

求100以内所有的奇數之和。

奇數就是不能被2整除的數。用代碼來說就是滿足

i % 2 != 0

的數字。是以程式如下:

i=0
result=0
while i<100:
    i+=1
    if i % 2 != 0 :
        print(i)
        result+=i
print('result=:',result)           

練習2:

求100以内所有7的倍數之和,以及個數。

求7的倍數之和,首先要求出7的倍數,能整除7的就是7的倍數,即

i % 7 ==0

,再進行求和計算。

列印個數,就需要一個計數器,每當求出一次7的倍數,就加一。程式如下:

i=0
result=0
count=0
while i < 100 :
    i+=1
    if i % 7 ==0 :
        print(i)
        result+=i
        count+=1
print('100以内7的倍數之和:',result)
print('100以内7的倍數的個數:',count)           

練習3:

水仙花數是指一個 n 位數(n≥3 ),它的每個位上的數字的 n 次幂之和等于它本身(例如:13 + 53 + 3**3 = 153)。

求1000以内所有的水仙花數。

根據題目描述,将其每位數字的n次幂相加等于其本身的就是水仙花數。那麼怎麼得到每位的數字呢,可以利用餘數和商的思想來考慮一下。

當一個三位數能整除100的時候,得到的商就是它的百位數

a=n//100

,對100取餘之後,得到的就是它的十位和個位數,将其對10整除,得到的結果就是十位數

b=(n%100)//10

,以此類推,得到個位數字

c=n%10

。程式如下:

n=100
while n<1000 :
    a=n//100 #百位數字
    b=(n%100)//10 #十位數字
    c=n%10 #個位數字
    if a**3+b**3+c**3==n :
        print(n)
    n+=1 #更新while循環的條件           

練習4:

擷取使用者輸入的任意數,判斷其是否是質數。質數是隻能被1和它自身整除的數,1不是質數也不是合數。

如果任意數字比較難以了解的話可以結合具體的數字來想,假如給你一個數字10,讓你判斷它是否是質數,你會怎麼去判斷呢?首先要列出1~10的所有數字,再依次去跟10做除法運算,如果除了1和10之外還有數字能夠被10整除,則10不是質數。轉化成代碼語言就是

if n % i ==0

,

print(n,'是質數')

。具體程式如下:

n=int(input('請輸入一個大于1的數字:'))
i=2
while i<n :
    # 如果n能夠被i整除,則n不是質數
    if n % i ==0 :
        print(n, '不是質數')
    else:
        print(n, '是質數')
    i+=1           

執行結果為:

水仙花數以及質數的判斷 | Python從入門到精通:入門篇之十六

顯然這個結果不是我們想要的,那問題出在哪裡呢?

可以看一下,結果輸出了8個,正好是10整除了從2到9所有的數字,然後每做一次整除就列印了一個結果。那麼是否可以将列印寫在循環外面呢?可以嘗試一下,結果有同學就會發現,當将print語句寫在外面,就會不知道什麼時候列印是質數,什麼時候列印不是質數,是以在這裡老師再引入一個變量:flag,通過flag的值來傳遞資訊。程式如下:

n=int(input('請輸入一個大于1的數字:'))
i=2
flag=True
    while i<n :
        #如果n能夠被i整除,則n不是質數
        if n % i ==0 :
            #不是質數則改變flag的值
            flag=False
        i+=1 #i為2到n的所有的值。
    #循環結束之後,如果flag為true則n是質數
    if flag :
        print(n,'是質數')
    #如果flag為false則n不是質數
    else :
        print(n,'不是質數')           

快來看看自己掌握了多少?勤加練習,并結合老師的思路開拓自己的想法,加油吧!

第十七節:循環嵌套列印三角形矩陣

視訊學習:阿裡雲大學之Python進階必看

配套Python進階文章點選此處擷取