这段代码,是我错了吗?好郁闷。
第一个方法是我写的,结果,管事的说我写得不好,太C++了,不够python(他没真正学过C++,只懂基本的C++概念而已),要我按第二个写,后来他又觉得不好,自己写了第三个。而且背着我替换了我写的代码。
相信大家看得出,为了以示和我的不同,我用一个值减去 'a '(ASIIC码值97),而他偏要减去大写的 'A '(65)。其实我刚才测试了一下,第三个是效率最低的,只有第一个的一半。
以前有人说搞技术的总是互相轻视,认为人不如我。自认为很少有这种想法,一直很谦虚,可为什么总有人这样呢?还做得那么过份。
import time,os,string,sys
import re
def is_valid_id_card_num (self, number):
number.strip()
if len(number) <> 8 or not number[0:1].isalpha() or not number[1:].isdigit():
return False
prefix = number[0:1].lower()
num = int(number[1:])
sum = 0
for i in range(1, 8):
sum += (num % 10) * i
num = num / 10
return 0 == (sum + 8 *(ord(prefix) - 97 + 1)) % 11
def is_valid_id_card_num1 (self, number):
number.strip()
if len(number) <> 8 or not number[0:1].isalpha() or not number[1:].isdigit():
return False
list = [ord(number[0:1].lower()) - 97 + 1] + [int(i) for i in number[1:].strip()]
sum = 0
for i in range(8, 0, -1):
sum += i * list[-i]
return 0 == sum % 11
def clean_id_card_number(self, id):
#id = self.data[ 'id_card_number ']
regex = re.compile( '^[a-zA-Z][0-9]{7}$ ')
if regex.match(id) is None:
#raise forms.ValidationError( _( 'ID card number must be one letter with 7 digit numbers ') )
return False
c = ord(id[0].upper()) - 65 + 1
l = [c]+ [int(i) for i in id[1:]]
s = 0
for i in range(8):
s += (i+1) * l[-(i+1)]
if s % 11 != 0 :
#raise forms.ValidationError( _( 'Invaild ID card number ') )
return False
#return self.data[ 'id_card_number ']
return True
[解决办法]
呵呵,心态平和很重要
[解决办法]
哎,都这样啊,忍
[解决办法]
管事可能背着你改写方式上有些不对,代码我看了一下,第三段是比较长.
不过细看可读性可能第三段是好些:
1.异常处理处有明确字符串
2.ord(number[0:1].lower()) - 97 + 1 改为 ord(id[0].upper()) - 65 + 1 不像是为了表示与你不同, 而是业界的习惯吧. 因为65比97小, 所以从数学上减大写的更清楚些(.upper使数字变小, 再-65得到差距, 而.lower使数字变大,再得-97的差距感觉可能没那么顺), 只是一种个人习惯, 不要那么较真啦.
我是学C++的,python的语法都不知道.不过看了他的代码我知道是在处理一串card_num的字符串,估计是清楚(没细看).你的代码我只能看出在整List,可能这是因为你写的过于底层化,过于重效率(忽视代码的可读性和可重用性吧). 所以他说 "太C++了,不够python ", 呵呵.