练习:“回文链表”判定、正整数区间偶数之和、判定“交错字符串”——2022-07-10python“每日一练”题目


Python 官网:https://www.python.org/


  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……

  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室

  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


等风来,不如追风去……



练习:
试炼自然常数e
for、列表解析






练习
“回文链表”判定、正整数区间偶数之和、判定“交错字符串”
——2022-07-10python“每日一练”题目


目 录
  • 1、“回文链表”判定
  • 2、正整数区间偶数之和
  • 3、判定“交错字符串”
  • 4、本练习完整源码

  昨天完成了CSDN“每日一练”三个题目,按照自己的理解,用自己的“算法”撸了一次。
  在撸的过程中,会巩固小知识点。“正整数区间偶数之和”,看似简单的题目,算法一眼到底,几无难度。但在行码过程中,几次修正“算法”,才得“正果”



练习:“回文链表”判定、正整数区间偶数之和、判定“交错字符串”——2022-07-10python“每日一练”题目_第1张图片

“回文链表”判定

class IsList:
    ''' 判定回文链表 '''


    def islist(self, list_num):
        n = len(tem := list_num) # 输入链表长度赋值n,输入链表别名。

        if n%2 != 0:
            return False # “回文”链表元素总数皆为偶数。

        if n == 2: # 输入是两个元素的链表。
            if tem[0] == tem[-1]:
                return True
            else:
                return False

        flag = int(n/2) 
        a, b = tem[:flag], tem[flag:] # 均分链表为两个链表——链表、回文链表。

        for i in range(flag): # 遍历判定是否“回文”。

            if a[-(i+1)] != b[i]: # 链表元素不满足“回文”,返回False。
                return False

        return True # 链表元素符合“回文”,返回True。


if __name__ == '__main__':
    test = IsList()
    nums = [[1, 2, 2, 1],
            [1, 2],
            [1, 2, 4, 5],
            [4, 5, 6, 7, 7, 6, 5, 4]]

    for i in nums: # 遍历试炼链表,判定“回文”链表。
        print(f"\n\n输入链表:{i}\
\n{'-'*50}\n\n{'':>8}是“回文”链表?-> {test.islist(i)}\
\n\n{'~'*50}")

练习:“回文链表”判定、正整数区间偶数之和、判定“交错字符串”——2022-07-10python“每日一练”题目_第2张图片



练习:“回文链表”判定、正整数区间偶数之和、判定“交错字符串”——2022-07-10python“每日一练”题目_第3张图片

正整数区间偶数之和

s = '输入起始和结束的正整数,求两个正整数之间的偶数和。'


class SumEvenNumber:
    ''' 计算两个正整数之间的偶数之和 '''

    def __init__(self):
        print(f"\n\n{s}\n{'~'*50}")

    def sum_ab(self):
        a, b = self.get_nums()
        return sum([i for i in range(a+1, b) if i%2 == 0]) # 解析设定区间偶数列表并返回偶数列表元素之和。


    def get_nums(self):

        while True: # 输入正整数区间。
            input_s = input(f"\n输入正整数a、b(a{'':>10}(如“47 65”):").strip()
            nums = input_s.split(' ')

            n = len(nums)
            if 2 < n or n < 2: # 输入字符串格式错误,报错提示。
                self.show_tip(input_s)
                continue

            a, b = nums

            try: # 输入int错误,报错提示。
                a, b = int(a), int(b) # map(int, nums)
            except Exception as error:
                print(f"错误类型:{error}")
                self.show_tip(input_s)
                continue

            if a >= b:
                self.show_tip(input_s)
                continue

            break # 输入正确,退出输入循环。

        print(f"\n\n{'':>4}{a}{b}之间的偶数之和:", end='')
        return a, b

    def show_tip(self, string):
        s = f"“{string}”"
        print(f"\n\n{s:^50}\n{' 输入错误!':~^45}")


if __name__ == '__main__':
    sumnums = SumEvenNumber()
    print(sumnums.sum_ab(), '\n'*2)

练习:“回文链表”判定、正整数区间偶数之和、判定“交错字符串”——2022-07-10python“每日一练”题目_第4张图片



练习:“回文链表”判定、正整数区间偶数之和、判定“交错字符串”——2022-07-10python“每日一练”题目_第5张图片

