(Python問題) 讀入一正數N>=3, 若N 能被3整除,則列印n//3的值,否則若N為奇數則列印 (N-1)//2 (N-1)//2 1的值,若N為偶數則列印(N-2)//2 (N-2)//2 2的值 求詳細過程(能說明最好,困擾很久了,謝謝大大)?

2018-10-04 12:05 pm

回答 (3)

2018-10-11 4:22 pm
東大作業是ㄅ 我也困擾很久了
2018-10-05 2:21 am
#讀入N值,因為input回傳為str,str沒有除法及取餘數的方法,需轉換成int
N = int(input('輸入大於等於3的正數: '))

# "%"代表取餘數,這邊假設N除與3之後餘數等於0,代表N能被3整除
if N%3 == 0:
>>>>print(N//3)
#elif代表if條件沒成立時的判斷,依照題意,當N不被3整除時,檢查N是否為奇數或偶數
#當N除與2時餘數不等於0,代表為奇數
elif not N%2 == 0:
>>>>print((N-1)//2)
#當N除與2餘數為0,代表為偶數
elif N%2 == 0:
>>>>print((N-2)//2)

'''
另外那位解答的朋友,題意應該是指當N若沒被3整除時才做奇數偶數的判斷,
當你全部使用if來做判斷時,將會把"N%3==0"以及"N為奇數或偶數"的判斷重疊,
假設N=6時,會印出N//3的值和(N-2)//2的值
N=9時,會印出N//3的值和(N-1)//2的值
會重複印出
'''


更新:
如果print的部分直接寫成一行的話我的方法是
print(N//3) if not N%3 else print('%d' % (((N-1)//2) if N%2 else ((N-2)//2)))

我的意思是指當N=9時,依照你程式的邏輯,
當讀到N%3時檢測到餘數=0 會印出N is divisable by 3
而繼續讀到if N % 2 != 0時,會檢測到餘數不等於0,會印出N is odd number和(N-1)//2的值
我對題意的理解是
"當讀入正數時,若此數可被3整除,則印出n//3的值,否則檢測此數是否為偶數或奇數,若奇數印出(N-1)//2,若偶數印出(N-2)//2"
**所以當N被3整除時,就"不會"判斷該數是否為奇數或偶數**
所以當N=6時,它可以被3整除,就"不會"判斷此樹是否為奇數或偶數;同理,
N=9時,因被3整除,也不會判斷此數是否為奇數或偶數,
所以這兩種情況都不會印出"N is even number (N-2)//2"或"N is odd number (N-1)//2"

而另外那位朋友的理解應該是
"當讀入正數時,若此數可被3整除,則印出n//3的值,並檢測此數是否為偶數或奇數,若奇數印出(N-1)//2,若偶數印出(N-2)//2"
**所以當N被3整除時,不僅會列印出N//3的值,"也會"檢測該值是否為奇、偶數**
所以當N=6時,會印出N//3,也會印出(N-2)//2
N=9時,會印出N//3,也會印出(N-1)//2,
應該是對題意理解不同的原因,我的方法如果用Javascript寫的話可以使用switch case的形式
switch(N%3){
case 0:
console.log(Math.floor(N/3));
break;
default:
switch(N%2){
case 0:
console.log(Math.floor((N-2)/2));
break;
default:
console.log(Math.floor((N-1)/2))
}
}

更新2:
題目沒有說判斷質數吧
參考: >>>>代表一個縮排
2018-10-04 4:03 pm
(內容更新)
用% Module(使用方式是 if n % k == 0,當n可被k整除(==0代表n除k沒有小數位時)是true時就執行)

if N % 3 == 0 or if N % 2 == 0
print(whatever_value)

whatever_value應該指向你想要列印的方程式

注:本人並非真的會用python,只是有留意python而大概知道閣下想要的是甚麼而矣。

(更新)

#讀入 N
N = int(input('Enter an integer'))

#檢查N是否大過或等於3
》》》》if N>=3:

#如是,執行:
》》》》》》》》if N % 3 == 0:

#N可被3整除,列印3及印N除3的值
》》》》》》》》》》》》print('N is divisable by 3:', N//3)

#N可被2整除,列印2及印N除2的值
》》》》》》》》if N % 2 == 0:
》》》》》》》》》》》》print('N is divisable by 2', N//2)

#N可被2整除即代表N是偶數,列印N是偶數並印(N-2)除2的值
》》》》》》》》》》》》print('N is even number', (N-2)//2)

#N 不能被2整除,即是代表N是奇數,列印N是奇數,並列印N-1除2的值。
》》》》》》》》if N % 2 != 0:
》》》》》》》》》》》》print('N is odd number', (N-1)//2)

《EDITED》
# 當N不是大於3或少於3時
》》》》else:
》》》》》》》》print('Do nothing, N is smaller or equal to 3')
《/EDITED》

有錯請賜教。

(更新2)
謝謝匿名網友指導。

所以在if N%3 == 0 的下一個條件應該用elif N%2==0就會比較好嗎?最使本人慼難以理解的應該是if statement如何分開在同一條件下應用其他if statement,其他話言還可用{ }來分劃開。

本人只是學了python一天,理解尚淺,爬了半天文,要不是也學過其他程式設計也許並不能這麼快理解n%k等是要來倣甚麼的。而知識十亦無法顯示多位的空白鍵(縮排)的空間,都當成沒有打入空白鍵,唯有上載截圖才能顯示。

(更新3)
不過,說到如果N=6,6是3及2也可除得盡,所以應該就兩個都要執行。而本人使用以上if的方式在linux上執行也沒有發現匿名網友說到N=9也會使偶數(N-1)//2執行的情況就是了。

(更新4)
回應匿名網友更新

謝謝匿名網友詳解。同意可能是你我理解題目不同的原固。

的確,本人是分開四個條件的考慮之下想出要為每一個條件都要程式去做些甚麼而設定,而不是因為能否被2或3整除才考慮N是否奇數或偶數。

本人發現本人的程式若N不是能被2或3以外整除的數字,即其他「質數」,就不會出現「N//2」或「N//3」的條件。又疑於「質數不能被其他質數整除」,除2之外的質數基本上其他質數一定是奇數,所以無論N是那一個2以外的質數,「N%2 !=0」都會發動print 出 N 是奇數。因此,本人程式在N無論是奇數或偶數之下也「只能勉強」算是能照住樓主要求的方式運作(此處可能另外需要一個不能被2和3整除時的else條件「N非能被2或3整除,可能是『質數』」的通知)。

(更新3)
發問雖然沒有提到要處理質數,但不竟會遇到才特此一提。


收錄日期: 2021-04-11 22:01:14
原文連結 [永久失效]:
https://hk.answers.yahoo.com/question/index?qid=20181004040556AAhD6Yk

檢視 Wayback Machine 備份