1111
我没有按这个题里所要求的顺序和名称,
不是说题里写的不对,我觉得应该是按自己的想法来进行
题里说的是每个奇数进行相互乘然后结果相加便成了37
然后所有的偶数直接相加38
可是《python语言程序设计》在第7章和第8章以后才开始涉及到我们的列表和元祖。
为此我很苦恼
1 .进行原始的整除和除于 但是16位数。我不能进行1000000000000000这么长度运算
2.如何把vis_txt做成序列 但是都不成功
3.我做了一种尝试,就是利用第五章循环的for in visa卡
python
# 我想利用这个方式遍历visa_text变量
visa_text = "4388576018402626"
for i in visa_text:
print(i,i*2)
但是for循环不能进行整数间的这样的遍历,因此没有变成字符串是无法实现我的想法的。
最后只能将visa_text变成字符串
结果如下
那么我换成int呢,我增加了一个代码
python
# 我想利用这个方式遍历visa_text变量
visa_text = "4388576018402626"
for i in visa_text:
print(i,int(i)*2)
想解决跳着进行识别。奇数偶数
我找到了之前做过的代码
python
调用了第一次做完的代码,
def n_odd(number):
a = number // 1000
a_m = a * 2
c = number % 1000 // 10 % 10
c_m = c * 2
if a_m >= 10 and c_m <= 9:
odd_a_1 = a_m // 10
odd_a_2 = a_m % 10
odd_a_sum = odd_a_1 + odd_a_2
return odd_a_sum + c_m
elif c_m >= 10 and a_m <= 9:
odd_c_1 = c_m // 10
odd_c_2 = c_m % 10
odd_c_sum = odd_c_1 + odd_c_2
return odd_c_sum + a_m
elif a_m >= 10 and c_m >= 10:
odd_a_1 = a_m // 10
odd_a_2 = a_m % 10
odd_a_sum = odd_a_1 + odd_a_2
odd_c_1 = c_m // 10
odd_c_2 = c_m % 10
odd_c_sum = odd_c_1 + odd_c_2
return odd_c_sum + odd_a_sum
elif a_m <= 9 and c_m <= 9:
return a_m + c_m
def n_even(number):
b = number % 1000 // 100
d = number % 10
return b + d
def isValid(n1, n2, n3, n4, a, b):
c = a + b
d = c % 10
if d == 0:
print(f"This {str(n1)} {str(n2)} {str(n3)} {str(n4)} credit card is valid")
print(d)
print(c)
else:
print(f"This {str(n1)} {str(n2)} {str(n3)} {str(n4)} credit card is invalid")
print(d)
print(c)
def main():
# number1 = eval(input("Input credit card number: "))
# number2 = eval(input("Input credit card number: "))
# number3 = eval(input("Input credit card number: "))
# number4 = eval(input("Input credit card number: "))
number1 = 4388
number2 = 5760
number3 = 1840
number4 = 2626 # 2001是valid
a = n_odd(number1) + n_odd(number2) + n_odd(number3) + n_odd(number4)
b = n_even(number1) + n_even(number2) + n_even(number3) + n_even(number4)
isValid(number1, number2, number3, number4, a, b)
main()
在这里我们看到了,我是将16位进行了分割。
我觉得还是应该进行4位数4位数的分别
我做出了新的改变
python
current_a1 = vis_n // 10000
我得到了438857601840
接下来我又根据整出1000和除于1000来进行分割。
根本不合法,后来我发现少一位。而我设计的是16位的,
438857601840707
算了!
大家就按16位来用吧。16位是可以的
vis_txt = 4388576018402626 #不合法
vis_txt = 4383576018402626 #合法
这个代码大家可以看一下。输入的时候可以将16位分成4段4位来进行的。这是我当时能想到的最好办法。我希望能超越这个。通过上一个公式,似乎给了我一些新的灵感。既然我们没法进行大规模的整除,那我先用10000 将这个16位的数字拆分成4段。类似我们之前求小时、分、秒的方法
python
# vis_txt = 4388576018402626
# vis_txt = 4383576018402626
# vis_txt = 438857601840707
# 为测试数字的顺序刻意用的
# vis_txt = 4388576018402876
# 简单分割数据的函数,利用10000整除和除于来将16位代码分割
# 但是该函数还要改成可以分开奇、偶数
# 偶数
def splitTheDataEven(vis_n):
current_a1 = vis_n // 10000
a_t1 = vis_n % 10000
# print("1th", a_t1)
a_t2 = current_a1 % 10000
# print("2th", a_t2)
current_a3 = current_a1 // 10000
a_t3 = current_a3 % 10000
# print("3th", a_t3)
a_t4 = current_a3 // 10000
# print("4th", a_t4)
even1 = a_t1 % 10
even2 = a_t1 // 100 % 10
even3 = a_t2 % 10
even4 = a_t2 // 100 % 10
even5 = a_t3 % 10
even6 = a_t3 // 100 % 10
even7 = a_t4 % 10
even8 = a_t4 // 100 % 10
return even1, even2, even3, even4, even5, even6, even7, even8
# 奇数
def splitTheDataOdd(vis_n):
current_a1 = vis_n // 10000
a_t1 = vis_n % 10000
# print("1th", a_t1)
a_t2 = current_a1 % 10000
# print("2th", a_t2)
current_a3 = current_a1 // 10000
a_t3 = current_a3 % 10000
# print("3th", a_t3)
a_t4 = current_a3 // 10000
# print("4th", a_t4)
odd1 = a_t1 // 10 % 10
odd2 = a_t1 // 100 // 10
#
odd3 = a_t2 // 10 % 10
odd4 = a_t2 // 100 // 10
#
odd5 = a_t3 // 10 % 10
odd6 = a_t3 // 100 // 10
#
odd7 = a_t4 // 10 % 10
odd8 = a_t4 // 100 // 10
return odd1, odd2, odd3, odd4, odd5, odd6, odd7, odd8
def mult_numOdd(int_num, m_num):
a = int_num * m_num
if a >= 10:
div_a1 = a // 10
div_a2 = a % 10
return div_a1 + div_a2
elif a == 0:
return a
else:
return a
def oddAdd(visa_txt):
a_text = splitTheDataOdd(visa_txt)
temp_text = 0
for i in a_text:
temp_text += mult_numOdd(i, 2)
return temp_text
def evenAdd(visa_txt):
even_text = splitTheDataEven(visa_txt)
temp_text = 0
for i in even_text:
temp_text += i
return temp_text
# print(oddAdd(vis_txt))
# print(evenAdd(vis_txt))
def isValid(visa_text):
a = oddAdd(visa_text) + evenAdd(visa_text)
if a % 10 == 0:
print(f"This visa code {visa_text} is valid!")
else:
print(f"This visa code {visa_text} is not valid!")
print("Sorry! again input, or call worker!")
print(a)
isValid(vis_txt)