【问题标题】:How to make my code more efficient (IMEI validator in python)如何使我的代码更高效(python 中的 IMEI 验证器)
【发布时间】:2020-11-19 02:01:06
【问题描述】:

有人可以评价这段代码的效率吗?

它应该模仿一个电话号码的 IMEI 验证器,就像一个有趣的项目。

如果您不知道应该将每个第二个数字乘以 2,然后将所有数字加在一起,除了最后一个它总是添加的数字之外,例如:

123456789

1 + (4) + 3 + (8) + 5 + (1 + 2) + 7 + (1 + 6) = 38

38 + 9 = 47

然后它会以 10 为模,如果没有余数,则为有效数字,如果有余数,则无效。

我仍然有一些打印语句用于测试,忽略这些语句,我怎样才能使我的代码在更少的行中或使其尽可能高效。

我一直在做一些编程,但很难弄清楚程序的效率。

任何帮助将不胜感激!

n = input("Enter number: ")
og = n.split()
new = []
sum_new = 0

def create_new():
  global n
  global new
  temp_n = 0
  for i in range (len(n)):
    #test_bool =  i+1 % 2 == 0 #i < len(n) - 1 and
    #print(test_bool)
   # print(i+1)
    if i < len(n) - 1 and (i+1) % 2 == 0:
      #print("test")
      temp_n = str(int(n[i]) * 2)
      if len(temp_n) > 1:
        new.append(int(temp_n[0]))
        new.append(int(temp_n[1]))
        #print("doubled double! " + str(new[i]) + " " + str(new[i+1]))
      else:
        new.append(int(temp_n))
        #print("doubled! " + str(new[i]))
    else:
      new.append(int(n[i]))
     # print("not doubled " + str(new[i]))

create_new()
      
def find_sum():
  global sum_new
  for i in range (len(new)-1):
    sum_new += new[i]
    
  sum_new += new[len(new)-1]  

find_sum()

#print(new)
#print (sum_new)

if sum_new % 10 == 0:
  print("Valid.")
else:
  print("Invalid.")

【问题讨论】:

    标签: python coding-style memory-efficient imei


    【解决方案1】:

    为什么不使用阶梯式for 来迭代n?有了这个,您不需要检查元素是否具有偶数索引,阶梯式for 会跳过迭代中的许多元素(如指定的那样)。就这样

    for i in range (0, len(n)-1, 2):

    这将只选择具有偶数索引的元素

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-06-20
      • 1970-01-01
      • 1970-01-01
      • 2022-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多