[問題] python 2.7可以但是3.6錯誤(solved)

看板Python作者 (QQ)時間6年前 (2017/12/17 00:17), 6年前編輯推噓1(1028)
留言29則, 6人參與, 6年前最新討論串1/1
我是用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

12/17 00:34, 6年前 , 1F
什麼叫掛了
12/17 00:34, 1F
在2.7 N("A") 的return值是1 在3.6 N("A") 會是錯誤的 ※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 00:36:41

12/17 00:40, 6年前 , 2F
你N("A")那邊的code是什麼? 我用print(N('A'))測正常啊
12/17 00:40, 2F
https://imgur.com/A4sfwSI
我怎顯示錯誤QQ 然後2.7是對的

12/17 00:47, 6年前 , 3F
錯誤的是多少
12/17 00:47, 3F

12/17 00:49, 6年前 , 4F
錯誤訊息?
12/17 00:49, 4F
麻煩一下把code複製到這網站 選python 3.6 http://www.pythontutor.com/live.html#mode=edit 他一開始會run很久 然後顯示run太久了 之後停下來後只跑三步 最後一步它顯示 TypeError: N() missing 1 required positional argument: 'eng'

12/17 00:51, 6年前 , 5F
我是用3.5測 但照理說3.6應該也會過
12/17 00:51, 5F
朋友安裝的3.6也錯誤 應該不是網站的問題QQ ※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 00:56:23

12/17 00:58, 6年前 , 6F
ubuntu 16.04 python 3.6.3沒問題
12/17 00:58, 6F

12/17 01:17, 6年前 , 7F
剛測過本機自己跑 py3.6 也正常啊
12/17 01:17, 7F

12/17 01:17, 6年前 , 8F
網站的話我是看到顯示記憶體錯誤這類
12/17 01:17, 8F

12/17 01:18, 6年前 , 9F
import string 搬到第一行去測試一下就可以跑了
12/17 01:18, 9F

12/17 01:22, 6年前 , 10F
網站應該是用thread去跑 我記得python import lock是全域
12/17 01:22, 10F

12/17 01:24, 6年前 , 11F
12/17 01:24, 11F

12/17 01:24, 6年前 , 12F
import一個有thread的東西 然後thread裡面又import就會
12/17 01:24, 12F

12/17 01:25, 6年前 , 13F
dead lock不過這是python2的狀況 這邊反而是python3
12/17 01:25, 13F

12/17 01:26, 6年前 , 14F
python3應該修好了才對 變成各module有各的lock
12/17 01:26, 14F
@d & @k大 確實把import擺到第一行就可以了耶 但是d大說應該py2才會有這種error 可是py2.7卻可以把import放入def內卻可以跑XD 真奇怪的bug

12/17 01:28, 6年前 , 15F
我本機是使用 3.6.3 版本,所以原貼是 3.6.X 哪個 ?
12/17 01:28, 15F
我適用那個網站 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

12/17 01:46, 6年前 , 16F
python3 除法有兩種
12/17 01:46, 16F

12/17 01:55, 6年前 , 17F
我發現for x in string.ascii_uppercase: pass會timeout
12/17 01:55, 17F

12/17 01:55, 6年前 , 18F
[x for x in string.ascii_uppercase]就不會 奇怪的問題
12/17 01:55, 18F

12/17 02:09, 6年前 , 19F
py3.6除法我明天研究 謝謝
12/17 02:09, 19F

12/17 02:09, 6年前 , 20F
pass timeout是指?
12/17 02:09, 20F

12/17 02:09, 6年前 , 21F
x for x 初學沒看過耶XD 只有for x
12/17 02:09, 21F

12/17 02:47, 6年前 , 22F
x for x 叫作list comprehension
12/17 02:47, 22F

12/17 02:56, 6年前 , 23F
目前發現有這些問題的module有collections,json,re,string
12/17 02:56, 23F

12/17 02:56, 6年前 , 24F
typing
12/17 02:56, 24F

12/17 02:57, 6年前 , 25F
只要在function裡面import並且用for loop去iterate
12/17 02:57, 25F

12/17 02:57, 6年前 , 26F
module內的東西就會發生同樣的問題
12/17 02:57, 26F

12/17 02:58, 6年前 , 27F
而不是import的時候就出問題
12/17 02:58, 27F

12/17 02:59, 6年前 , 28F
不知道他在實現讓for loop可以一步一步跑的時候做了什麼
12/17 02:59, 28F

12/17 10:21, 6年前 , 29F
謝謝a大跟d大解釋 懂了~
12/17 10:21, 29F
※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 10:21:57
文章代碼(AID): #1QDKSB6T (Python)