[問題] python 2.7可以但是3.6錯誤(solved)
我是用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
12/17 00:40, 2F
→
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
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
12/17 00:58, 6F
→
12/17 01:17,
6年前
, 7F
12/17 01:17, 7F
→
12/17 01:17,
6年前
, 8F
12/17 01:17, 8F
→
12/17 01:18,
6年前
, 9F
12/17 01:18, 9F
→
12/17 01:22,
6年前
, 10F
12/17 01:22, 10F
→
12/17 01:24,
6年前
, 11F
12/17 01:24, 11F
→
12/17 01:24,
6年前
, 12F
12/17 01:24, 12F
→
12/17 01:25,
6年前
, 13F
12/17 01:25, 13F
→
12/17 01:26,
6年前
, 14F
12/17 01:26, 14F
@d & @k大 確實把import擺到第一行就可以了耶
但是d大說應該py2才會有這種error 可是py2.7卻可以把import放入def內卻可以跑XD
真奇怪的bug
→
12/17 01:28,
6年前
, 15F
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
12/17 01:46, 16F
→
12/17 01:55,
6年前
, 17F
12/17 01:55, 17F
→
12/17 01:55,
6年前
, 18F
12/17 01:55, 18F
→
12/17 02:09,
6年前
, 19F
12/17 02:09, 19F
→
12/17 02:09,
6年前
, 20F
12/17 02:09, 20F
→
12/17 02:09,
6年前
, 21F
12/17 02:09, 21F
→
12/17 02:47,
6年前
, 22F
12/17 02:47, 22F
→
12/17 02:56,
6年前
, 23F
12/17 02:56, 23F
→
12/17 02:56,
6年前
, 24F
12/17 02:56, 24F
→
12/17 02:57,
6年前
, 25F
12/17 02:57, 25F
→
12/17 02:57,
6年前
, 26F
12/17 02:57, 26F
→
12/17 02:58,
6年前
, 27F
12/17 02:58, 27F
→
12/17 02:59,
6年前
, 28F
12/17 02:59, 28F
→
12/17 10:21,
6年前
, 29F
12/17 10:21, 29F
※ 編輯: znmkhxrw (111.255.233.84), 12/17/2017 10:21:57