大家好,别看我这个账号的码龄有两年,事实上我今年大一开学的时候刚学python,只会python这门语言,很菜,勿喷。
今天去B站学习了python中的列表这节内容,我学到了第二节课,也完成了该课程包含的作业,这节课我学习了切片和append,extend等的使用方法。
s.append(1) 相当于 s[len(s):] = [1],后面那一个就用到了切片的方法,我对它的理解是:len(s)表示原列表的最后一位的下一位,所以[len(s):]表示自原列表后的数,即[len(s):] = [1]表示在原列表后的数换成1,也就相当于在原列表的后面加一个数,所以能与append的用法相等,append只能加一个元素,不能加可迭代对象。
s.extend(iterable) 相当于 s[len(s):] = iterable,extend与append不同,它的括号内只可填一个可迭代对象,可迭代对象内可拥有多个元素,即可同时向列表内加入多个元素。
s.insert(想插入的位置,插入的元素),就是能把特定元素插入特定位置,s.insert(len(s),1) 相当于 s.append(1),都是在原列表的最后一位的下一位上插入1.
接下来是我对我所写的作业的呈现:
r = input("请输入测试字符串:")
s = []
s.extend(r)
a = len(s)
i = 0
if a % 2 == 0:
while len(s) != 0:
if s[0] == "[" and s[-1] == "]" or s[0] == "(" and s[-1] == ")" or s[0] == "{" and s[-1] == "}":
s.pop(0)
s.pop()
i += 1
if i == a/2:
print("合法^o^")
else:
print("非法T_T")
break
if a % 2 != 0:
print("非法T_T")
这是一个判断你输入的字符串中的括号书写方式是否正确,只包含"(",")","[","]","{","}"这三对括号的判断,因为要把括号的每一边括号都作为列表的元素,所以我用了extend,而没有用append,我程序的初步判别是对括号的个数判别,若为双数则满足合法条件中的一条,反之则不符。接下来判断它成对后,便要来判断格式是否相符,因为格式需要,所以第一位与表格的最后一位必须是成对的,每判断成功一对就用pop删掉一对,这样通过循环就能一直判断掉所有括号是否成对,期间但凡有一对不符,便会进入else,即被判定为非法输入,并通过break跳出循环,否则会陷入死循环。
因为这道题比较难,所以那个博主给了一个空了几行的代码让我们填写,所以我写完自己的之后,打开了他的代码,初次看觉得比我复杂,然后我就想他为什么比我复杂,结果发现我没把题目看完整,他把{[]}()也设定为合法,而我的程序把这个归为合法。下面是我填写完的代码。
s = input("请输入测试字符串:")
d = 0
stack = []
for c in s:
if c == "(" or c == "[" or c == "{":
stack.append(c)
else:
if len(stack) == 0:
print("非法T_T")
break
if c == ")":
d = "("
elif c == "]":
d = "["
elif c == "}":
d ="{"
if d != stack.pop():
print("非法T_T")
break
else:
if len(stack) == 0:
print("合法^o^")
else:
print("非法T_T")
我发现这段代码的思维很巧妙,我也是看了仔细看了之后才懂的,他以输入的包含括号们的字符串为迭代对象,然后把前面的左括号先提取出来依次放入一个列表内,这之间一旦遇到右括号便会进行是否为空列表的判断,若为空列表则说明是从右括号开始的,格式错误,若不为空列表则把第一个右括号转为与他对应的左括号,然后判断与列表内的最后一个符号是否一致,因为在格式正确的时候,遇到第一个右括号必是与最后一个左括号对应的,他们是最里面的一对括号,然后用pop()把列表内判断过的左括号去掉,这样最后一个左括号便变成倒数第二个右括号,然后便可以依据之前的规则一直判断了。
这便是我这节课的主要学习内容和作业情况了。