顯示廣告
隱藏 ✕
※ 本文為 MindOcean 轉寄自 ptt.cc 更新時間: 2022-02-03 01:55:18
看板 Gossiping
作者 dixitdeus (dixitdeus)
標題 [問卦] 初學Python是不是養成一堆壞習慣?
時間 Wed Feb  2 00:54:25 2022



現在流行入門學Python,真的會養成一堆壞習慣耶

昨天看學生寫的code,一堆人在那邊:
for s in list:
    If list.index(s) % 2 == 0

看到快吐血
直接用for each loop,每次都給我call 函式找index

還有人寫:
b = [1,2,3]
c = [4,5,6]


c = b[0]

直接把裝list的變數拿來裝int



可以理解python用於資料科學、機器學習的優勢

但初學者就學Python是不是會養成一堆壞習慣啊?

可以從C開始學嗎….

--
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 71.230.161.115 (美國)
※ 文章代碼(AID): #1X-MN3Nh (Gossiping)
※ 文章網址: https://www.ptt.cc/bbs/Gossiping/M.1643734467.A.5EB.html
sealdoom: 滾 你沒學生1F 114.25.122.50 台灣 02/02 00:55
DarkIllusion: 你說的問題好像都不算什麼問題2F 1.175.100.137 台灣 02/02 00:56
Index()call一次就O(n)
在for loop裡面每個項目都call index(),想操死電腦啊?
qazws08: 不是碼農的話,能無痛轉matlab不好嗎3F 111.71.72.28 台灣 02/02 00:56
infoman: 你現在知道有人講 語言聽得懂就好 是啥了4F 118.171.237.238 台灣 02/02 00:56
cisyong: C學了最後也是用PYTHON5F 49.217.4.41 台灣 02/02 00:57
Ahhhhaaaa: 不是ˉ第二個寫這樣有什麼意義啊6F 114.136.144.191 台灣 02/02 00:58
※ 編輯: dixitdeus (71.230.161.115 美國), 02/02/2022 01:00:12
Ahhhhaaaa: 看不懂幹嘛寫c = b[0],意義在哪7F 114.136.144.191 台灣 02/02 00:58
Ahhhhaaaa: 然後第一個反而不明白有什麼問題?
沒效率,你這樣做python會自己loop過一圈幫你找index

