資源簡介 作業練習課程基本信息學科 信息技術 年級 高二 學期 春季課題 字符串教科書 書 名:數據與數據結構 出版社:浙江教育出版社學生信息姓名 學校 班級 學號作業練習字符串的長度是指 A.字符串中所含不同字母的個數 B.字符串中所含字符的個數 C.字符串中所含不同字符的個數 D.字符串中所含非空格字符的個數 獲取字符串x長度的方法是 A.x.len() B.x.length() C.len(x) D.length(x) 有Python程序段如下: count=0 L=["one","two","three","four","five","six"] for i in L[1:4]: count=count+len(i) print(count) 執行該程序段后,輸出的結果是 A.11 B.12 C.16 D.19 有Python程序段如下: n="p2y8t1h7o3n5";p="" for i in n: if "0"<=i<="9": if p=="": p+=i elif i>=p[-1]: p+=i elif i課程基本信息學科 信息技術 年級 高二 學期 春季課題 字符串的應用教科書 書 名:數據與數據結構 出版社:浙江教育出版社學生信息姓名 學校 班級 學號作業練習(22.04 寧波金蘭教育組織高二技術)已知某數據加密方法如下:將字符的內碼以字節為單位進行加密。將每個字節的后5位轉換為十進制數,后面跟上“,”和該字節的前3個二進制位轉換為十進制數,形成該字節的加密形式。例如: 內碼(十六進制)AFD2二進制1010111111010010后5位十進制1518前3位十進制56加密結果15,5,18,6按照上述規則,小陳設計了一個Python的解密程序如下所示。請回答下列問題: (1)若加密結果為“3,6,5,6”,則原來十六進制內碼為 。 (2)完成劃線處程序代碼。 def dtoh(x): s1="0123456789ABCDEF" str="" while x>0: str=s1[x%16]+str ① return str a=[0]*50 k=0;p=0 jm="" s=input("請輸入密文:") for i in range(len(s)): ch=s[i] if "0"<=ch<="9": ② else: if k%2==1: a[k]=p*32+a[k-1] else: ③ k+=1;p=0 a[k]=p*32+a[k-1] for j in range(1,k+1,2): jm+=dtoh(a[j]) print(jm) (22.08 A9協作體暑假返校聯考)字符串分段。輸入一串僅由小寫字母組成的字符串 s,將這個字符串劃分為盡可能多的小片段, 要求同一個字母只出現在其中的一個片段中,并按照分段順序逐行輸出分段結果。程序運行界面如下圖所示。 (1)實現上述功能的 Python 程序如下,請在劃線處填入合適的代碼。 s = input("請輸入一串僅包含小寫字母的字符串:") c = 0 p = [-1]*52 #數組 p 用來記錄各個小寫字母出現的起始位置和結束位置 #a[0]記錄 a 出現的起始位置,a[1]記錄 a 出現的結束位置,依次類推 for i in range(0,len(s)): #記錄各字符第一次和最后一次出現的位置 a = ① if p[2*a] == -1: p[2*a] = i else: p[2*a+1] = i for i in range(0,26): if p[2*i] > p[2*i+1]: p[2*i+1] = p[2*i] #只出現一次的字符,起始位置就是結束位置 if p[2*i] != -1: c += 1 for i in range(0,c): #將字符位置按照出現的起始位置升序排序 for j in range(25,i,-1): if p[2*j] > -1 : if p[2*(j-1)] > p[2*j] or ② : p[2*(j-1)],p[2*j] = p[2*j],p[2*(j-1)] p[2*(j-1)+1],p[2*j+1] = p[2*j+1],p[2*(j-1)+1] t1,t2 = p[0],p[1] #字符串分段 for i in range(1,c): if p[2*i] < t2 and p[2*i+1] > t2: ③ elif p[2*i] > t2: print(s[t1:t2+1]) t1,t2= p[2*i],p[2*i+1] print(s[t1:t2+1]) (2)運行程序后,若輸入的字符串 s 為“hshjhqueeqabaa”,輸出的結果一共有 行,其中,第二行顯示結果為 。【參考答案】 【答案】(1)C3C5 (2)①x//=16 或其他等價答案 ②p =p*10 +int(ch)或其他等價答案 ③a[k]=p或其他等價答案 【解析】(1)由題可知每兩個數字構成一個字節,按照題目要求,第二個數字變換成二進制需要在后面添加5個0,也就是擴大32倍。再加上第一個數字就是該字節的10進制。按照該要求對3,6,5,6進行計算可得其16進制為C3C5。 (2)①當前將數值轉成16進制,上面已經取得余數,接著需要將該數整除16,因此該空答案為x//=16。②p做為當前該數的臨時存儲變量存在,用于臨時存儲當前這一位的數值。其答案為p =p*10 +int(ch)。③當k為偶數,說明這是第一個數,從題目可知,第一個數是做為后幾位二進制存在,其數值不需要轉換,直接進行存儲即可。其答案為a[k]=p。 【答案】(1)①ord(s[i])-97 或 ord(s[i])-ord("a") ②p[2*(j-1)] == -1 ③t2 = p[2*i+1] (2)3;queeq 【解析】本題考察算法的綜合應用,涉及的知識點有程序的基礎知識、程序結構、字符串的處理、順序查找、冒泡排序等。 (1)①根據注釋:記錄各字符第一次和最后一次出現的位置和相應的代碼 if p[2*a] == -1: p[2*a] = i,此處代碼應該是將相應字符轉換為對應的數組索引(下標)a = ord(s[i])-97。②程序代碼采用冒泡排序。根據題意和前后代碼,此時除了按起始位置升序排序外,還應該將沒有出現過的字符通過排序,放到數組的尾部。所以往后移動的除了 p[2*(j-1)] > p[2*j]外,另外滿足 p[2*(j-1)] == -1(沒有出現過的字符)也要后移。③根據題意,再根據輸出語句print(s[t1:t2+1])和輸出條件:p[2*i] > t2,此處代碼是要確定某個片段的起點 t1 和終點 t2。而題目中對某個片段的要求是:同一個字母只出現在其中的一個片段中!所以當片段的終點 t2,介于后一個字符起點和終點之間時,要將片段的結束位置更新為后一個字符的結束位置:t2=p[i*2+1],依次類推。直到 t2 小于下一個字符的起點(p[i*2]>t2),此時輸出片段,更新下一個片段的起點和終點。 (2)根據題意要求,字符串“hshjhqueeqabaa”,可以分成三段:“hshjh”、“queeq”、“abaa”,第 2 段是:“queeq”。 展開更多...... 收起↑ 資源列表 高中信息技術浙教版(2019)選修1:3.1 字符串-課后練習(含答案) (1).docx 高中信息技術浙教版(2019)選修1:3.1 字符串-課后練習(含答案).docx 縮略圖、資源來源于二一教育資源庫