Python 官网:https://www.python.org/
自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
—— 华罗庚
昨天完成了CSDN“每日一练”三个题目,按照自己的理解,用自己的“算法”撸了一次。
在撸的过程中,会巩固小知识点。“正整数区间偶数之和”,看似简单的题目,算法一眼到底,几无难度。但在行码过程中,几次修正“算法”,才得“正果”。
“回文链表”判定
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")
本练习完整源码
#!/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")
来源:老齐教室
全栈领域优质创作者——寒佬(还是国内某高校学生)好文:《非技术文—关于英语和如何正确的提问》,“英语”和“会提问”是学习的两大利器。
【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
靠谱程序员的好习惯