作者znmkhxrw (QQ)
看板Python
标题[问题] python 2.7可以但是3.6错误
时间Sun Dec 17 00:17:13 2017
我是用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://webptt.com/cn.aspx?n=bbs/Python/M.1513441035.A.19D.html
1F:→ 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
2F:→ WSzc: 你N("A")那边的code是什麽? 我用print(N('A'))测正常啊12/17 00:40
https://imgur.com/A4sfwSI
我怎显示错误QQ 然後2.7是对的
3F:→ djshen: 错误的是多少12/17 00:47
4F:推 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'
5F:→ WSzc: 我是用3.5测 但照理说3.6应该也会过12/17 00:51
朋友安装的3.6也错误 应该不是网站的问题QQ
※ 编辑: znmkhxrw (111.255.233.84), 12/17/2017 00:56:23
6F:→ djshen: ubuntu 16.04 python 3.6.3没问题12/17 00:58
7F:→ kenduest: 刚测过本机自己跑 py3.6 也正常啊12/17 01:17
8F:→ kenduest: 网站的话我是看到显示记忆体错误这类12/17 01:17
9F:→ kenduest: import string 搬到第一行去测试一下就可以跑了12/17 01:18
10F:→ djshen: 网站应该是用thread去跑 我记得python import lock是全域12/17 01:22
12F:→ djshen: import一个有thread的东西 然後thread里面又import就会12/17 01:24
13F:→ djshen: dead lock不过这是python2的状况 这边反而是python312/17 01:25
14F:→ djshen: python3应该修好了才对 变成各module有各的lock12/17 01:26
@d & @k大 确实把import摆到第一行就可以了耶
但是d大说应该py2才会有这种error 可是py2.7却可以把import放入def内却可以跑XD
真奇怪的bug
15F:→ 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
16F:→ djshen: python3 除法有两种12/17 01:46
17F:→ djshen: 我发现for x in string.ascii_uppercase: pass会timeout12/17 01:55
18F:→ djshen: [x for x in string.ascii_uppercase]就不会 奇怪的问题12/17 01:55
19F:→ znmkhxrw: py3.6除法我明天研究 谢谢12/17 02:09
20F:→ znmkhxrw: pass timeout是指?12/17 02:09
21F:→ znmkhxrw: x for x 初学没看过耶XD 只有for x12/17 02:09
22F:→ abc2090614: x for x 叫作list comprehension12/17 02:47
23F:→ djshen: 目前发现有这些问题的module有collections,json,re,string12/17 02:56
24F:→ djshen: typing12/17 02:56
25F:→ djshen: 只要在function里面import并且用for loop去iterate12/17 02:57
26F:→ djshen: module内的东西就会发生同样的问题12/17 02:57
27F:→ djshen: 而不是import的时候就出问题12/17 02:58
28F:→ djshen: 不知道他在实现让for loop可以一步一步跑的时候做了什麽12/17 02:59
29F:→ znmkhxrw: 谢谢a大跟d大解释 懂了~12/17 10:21
※ 编辑: znmkhxrw (111.255.233.84), 12/17/2017 10:21:57