看板 Python 關於我們 聯絡資訊
我是用codecademy學python 2.7的 所以在3.6環境中錯誤我也完全不知道原因QQ ------------------------------------------------------------------------- code如下: def index(eng): return ord(eng) - ord("A") + 1 def N(eng): import string num=0 l=len(eng) for x in eng: l-=1 for y in string.ascii_uppercase: if x==y: num+=index(y)*26**l return num 也就是說 N是把字母對應到數字(excel那種A=1,B=2,...Z=26,AA=27...) 也就是說 N("A")=1,N("AA")=27 但是!在python 2.7這是沒問題的 但在3.6就掛了 (我知道python 3.6的print要變成print(),但問題不在這) 抽絲剝繭的結果,應該是def N(eng)這個函數有問題 因為我直接寫出一個special case如下時,在3.6跑是沒問題的: def index(eng): return ord(eng) - ord("A") + 1 import string num=0 l=len("AA") for x in "AA": l-=1 for y in string.ascii_uppercase: if x==y: num+=index(y)*26**l print (num) 也就是說 這是N("AA")的case,卻在3.6是沒問題的 所以我才猜測是函數定義在3.6不太一樣 請指教,謝謝 ------------------------------------------------------------ P.S. 遇到這種版本不同的error請問有有效率的自己解決方式嗎? 只能case by case問人? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 111.255.233.84 ※ 文章網址: https://www.ptt.cc/bbs/Python/M.1513441035.A.19D.html
djshen: 什麼叫掛了12/17 00:34
在2.7 N("A") 的return值是1 在3.6 N("A") 會是錯誤的 ※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 00:36:41
WSzc: 你N("A")那邊的code是什麼? 我用print(N('A'))測正常啊12/17 00:40
https://imgur.com/A4sfwSI 我怎顯示錯誤QQ 然後2.7是對的
djshen: 錯誤的是多少12/17 00:47
KyotoAnime: 錯誤訊息?12/17 00:49
麻煩一下把code複製到這網站 選python 3.6 http://www.pythontutor.com/live.html#mode=edit 他一開始會run很久 然後顯示run太久了 之後停下來後只跑三步 最後一步它顯示 TypeError: N() missing 1 required positional argument: 'eng'
WSzc: 我是用3.5測 但照理說3.6應該也會過12/17 00:51
朋友安裝的3.6也錯誤 應該不是網站的問題QQ ※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 00:56:23
djshen: ubuntu 16.04 python 3.6.3沒問題12/17 00:58
kenduest: 剛測過本機自己跑 py3.6 也正常啊12/17 01:17
kenduest: 網站的話我是看到顯示記憶體錯誤這類12/17 01:17
kenduest: import string 搬到第一行去測試一下就可以跑了12/17 01:18
djshen: 網站應該是用thread去跑 我記得python import lock是全域12/17 01:22
kenduest: https://i.imgur.com/FS81gz9.png 執行結果12/17 01:24
djshen: import一個有thread的東西 然後thread裡面又import就會12/17 01:24
djshen: dead lock不過這是python2的狀況 這邊反而是python312/17 01:25
djshen: python3應該修好了才對 變成各module有各的lock12/17 01:26
@d & @k大 確實把import擺到第一行就可以了耶 但是d大說應該py2才會有這種error 可是py2.7卻可以把import放入def內卻可以跑XD 真奇怪的bug
kenduest: 我本機是使用 3.6.3 版本,所以原貼是 3.6.X 哪個 ? 12/17 01:28
我適用那個網站 http://www.pythontutor.com/live.html#mode=edit 他只寫py 3.6 -------------------------------------------------------------------- 不好意思再請教類似問題 以下這個code是把數字轉成英文: def letter(num): string="ABCDEFGHIJKLMNOPQRSTUVWXYZ" for x,y in enumerate(string,1): if x==num: return y def remainder(num): string="ZABCDEFGHIJKLMNOPQRSTUVWXY" for x,y in enumerate(string): if x==num: return y def L(num): string="" N=num while N>0: string=(string[::-1]+remainder(N%26))[::-1] if N%26==0: N=N/26-1 else: N=N/26 return string print(L(28)) 這個一樣在py2.7成功,py3.6失敗... 那個網站顯示3.6失敗的地方在於 string=(string[::-1]+remainder(N%26))[::-1] 這行 錯誤類別為 TypeError: must be str, not NoneType ------------------------------------------------- 請再幫忙一下 感恩QQ ※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 01:36:18
djshen: python3 除法有兩種12/17 01:46
djshen: 我發現for x in string.ascii_uppercase: pass會timeout12/17 01:55
djshen: [x for x in string.ascii_uppercase]就不會 奇怪的問題12/17 01:55
znmkhxrw: py3.6除法我明天研究 謝謝12/17 02:09
znmkhxrw: pass timeout是指?12/17 02:09
znmkhxrw: x for x 初學沒看過耶XD 只有for x12/17 02:09
abc2090614: x for x 叫作list comprehension12/17 02:47
djshen: 目前發現有這些問題的module有collections,json,re,string12/17 02:56
djshen: typing12/17 02:56
djshen: 只要在function裡面import並且用for loop去iterate12/17 02:57
djshen: module內的東西就會發生同樣的問題12/17 02:57
djshen: 而不是import的時候就出問題12/17 02:58
djshen: 不知道他在實現讓for loop可以一步一步跑的時候做了什麼12/17 02:59
znmkhxrw: 謝謝a大跟d大解釋 懂了~12/17 10:21
※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 10:21:57