判定“交错字符串”

class IsInterleavingStrings:
    ''' 判定“交错字符串” '''


    def __init__(self):
        print(f"\n\n{'判定“交错字符串”':~^43}")
    

    def isstring(self, *string):
        a, b, c = string

        if abs(len(a)-len(b)) > 1:
            print(f"\n\n{a:^50}\n{b:^50}\n{' 输入字符串长度错误!':~^40}")

        if a == b == c == '':
            return True

        if len(c) != len(a)+len(b):
            return False
        
        if self.join_string(a, b, c):
            return True

        if self.join_string(b, a, c):
            return True

        return False


    def join_string(self, a, b, c):
        ''' 拼接比对字符串 '''
        tem = ''.join([''.join(i) for i in zip(a, b)])

        if len(b) > len(a): # 追加字符串长的最后一个字符。
            tem += b[-1]

        if len(a) > len(b): # 追加字符串长的最后一个字符。
            tem += a[-1]

        #input(f"{a}\n{b}\n{tem}\n{c}") # 调试显形语句。
        if tem == c:
            return True



if __name__ == '__main__':
    strings = [
                ['aabcc', 'dbbca', 'adabbbccca'], 
                ['aabcc', 'dbbca', 'aadbbbaccc'],
                ['asdfg', 'cvbg', 'cavsbdgfg']]
    test = IsInterleavingStrings() # 类实例。

    for i in strings:
        a, b, c = i
        print(f"\n字符串“{c}”是字符串“{a}”、“{b}”的交错字符串?{test.isstring(a, b, c)}")

    print(f"\n字符串“{''}”是字符串“{''}”、“{''}”的交错字符串?{test.isstring('', '', '')}\n\n")

练习:“回文链表”判定、正整数区间偶数之和、判定“交错字符串”——2022-07-10python“每日一练”题目_第6张图片



本练习完整源码

#!/sur/bin/nve python
# coding: utf-8

'''

title = 'python每日一练'

filename = 'practice220710.py'

author = '梦幻精灵_cq'

time = '2022-07-10'

'''


# 一、回文链表

class IsList:
    ''' 判定回文链表 '''


    def islist(self, list_num):
        n = len(tem := list_num) # 输入链表长度赋值n,输入链表别名。

        if n%2 != 0:
            return False # “回文”链表元素总数皆为偶数。

        if n == 2: # 输入是两个元素的链表。
            if tem[0] == tem[-1]:
                return True
            else:
                return False

        flag = int(n/2) 
        a, b = tem[:flag], tem[flag:] # 均分链表为两个链表——链表、回文链表。

        for i in range(flag): # 遍历判定是否“回文”。

            if a[-(i+1)] != b[i]: # 链表元素不满足“回文”,返回False。
                return False

        return True # 链表元素符合“回文”,返回True。


if __name__ == '__main__':
    test = IsList()
    nums = [[1, 2, 2, 1],
            [1, 2],
            [1, 2, 4, 5],
            [4, 5, 6, 7, 7, 6, 5, 4]]

    for i in nums: # 遍历试炼链表,判定“回文”链表。
        print(f"\n\n输入链表:{i}\
\n{'-'*50}\n\n{'':>8}是“回文”链表?-> {test.islist(i)}\
\n\n{'~'*50}")


# 二、正整数区间偶数之和

s = '输入起始和结束的正整数,求两个正整数之间的偶数和。'


class SumEvenNumber:
    ''' 计算两个正整数之间的偶数之和 '''

    def __init__(self):
        print(f"\n\n{s}\n{'~'*50}")

    def sum_ab(self):
        a, b = self.get_nums()
        return sum([i for i in range(a+1, b) if i%2 == 0]) # 解析设定区间偶数列表并返回偶数列表元素之和。


    def get_nums(self):

        while True: # 输入正整数区间。
            input_s = input(f"\n输入正整数a、b(a{'':>10}(如“47 65”):").strip()
            nums = input_s.split(' ')

            n = len(nums)
            if 2 < n or n < 2: # 输入字符串格式错误,报错提示。
                self.show_tip(input_s)
                continue

            a, b = nums

            try: # 输入int错误,报错提示。
                a, b = int(a), int(b) # map(int, nums)
            except Exception as error:
                print(f"错误类型:{error}")
                self.show_tip(input_s)
                continue

            if a >= b:
                self.show_tip(input_s)
                continue

            break # 输入正确,退出输入循环。

        print(f"\n\n{'':>4}{a}{b}之间的偶数之和:", end='')
        return a, b

    def show_tip(self, string):
        s = f"“{string}”"
        print(f"\n\n{s:^50}\n{' 输入错误!':~^45}")


