《python语言程序设计》2018版第8章第14题金融:信用卡号合法性 利用6.29题

发布于:2024-09-18 ⋅ 阅读:(64) ⋅ 点赞:(0)

请添加图片描述

一、之前6.29题我做的代码

这是用数字来进行分辨的

is_txt = 4383576018402626 #合法

def split_the_data_even(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 split_the_data_odd(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_num_odd(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 odd_add(visa_txt):
    a_text = split_the_data_odd(visa_txt)
    temp_text = 0
    for i in a_text:
        temp_text += mult_num_odd(i, 2)
    return temp_text


def even_add(visa_txt):
    even_text = split_the_data_even(visa_txt)
    temp_text = 0
    for i in even_text:
        temp_text += i
    return temp_text


def is_valid(visa_text):
    a = odd_add(visa_text) + even_add(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)


is_valid(vis_txt)

请添加图片描述
顺便说一句驼峰在win系统里还好使,到mac的python就一顿贬低的报错.

二、本题是用字符串来做,原谅我,我有暗自骂了作者

也就是说我将数字变成字符串.那么我就不能用整除、除于,只能用字符串和循环来完成

2024.09.06
我现在不明白这个大哥到底什么意思??
字符串不能加减乘除呀。字符串更不能进行什么换算。
我到底要验证什么呢
通过字符串验证什么呢

2024.9.9
应急局不知道哪天来抽查, 我还有19日到20日的全天培训,
真的和我此时的代码一样.
停了这么久,今天突然想开了.
将整数转成字符串,然后再识别会数字.但是用循环就比较 失败了.

def if_digit(num):
    if num == "0":
        return 0
    elif num == "1":
        return 1
    elif num == "2":
        return 2
    elif num == "3":
        return 3
    elif num == "4":
        return 4
    elif num == "5":
        return 5
    elif num == "6":
        return 6
    elif num == "7":
        return 7
    elif num == "8":
        return 8
    elif num == "8":
        return 8
    elif num == "9":
        return 9

def run_text(num_t,text_about):
    for i in range(0, num_t):
      return if_digit(text_about[i])

a = run_text(len_num,str_vis_text)
print(a)

这段代码只显示4.
我就不截图了
如果你只输出可以得到数列但是往往不能计算了

for i in range(0, num_t):
      return if_digit(text_about[i])

如果不用光用 循环可以显示整个数列,但是还不能当成一个完整的整数列,来用.
终于我忍不住换了使用python的保留名字之一的
isalnum()这哥们有点敌我不分
isdigit()还是它比较好


if str_vis_text.isdigit() is False:
    print("This str word is worry!")
else:
    text_to_integer = int(str_vis_text)
    is_valid(text_to_integer)

成功了.if代表 如果字符串里有字母.则返回真
else:代表如返回否,则开始将字符串变沉整数序列,然后放到直接做好的函数is_valid

请添加图片描述

请添加图片描述

请添加图片描述
请添加图片描述

两个结果,两种效果.明天顺利