easyfish: 現代人還養成吃米不懂種稻的壞習慣勒9F 180.217.148.96 台灣 02/02 01:00
※ 編輯: dixitdeus (71.230.161.115 美國), 02/02/2022 01:01:40
stlevi811101: 沒差吧 能動就好10F 124.155.130.114 台灣 02/02 01:00
w60904max: 84 初學者學java還不是會寫成這樣11F 219.71.180.49 台灣 02/02 01:00
stlevi811101: 記憶體那麼便宜12F 124.155.130.114 台灣 02/02 01:00
DarkIllusion: 第一個問題並不是python造成的13F 1.175.100.137 台灣 02/02 01:01
stlevi811101: 等數據多起來 就知道痛了14F 124.155.130.114 台灣 02/02 01:02
DarkIllusion: 第二個不算是問題15F 1.175.100.137 台灣 02/02 01:02
fungsui: 第一個問題是寫的人太智障 不要怪語言好16F 123.192.16.55 台灣 02/02 01:03
fungsui: 嗎==
venomsoul: Try, except, 嘻嘻18F 42.76.250.219 台灣 02/02 01:03
teddyissad: 阿就給太多方便當隨便,用C系列沒這19F 219.70.36.142 台灣 02/02 01:04
teddyissad: 種問題
tengyoyo: 第一個是被python函數寵壞的21F 114.37.162.11 台灣 02/02 01:05
tengyoyo: 第二個是沒被資料型態搞死過
dces4212: %2會不會被優化成&1呀23F 114.37.1.149 台灣 02/02 01:07
他們還沒教到bit operation
Ahhhhaaaa: c = b[0] 到底有什麼用意我真的看不懂24F 114.136.144.191 台灣 02/02 01:07
Godmyfriend: 給你肩膀你不踩 無聊25F 1.164.92.171 台灣 02/02 01:08
DarkIllusion: 我覺得怪語言慣壞人這實在有點奇怪26F 1.175.100.137 台灣 02/02 01:08
Ahhhhaaaa: 所以前面的c=[4,5,6]就等於沒寫過27F 114.136.144.191 台灣 02/02 01:08
w60904max: 第一題原本是要幹嘛28F 219.71.180.49 台灣 02/02 01:08
chaosly0124: 又不是寫什麼幾千萬的案子,能動就好29F 114.40.227.21 台灣 02/02 01:08
ZMittermeyer: 不知道耶,這個問題我有點不知道正30F 114.136.219.37 台灣 02/02 01:08
ZMittermeyer: 確答案,反正你教的本來就是炮灰碼
ZMittermeyer: 農,不會是什麼高等工程師
doro0202: 這些問題只要跟專題或是進業界沒幾個禮33F 111.82.66.184 台灣 02/02 01:09
bill403777: 管太多,後面真的出事也不用你擦屁股34F 36.227.86.153 台灣 02/02 01:09
doro0202: 拜都會自己不見啊35F 111.82.66.184 台灣 02/02 01:09
joygo: 因為不會壞XD36F 101.12.53.167 台灣 02/02 01:09
ZMittermeyer: 台灣人水準就那樣,乾脆視為提升運37F 114.136.219.37 台灣 02/02 01:09
ZMittermeyer: 算需求的貢獻
※ 編輯: dixitdeus (172.58.205.46 美國), 02/02/2022 01:11:46
w60904max: for i, s in enumerate(list) 要這個?39F 219.71.180.49 台灣 02/02 01:11
yes,或是 for i in range(len(list))
※ 編輯: dixitdeus (172.58.205.46 美國), 02/02/2022 01:13:28
IsadQQ56: 找index用enumerate==40F 223.140.211.196 台灣 02/02 01:13
w60904max: 搞不好要看index去處理值阿==41F 219.71.180.49 台灣 02/02 01:15
w60904max: 不過最後會用list[::2]
IsadQQ56: 不知道enumerate時真的會這樣寫 有夠醜=43F 223.140.211.196 台灣 02/02 01:17
IsadQQ56: =
其實也不需要enumerate
for 的本質就是檢查條件,只要符合條件就執行
※ 編輯: dixitdeus (172.58.205.184 美國), 02/02/2022 01:19:58
NCUking: 哪來的學店呀 不是Python的問題好嗎45F 49.217.201.101 台灣 02/02 01:21
w60904max: 懂你要說什麼了46F 219.71.180.49 台灣 02/02 01:24
w60904max: python loop list太方便 結果忘了基本
w60904max: 其他語言用 int=0 i++的方式去for
silverair: 講真的除非特別要求,不然我寫作業也都49F 114.37.196.131 台灣 02/02 01:26
silverair: 用第一直覺下去幹,畢竟作業要處理的運
sweetsmoke: 我們js才不管這些51F 1.164.209.89 台灣 02/02 01:28
silverair: 算量即使真的複雜度很高,也根本感覺不52F 114.37.196.131 台灣 02/02 01:29
silverair: 出來
silverair: 所以很容易出現超醜的code
baconcsie: 455F 223.141.166.69 台灣 02/02 01:29
s860134: 第二個根本不是 python 的問題...56F 123.192.17.16 台灣 02/02 01:30
silverair: 題目寫要分析才會乖乖寫57F 114.37.196.131 台灣 02/02 01:31
s860134: 變數命名衝突比較接近 clean code 概念58F 123.192.17.16 台灣 02/02 01:31
s860134: 你的第一個例子是不是 s 和 x 同一個值?
我寫錯了,是一樣的
kurecarlos: 就一個自以為的廢物60F 118.160.251.183 台灣 02/02 01:35
※ 編輯: dixitdeus (172.58.207.249 美國), 02/02/2022 01:37:29
ldeathkiller: python就只是方便而已 教出了一堆ㄌ61F 223.139.173.73 台灣 02/02 01:43
ldeathkiller: ㄐ
LincolnBoy: 叫他們乖乖寫java or C++63F 168.5.165.222 美國 02/02 01:44
ldeathkiller: 不過第一題是他不熟python吧 好歹ca64F 223.139.173.73 台灣 02/02 01:44
ldeathkiller: ll個Len去跑或enumerate
s860134: 第一個寫法是有問題的,沒考慮值有重複時66F 123.192.17.16 台灣 02/02 01:47
s860134: 總會返回第一個
s860134: 值沒重複或是物件當我沒說
arrenwu: 這跟Python有啥關係嗎?69F 98.45.135.233 美國 02/02 01:50
Chiustin: 第二個從Python角度只是c再開一個新記70F 114.136.144.78 台灣 02/02 01:54
Chiustin: 憶體空間 資料型態從list變b[0]
brabra: 直接寫在程式碼裡面,電腦會死當XDD72F 203.217.118.75 台灣 02/02 02:00
brabra: 能用二進位就用二進位,能少一個迴圈就少
brabra: 一個,呼叫陣列儘量用同一個區域
arrenwu: 第一個.... 這感覺比較像語法不熟,不然75F 98.45.135.233 美國 02/02 02:02
brabra: 如果只是想跑得動,就算了XDD76F 203.217.118.75 台灣 02/02 02:02
arrenwu: 其實他的做法滿迂迴的77F 98.45.135.233 美國 02/02 02:02
rock4308: 我覺得javascript 也差不多78F 111.71.39.6 台灣 02/02 02:02
s860134: 學都有開設程式語言介紹基本概念 其實學79F 123.192.17.16 台灣 02/02 02:07
s860134: 大學
s860134: 哪種都大同小異 現代語言嘛都是你抄我 我
s860134: 抄你
chunfo: 真要處理大數據就不是能動就好83F 1.160.168.59 台灣 02/02 02:14
s860134: 正確性 > 可讀性 > 效能 一般是這樣...84F 123.192.17.16 台灣 02/02 02:19
WWIII: 你落伍了 c已經已經跟智障手機一樣85F 49.217.68.163 台灣 02/02 02:23
dsa888888: 初學學什麼都一樣 高端自己會想辦法 正86F 223.137.21.0 台灣 02/02 02:23
dsa888888: 常人應付完就沒了
gn0111: 有問題不是python88F 114.45.186.2 台灣 02/02 02:28
WiserWilly: 線上課程不正規真的很多偷吃步89F 123.193.195.89 台灣 02/02 02:31
newwu: 以電腦的角度來看  第二個沒問題啊90F 70.230.116.165 美國 02/02 02:36
newwu: 第一個比較像是沒有演算法的概念
newwu: 這是主要的問題,只會呼叫函數,卻無法想像
newwu: 背後是怎麼運作的
DeepBlue10: 看什麼課的作吧 資結可以 演算法不行94F 118.168.55.48 台灣 02/02 02:56
KimWexler: 第一個看不出問題的請回去念演算法95F 172.92.178.210 美國 02/02 03:02
iceyang: 有時候重複使用變數名稱 只是想降低接手96F 118.170.217.64 台灣 02/02 03:02
iceyang: 人員的可讀性而已 xD
ruokcnn: 我看不懂你舉的例子他想要幹嘛….98F 111.83.157.143 台灣 02/02 03:05
newwu: 還在用a b c當變數名稱的程式,重複使用變99F 70.230.116.165 美國 02/02 03:05
newwu: 數名稱有差嗎
iceyang: 還好我都用xyz101F 118.170.217.64 台灣 02/02 03:09
ccjjea: 教他們js先102F 101.9.201.93 台灣 02/02 03:12
KJC1004: 明顯就是這個案太廢 還沒看過爛成這樣的103F 180.217.133.92 台灣 02/02 03:14
nayeonmywife: 第一段不知道在幹嘛= = 重複兩遍104F 223.26.109.234 台灣 02/02 03:20
Sixigma: 這是寫的人沒學好吧,連語言特性都不了105F 114.37.187.179 台灣 02/02 03:24
Sixigma: 解,學什麼都一樣
Lowpapa: 大葉大學的吧107F 61.228.78.205 台灣 02/02 03:25
xx5244: 先求有功能阿,不然咧,效率本來就後面再108F 1.200.77.99 台灣 02/02 03:31
xx5244: 補
stitchris: Python就是給文組自以為很屌的玩具110F 174.61.172.239 美國 02/02 03:33
emptie: 那些換個語言還是沒解決啊111F 1.200.189.187 台灣 02/02 05:11
t81511270: 回頭看還蠻有趣的  還call index112F 111.246.80.90 台灣 02/02 05:24
leilo: 不是啊你以為他們真的懂原理喔 會出現一堆113F 101.12.25.104 台灣 02/02 05:28
leilo: 奇奇怪怪寫法 不就是1.他不懂什麼叫正經解
leilo: 法 2.東抄西抄勉強拼湊出能動的東西
leilo: 這跟用那種語言沒關係 只是因為python這樣
leilo: 就能動而已 反正敷衍過拿得到學分就好
leilo: 這才是真理啊 不管是不是程設都是一樣的
k798976869: js才醜119F 123.110.17.106 台灣 02/02 06:15
Kaids: 關於第一條即便是直接學python都是非常差勁120F 167.96.138.71 美國 02/02 06:41
Kaids: 的style啊。enumerate就是拿來解決這個問題
Kaids: 的啊…
Kaids: 再來我覺得不需要太C/C++本位主義。如果
Kaids: 機器學習用C/C++比較方便的話Google幹嘛寫
Kaids: python interface?
Kaids: python很多就拿來寫小script,又不是幾十萬
Kaids: 行的專案必須借助strictly typed language
Kaids: 幫你避免錯誤。
botonchou: 這跟 Python 沒有關係吧 是人的問題129F 114.37.185.147 台灣 02/02 07:03
botonchou: 覺得 Python 是給文組的要不要講一下自
botonchou: 己在哪裡高就?
B9702115: 誰叫python要讓人這樣寫132F 27.51.17.118 台灣 02/02 08:55
eemail: 學生:我們那個老師很不會教....133F 180.217.129.186 台灣 02/02 09:14
backforward: 要好習慣不如先學JAVA或C#134F 223.137.159.177 台灣 02/02 10:07
haw561676: c = b[0] , c是auto 的話不是也沒差?135F 42.73.107.94 台灣 02/02 10:16
Fancose: 說記憶體便宜的是沒寫過程式喔,是影響程136F 118.161.164.240 台灣 02/02 10:23
Fancose: 式運行速度跟記憶體大小沒關係
Fancose: 高階語言所用的物件本來程式速度就慢了,
Fancose: 沒用好速度更慢
mocca000: 昨天大年初一 你為什麼大年初一改作業140F 101.9.138.117 台灣 02/02 10:30
BJkiller: C就垃圾語言 未來沒人用 老頭子才這麼在141F 123.240.243.33 台灣 02/02 10:38
BJkiller: 乎
hotrain13: 怎麼會有人覺得C以後沒人用XD143F 114.39.67.228 台灣 02/02 10:39
kindaichitom: 未來一萬年可能沒人用144F 220.137.243.66 台灣 02/02 10:44
kindaichitom: 100年內,C不可能消失的
hegemon: 說C沒人用的太無知了146F 114.45.191.22 台灣 02/02 10:52
reemir: 你說的問題都不是問題 改習慣就好147F 58.114.134.20 台灣 02/02 11:00
reemir: 說 C 沒用的人要不要先跟 Linus Torvald
reemir: s 辯論一下
hotrain13: 說C以後沒人用真的有夠無知與150F 223.139.176.219 台灣 02/02 11:25
holmes006: 第一個就用range 然後[i%2]可以解決的151F 49.217.142.200 台灣 02/02 11:32
holmes006: 事情
holmes006: 說錯,是[2i]
holmes006: 說c沒用的可能不知道python主流的lib都
holmes006: 是用c寫的
MARSCAT: 用python 寫enumerate好嗎,誰在跟你i156F 223.136.82.103 台灣 02/02 11:57
MARSCAT: =1;I++
ljsnonocat2: 如果是資工系  可能還是要從C開始158F 219.68.89.51 台灣 02/02 12:54
timofEE: 會養成壞習慣是確實159F 123.195.4.105 台灣 02/02 13:34
BBBroflovski: simple is the best160F 61.224.7.147 台灣 02/02 14:25
drinkmuffin: 很多人覺得方便寫就好了,沒去思考161F 223.141.137.134 台灣 02/02 18:24
drinkmuffin: 底層實際會怎麼處理,一部分的問題
drinkmuffin: 是現在電腦都太強了,多幾個垃圾步
drinkmuffin: 驟也是沒感覺
kenny2963: 工具本來就是先求能完成才求優化,等165F 114.45.144.150 台灣 02/02 19:02
kenny2963: 遇到問題自然會去優化
ekgs: 先學py的人 最大的問題是不知道變數有型別167F 61.231.43.45 台灣 02/02 21:46
ekgs: 遇過很多先學py再轉寫其它語言的人搞不懂
ekgs: int float double差在哪

--
※ 看板: Gossiping 文章推薦值: 0 目前人氣: 0 累積人氣: 3114 
分享網址: 複製 已複製
1樓 時間: 2022-02-02 08:02:56 (台灣)
  02-02 08:02 TW
不是都說是初學者了嗎??
r)回覆 e)編輯 d)刪除 M)收藏 ^x)轉錄 同主題: =)首篇 [)上篇 ])下篇