日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程语言 > python >内容正文

python

python小括号报错_Python学习记录:括号配对检测问题

發(fā)布時間:2025/6/17 python 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 python小括号报错_Python学习记录:括号配对检测问题 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

Python學(xué)習(xí)記錄:括號配對檢測問題

一、問題描述

在練習(xí)Python程序題的時候,我遇到了括號配對檢測問題。

問題描述:提示用戶輸入一行字符串,其中可能包括小括號 (),請檢查小括號是否配對正確,配對成功與否分別輸出:

配對成功!

配對失敗!

其中,小括號配對要考慮配對順序,即()表示配對,)(不是配對,只考慮小括號配對。

一提起括號配對,我們可能會想到C語言正則表達式計算的符號優(yōu)先級問題,在C語言中我們通常使用棧來解決,而在Python中我們也可以用棧的思路和方法,以列表的形式來實現(xiàn)它。把list當(dāng)做棧來使用,但建立的還是list對象,提供的是list類型的函數(shù)方法。

二、Python列表函數(shù)&方法

序列是Python中最基本的數(shù)據(jù)結(jié)構(gòu)。序列中的每個元素都分配一個數(shù)字——它的位置,或索引,第一個索引是0,第二個索引是1,依此類推。

Python有6個序列的內(nèi)置類型,但最常見的是列表和元組。

序列都可以進行的操作包括索引,切片,加,乘,檢查成員。

此外,Python已經(jīng)內(nèi)置確定序列的長度以及確定最大和最小的元素的方法。

列表是最常用的Python數(shù)據(jù)類型,它可以作為一個方括號內(nèi)的逗號分隔值出現(xiàn)。

列表的數(shù)據(jù)項不需要具有相同的類型。

創(chuàng)建一個列表,只要把逗號分隔的不同的數(shù)據(jù)項使用方括號括起來即可。如下所示:

list1 = ['physics', 'chemistry', 1997, 2000]

list2= [1, 2, 3, 4, 5]

list3= ["a", "b", "c", "d"]

與字符串的索引一樣,列表索引從0開始。列表可以進行截取、組合等。

1.Python包含以下函數(shù):

1)cmp(list1, list2):比較兩個列表的元素

2)len(list):列表元素個數(shù)

3)max(list):返回列表元素最大值

4)min(list):返回列表元素最小值

5)list(seq):將元組轉(zhuǎn)換為列表

①使用len()方法返回列表元素個數(shù)。

len()方法語法:

len(list)

返回列表元素個數(shù)。

以下實例展示了len()函數(shù)的使用方法:

list1, list2 = [123, 'xyz', 'zara'], [456, 'abc']print("First list length :",len(list1))print("Second list length :",len(list2))

輸出結(jié)果如下:

②list()方法用于將元組轉(zhuǎn)換為列表。

list()方法語法:

list(tup)

返回列表。

注:元組與列表是非常類似的,區(qū)別在于元組的元素值不能修改,元組是放在括號中,列表是放于方括號中。

以下實例展示了list()函數(shù)的使用方法:

aTuple = (123, 'xyz', 'zara', 'abc')

aList=list(aTuple)print("列表元素:", aList)

輸出結(jié)果如下:

2.Python包含以下方法:

1)list.append(obj):在列表末尾添加新的對象

2)list.count(obj):統(tǒng)計某個元素在列表中出現(xiàn)的次數(shù)

3)list.extend(seq):在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)

4)list.index(obj):從列表中找出某個值第一個匹配項的索引位置

5)list.insert(index, obj):將對象插入列表

6)list.pop([index=-1]):移除列表中的一個元素(默認最后一個元素),并且返回該元素的值

7)list.remove(obj):移除列表中某個值的第一個匹配項

8)list.reverse():反向列表中元素

9)list.sort(cmp=None, key=None, reverse=False):對原列表進行排序

①append()方法用于在列表末尾添加新的對象。

append()方法語法:

list.append(obj)

該方法無返回值,但是會修改原來的列表。

以下實例展示了append()函數(shù)的使用方法:

aList = [123, 'xyz', 'zara', 'abc']

aList.append(2009)print("Updated List :", aList)

輸出結(jié)果如下:

②pop()函數(shù)用于移除列表中的一個元素(默認最后一個元素),并且返回該元素的值。

pop()方法語法:

list.pop([index=-1])

obj -- 可選參數(shù),要移除列表元素的索引值,不能超過列表總長度,默認為index=-1,刪除最后一個列表值。

該方法返回從列表中移除的元素對象。

以下實例展示了 pop()函數(shù)的使用方法:

list1 = ['Google', 'Runoob', 'Taobao']

list_pop= list1.pop(1)print("刪除的項為 :", list_pop)print("列表現(xiàn)在為 :", list1)

輸出結(jié)果如下:

三、代碼實現(xiàn)

代碼實現(xiàn)如下:

#使用列表來存放棧元素

defparentheses(m):

list1=[]for i inrange(len(m)):if m[i]=='(' or m[i]==')':

list1.append(m[i])#將小括號元素放在list1

list2=[] #存放(,相當(dāng)于棧

if len(list1)==0: #無小括號元素

returnTrueelif list1[0]==')': #第一個元素為),即)在(前面

returnFalseelif len(list1)%2!=0: #小括號元素總數(shù)為奇數(shù),無論怎么配對也不會成功

returnFalseelse:for i inrange(len(list1)):if list1[i]=='(': #將左括號元素放在list2

list2.append(list1[i])elif list1[i]==')' and len(list2)!=0: #排除右括號比左括號多的情況

list2.pop()#只要list1中有一個右括號且list2中左括號個數(shù)不為0,就移除list2里的一個左括號,以此進行左右括號配對

else:returnFalsereturnTrue

m=input('請輸入字符串:')ifparentheses(m):print('括號配對成功!')else:print('括號配對失敗!')

運行結(jié)果:

上面的程序可以正常運行,但我發(fā)現(xiàn)了新的問題:以上代碼并不適用于所有可能的輸入,比如我輸入(((()),即左括號比右括號多的情況,程序運行結(jié)果卻未報錯。

經(jīng)查閱,我發(fā)現(xiàn)網(wǎng)上關(guān)于Python括號配對的問題基本上都是利用列表方法實現(xiàn),但關(guān)于不合理輸入的異常處理情況考慮的比較少。這里列出了一些有代表性的可能的輸入情況,并且對每一種輸入情況進行處理,符合括號配對原則的配對成功,否則失敗。

可能存在情況:((())).(((()).(()))).()()等等。

可以看到,當(dāng)左括號比右括號多時,上面的代碼無法處理異常。這里我用自己的思路對上面的代碼進行修改,修改后的代碼如下:

#使用列表來存放棧元素

defbracketsmatch(m):

list1=[]

left=[]#存放(,相當(dāng)于棧

right=[]#存放),相當(dāng)于棧

for i inrange(len(m)):if m[i]=='(' or m[i]==')':

list1.append(m[i])#將小括號元素放在list1

if len(list1)==0:#無小括號元素

returnTrueelif list1[0]==')':#第一個元素為),即)在(前面

returnFalseelif len(list1)%2!=0:#小括號元素總數(shù)為奇數(shù),無論怎么配對也不會成功

returnFalseelse:for i inrange(len(list1)):if list1[i]=='(':

left.append(list1[i])#將左括號元素放在left

elif list1[i]==')' and len(left)!=0:#排除右括號比左括號多的情況

right.append(list1[i])#將右括號元素放在right

left.pop()#只要有一個右括號進入right,就將其移除,同時移除left里的一個左括號,以此進行左右括號配對

right.pop()if len(left)==0 and len(right)==0:#如果左右括號配對完畢

returnTrueelse:#左右括號未配對完畢,繼續(xù)執(zhí)行循環(huán)

continue

else:returnFalse

m=input('請輸入字符串:')ifbracketsmatch(m):print('括號配對成功!')else:print('括號配對失敗!')

運行結(jié)果:

修改后的代碼雖然處理了左括號比右括號多時的異常情況,但又無法處理右括號比左括號多的情況。這也是讓我有點頭疼的一點,即使我知道是程序算法設(shè)計的問題,但由于時間問題,我沒來得及再進一步深入解決這個問題,后續(xù)時間里我會繼續(xù)思考,爭取將這個缺口補上。

參考資料:

總結(jié)

以上是生活随笔為你收集整理的python小括号报错_Python学习记录:括号配对检测问题的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 在线看片你懂 | 老司机午夜av | 亚洲国产精品久久久久婷婷老年 | 91精选国产 | 午夜精品美女久久久久av福利 | 借种(出轨高h) | 亚洲精品666 | 波多野结衣乳巨码无在线观看 | 欧洲人妻丰满av无码久久不卡 | 特级西西444www | 日本一区二区三区中文字幕 | 五月婷婷中文 | 一本色道久久综合亚洲 | 婷婷五月精品中文字幕 | 黄色aa网站 | 亚洲激情成人网 | 日夜夜操 | 91五月天| 色香五月 | 一区二区久久久 | 国产精品99久久久久久大便 | 天堂在线中文在线 | 久草一区二区 | 日韩国产成人无码av毛片 | 人人草人人澡 | 青娱乐福利视频 | 色婷综合 | 日韩123区 | 久久精品这里只有精品 | 亚洲奶汁xxxx哺乳期 | 日韩视频一区二区三区四区 | 中文字幕88 | 中文字幕人妻互换av久久 | 色呦呦一区二区三区 | www.在线看 | 婷婷亚洲五月色综合 | 婷婷色激情 | 精品1区2区 | 亚洲福利视频网站 | 在线黄色av网站 | 日韩av无码一区二区三区不卡 | 亚洲二区在线观看 | 蜜乳av 懂色av 粉嫩av | 91午夜精品| 性xxxx欧美老肥妇牲乱 | 午夜精品国产 | 天堂av一区二区 | 午夜视频免费观看 | 伊人免费在线观看 | 亚洲天堂伊人 | 欧美gv在线| 女人高潮娇喘1分47秒 | 99久久精品免费看国产四区 | 日本黄色网址大全 | 中文字幕免费看 | 黄色大片中文字幕 | 懂色tv | www.亚洲激情 | 天天操天天干天天操 | 免费看黄网站在线 | 中文字幕免费一区 | 国产伦精品一区二区三区免费 | 亚洲精品视频在线观看免费 | 夜夜爽www| 亚洲综合免费观看高清完整版在线 | avwww| 超碰超碰超碰超碰 | 丰满孕妇性春猛交xx大陆 | 亚洲精品鲁一鲁一区二区三区 | 国产精品分类 | 国产又爽又黄的视频 | 天堂av网址 | 久久国产精品久久 | 91一区在线观看 | 久久久久99精品成人片直播 | av观看网 | 成人午夜视频在线观看 | 韩国美女福利视频 | 国产夫妻性生活 | 亚洲精品乱码久久久久久蜜桃麻豆 | 免费福利影院 | 久久黄色影院 | 日韩七区 | 7799精品视频天天看 | a级黄色一级片 | 爽好多水快深点欧美视频 | 中文字幕无码乱人伦 | 国产精品白嫩白嫩大学美女 | 国产伦精品一区二区三区四区视频 | 日本黄色片 | 午夜欧美成人 | 午夜精品一区二区三区三上悠亚 | 免费av一区二区三区 | 影音先锋天堂网 | 精品乱码久久久久久中文字幕 | 色老板精品凹凸在线视频观看 | 久久精品国产亚洲av麻豆色欲 | 天堂欧美 | 日本成人一二三区 |