if __name__ == '__main__':
    sumnums = SumEvenNumber()
    print(sumnums.sum_ab(), '\n'*2)
    


# 三、判定“交错字符串”

class IsInterleavingStrings:
    ''' 判定“交错字符串” '''


    def __init__(self):
        print(f"\n\n{'判定“交错字符串”':~^43}")
    

    def isstring(self, *string):
        a, b, c = string

        if abs(len(a)-len(b)) > 1:
            print(f"\n\n{a:^50}\n{b:^50}\n{' 输入字符串长度错误!':~^40}")

        if a == b == c == '':
            return True

        if len(c) != len(a)+len(b):
            return False
        
        if self.join_string(a, b, c):
            return True

        if self.join_string(b, a, c):
            return True

        return False


    def join_string(self, a, b, c):
        ''' 拼接比对字符串 '''
        tem = ''.join([''.join(i) for i in zip(a, b)])

        if len(b) > len(a): # 追加字符串长的最后一个字符。
            tem += b[-1]

        if len(a) > len(b): # 追加字符串长的最后一个字符。
            tem += a[-1]

        #input(f"{a}\n{b}\n{tem}\n{c}") # 调试显形语句。
        if tem == c:
            return True



if __name__ == '__main__':
    strings = [
                ['aabcc', 'dbbca', 'adabbbccca'], 
                ['aabcc', 'dbbca', 'aadbbbaccc'],
                ['asdfg', 'cvbg', 'cavsbdgfg']]
    test = IsInterleavingStrings() # 类实例。

    for i in strings:
        a, b, c = i
        print(f"\n字符串“{c}”是字符串“{a}”、“{b}”的交错字符串?{test.isstring(a, b, c)}")

    print(f"\n字符串“{''}”是字符串“{''}”、“{''}”的交错字符串?{test.isstring('', '', '')}\n\n")

在这里插入图片描述


回首页

__上一篇:__ 练习:试炼自然常数e

__下一篇:__ 

我的HOT博:
  • 练习:银行复利计算(用 for 循环解一道初中小题)(1066阅读)
  • pandas 数据类型之 DataFrame(1395阅读)
  • 班里有人和我同生日难吗?(概率probability、蒙特卡洛随机模拟法)(2104阅读)
  • Python字符串居中显示(1538阅读)
  • 练习:求偶数和、阈值分割和求差( list 对象的两个基础小题)(1648阅读)
  • 用 pandas 解一道小题(1975阅读)
  • 可迭代对象和四个函数(1069阅读)
  • “快乐数”判断(1231阅读)
  • 罗马数字转换器(构造元素取模)(1940阅读)
  • Hot:罗马数字(转换器|罗生成器)(3760阅读)
  • Hot:让QQ群昵称色变的代码(28205阅读)
  • Hot:斐波那契数列(递归| for )(4048阅读)
  • 柱状图中最大矩形(1654阅读)
  • 排序数组元素的重复起止(1241阅读)
  • 电话拨号键盘字母组合(1351阅读)
  • 密码强度检测器(1810阅读)
  • 求列表平衡点(1818阅读)
  • Hot: 字符串统计(4287阅读)
  • Hot:尼姆游戏(聪明版首发)(3427阅读)尼姆游戏(优化版)(1022阅读)
推荐条件 点阅破千

回目录


老齐漫画头像

精品文章:

  • 好文力荐:《python 完全自学教程》齐伟书稿免费连载
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


回目录

Python 入门指南【Python 3.6.3】

好文力荐:
  • 全栈领域优质创作者——寒佬(还是国内某高校学生)好文:《非技术文—关于英语和如何正确的提问》,“英语”和“会提问”是学习的两大利器。

  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛

  • 靠谱程序员的好习惯


CSDN实用技巧博文:

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

你可能感兴趣的:(练习,python)