[請益]請問python 用 if else 比較數字大小的問題

請教投入 a,b,c三個數字
用 if else 如何找最大的數字?


其實這是孩子的國中作業
而且還規定用 if else
應用在文書實務上...excel 用 max() 就搞定
不過對於沒有程式實做經驗的人來說
實在是毫無頭緒

和孩子討論後
邏輯是這樣的:

if a>b ,
1.正確, and b>c ,所以 a 最大。
2.錯誤,即 b>a, 所以要比較 b 和 c 的大小
2-1 and b>c , 所以 b 最大
2-2 and b<c, 所以 c 最大

試著寫出來:
a=int(input("請輸入a的值:"))
b=int(input("請輸入b的值:"))
c=int(input("請輸入c的值:"))
if a>=b:
if b>=c:
print("最大值為:",a)
elif c>=b:
print("最大值為:",a)
elif c>=a:
print("最大值為:",c)
if b>=a:
if a>=c:
print("最大值為:",b)
elif c>=b:
print("最大值為:",c)
else:
print("最大值為:",c)

比較大小時會出錯
請教是哪裡出錯呢?
謝謝
王大大頭 wrote:
請教投入 a,b,c...(恕刪)


程式單看 if 判斷式的前五行,就有邏輯上的錯誤

a > b 且 b > c 則顯示 a 最大,這個邏輯是對的

但是再往下變成 a > b 且 c > b 則顯示 a 最大,這就說不通了...

可以改成這樣

if a > b and a > c:
  print('a 最大')
if b > a and b > c:
  print('b 最大')
if c > a and c > b:
  print('c 最大')
王大大頭 wrote:
請教投入 a,b,c...(恕刪)


max=a
if max<b
max=b

if max<c
max=c

這樣就可以簡單找出最大值了
用不到else,而且等值也不會有錯
風~~

王大大頭 wrote:
請教投入 a,b,c...(恕刪)


雖然沒有學過python, 不過邏輯應該是這樣

只需要2個if 2個 else


----------
阿,樓上大大們都比我猛
if a > b and a > c:
  print('a 最大')
else
if b > c:
  print('b 最大')
else
  print('c 最大')

nrest.fy wrote:
if a > b a...(恕刪)


謝謝各位
最後
參考大家的指導

得到
=============================
a=int(input("請輸入a的值:"))
b=int(input("請輸入b的值:"))
c=int(input("請輸入c的值:"))
if a>=b and a>=c:
print("最大值為:",a)
elif b>=c:
print("最大值為:",b)
else:
print("最大值為:",c)
=============================
結案,謝謝各位

題外話
現在國中課程還有上電腦課
個人第一次使用電腦,已經超過20歲了
而且是工作導向,在外面補習班也有上過類似Qbasic的課程
不過,完全是聽不懂

這種比較數字大小的程式語法,
比較像是訓練「邏輯」這部份的能力
並不是套裝應用程式使用能力的課程
在有些邏輯演繹還未經訓練的孩子身上
似乎是辛苦了些
1~5樓都沒有考慮到 a=b and/or b=c 可能性
王大大頭 wrote:
請教投入 a,b,c...(恕刪)


簡單的說....
其實是在第一段if判斷時,
elif裡面c>=b這段.此時最大應該是c不是a吧?!
if a>=b:
if b>=c: #請空n格
print("最大值為:",a) #請空n格
elif c>=b: #請空n格
print("最大值為:",a) #請空n格 #這裡應該是c....
但我覺得這可能是樓主筆誤.
python裡的邏輯運算,如果不是單獨的邏輯,而是歸附在前面邏輯下的else if
那以下得內縮,不然規則上會以為是跟前面邏輯無關的獨立邏輯。
以上是一陣子得常看同事python碼的初學者,一些直覺上看到的問題。
c&c++語言的並且是用&&
但是python則是直接用英文的and....
而且令人不解的是有時候想用四則運算括號,把邏輯判斷框起來,反而是錯的邏輯。
hchou38 wrote:
簡單的說....其...(恕刪)


同意, PYTHON 的空格限制,和 COBOL 一樣,要求嚴格! 錯位都不行!

但是就不會一堆人各唱各的調! 搞到最後大家都看不懂!

就像

if (a > b) {
printf(" a 大");
} else {
printf(" b 大");
}

這一種寫法,簡單還可以,多層就很容錯亂了!
我個人比較愛

if (a > b)
{
printf(" a 大");
}
else
{
printf(" b 大");
}


一層一層的! 那為何會有之前那一些寫法呢? 主要就是因為檔案大小的問題! 早期因為檔案若是大了,佔了磁碟空間會變多,當時的磁碟貴,為了可以減少一些 「跳行」 所以就這樣縮減的寫法, 但是之後也導致維謢上多了很多的困難!

python 對我最大的麻煩,就是沒有 switch 的命令(雖然有第三方寫出套用工具,但是還是不好用), 變成要用一堆的 if else, else if ...... 來組合!


而我認為 holyduck 的寫法比較好! 因為可以擴充! 因為若是今天突然由 a,b,c 再加上 d,e,f.........

那就無限的 if else 下去了! 若是使用 holyduck 的寫法,配合著 for 或 while 的方式,就可以把 陣列中最大值找出!
傻綠班的鴿 8:17 ━━━━━━━━●━━━ 14:50 ⇆ㅤㅤㅤㅤ◁ㅤㅤ❚❚ㅤㅤ▷ㅤㅤㅤㅤ↻
1.用Max= 最佳解,以後可用陣列,不受數量限制如100個數找最大
2.要用IF訓練邏輯,要先學會2分法,把工作分成2部分
先用a和bc比,成立就是a,不成立就不是a(二選一)
既然不是a,那就一定是bc二選一
不過邏輯有一個漏洞,就是abc有一個以上相等要怎麼如何處理?
應該先定義abc都不相等,不然最先成立或最後成立等又是另一個邏輯問題了!

控制機器人時,有左右前三個動作就要麼做...

每一步都要判斷
IF 有事件
IF 左轉條件: (左轉或右轉)
左轉動作
ELSE
右轉動作
END
END
向前走一步 (無論左右前都要有這個動作)
關閉廣告
文章分享
評分
評分
複製連結

今日熱門文章 網友點擊推薦!