資源簡介 中小學教育資源及組卷應用平臺2025新教材技術高考第一輪專題二 算法與程序基礎考點過關練考點一 算法的概念及描述考點二 算法的控制結構1.(2024屆杭州質量檢測,7)某算法的部分流程如圖所示,執行這部分流程,若輸入i的值為序列[2,3,4,5]中的隨機數,則下列說法正確的是( )A.變量c的最大值為11B.“a>0 ”至少執行5次C.程序結束時變量a一定等于0D.只能使用while語句實現該循環結構2.關于算法的重要特征,下列說法錯誤的是( )A.有窮性:算法必須能在執行有限個步驟之后終止B.確定性:算法中的每一次運算都既有明確的定義,也可具有二義性C.輸入項:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身給出了初始條件;輸出項:算法一定要有輸出D.可行性:算法中執行的任何計算都可以在有限時間內完成(也稱為有效性)3.(2022精誠聯盟聯考,7)某算法流程圖如圖所示,已知randint (0, 10)函數可以產生閉區間[0, 10]內的隨機整數,執行完該流程圖后,輸出結果可能是( )A.6 6 6 6 6B.10 12 16 18 22C.0 2 4 5 8D.12 8 10 16 204.(2023海寧適應性考試,7 )某算法的部分流程圖如圖所示,若用Python語言描述,則下列選項正確的是( )A.res=1;a=2for n in range(6,0,-2): if n%2==1: res*=a else: a*=a n//=2B.res=1;a=2;n=6while n>0: if n%2==1: res*=a else: a*=a n//=2C.res=1;a=2for n in range(6,0,-2): if n%2=1: res*=a a*=a n//=2print(res)D.res=1;a=2;n=6while n>0: if n%2==1: res*=a a*=a n//=2print(res)5.(2023東陽模擬,7)某算法的部分流程圖如圖所示。執行這部分流程,若輸入n的值為55,則輸出s的值為( )A.110111 B.000100C.001000 D.1110116.(2023金麗衢聯考,7 )某算法的部分流程圖如圖所示,執行這部分流程圖,若輸入的值依次為7, 20,8, 15, 10, 40, -1,則輸出結果為( )A.4,40 B.3,10C.1,20 D.3,15考點三 用算法解決問題的一般過程考點四 用計算機編程解決問題的一般過程1.使用算法解決實際問題時,首先應該做的是( )A.設計算法 B.抽象與建模C.編寫程序 D.描述算法2.任何一個算法都要使用的控制結構是( )A.循環結構 B.樹型結構C.分支結構 D.順序結構3.要編程判斷一個正整數是不是素數(質數),最適合使用的控制結構是( )A.順序結構 B.分支結構C.選擇結構 D.循環結構4.小王想設計一個文件加密的程序,為此她制訂了如下的工作過程,你認為最恰當的是( )A.設計算法、編寫程序代碼、調試程序、得到答案B.分析問題、編寫程序代碼、運行程序、得到答案C.分析問題、設計算法、編寫程序代碼、調試運行D.分析問題、設計程序、編寫程序代碼、運行程序5.解決問題的一般過程中,需要先分析問題,對問題進行抽象與建模。以下不屬于分析問題階段的是( )A.查找與問題相關的資料B.尋找已知與未知的聯系C.明確問題所涉及的相關知識D.設計問題求解方案6.(2023舟山期末,7)下列關于算法的說法正確的是( )A.算法解決問題的一般過程依次為“設計算法、抽象與建模、描述算法”B.數據、運算和控制轉移是算法三大要素C.任何算法都必須要有至少一個輸入數據和一個輸出數據D.同一種算法只能用一種方法表示考點五 Python語言程序設計考點六 簡單算法及其程序實現1.(2023余姚期中,9)若 x 是整型變量,下列選項中與表達式 not(x>=1 and x<5)等價的是( )A.x<1 and x>5 B.not x>=1 or x<5C.x<1 and x<5 D.x<1 or x>=52.(2023杭州S9聯盟期中,5)已知字典 dic={False: 0, True: 1},執行語句 print(dic["hi" in "height" or "3" > "21"])后的結果是( )A.False B.0C.True D.13.(2023杭州“六縣九校”期中,11)某Python程序如下:d={"A":1,"B":2,"C":3,"D":4,"E":5}a=d["E"]b=d["D"]c=d["B"]s=a+b+cprint(s)程序運行后,輸出的結果是( )A.8 B.9 C.10 D.114.(2023寧波期末,10)某停車場的收費標準為“30分鐘內(含)免費,3小時內(含)5元,超過3小時每增加1小時加收1元,停車不足1小時的按1小時計算。”已知停車時長為t分鐘,則下列Python程序段中不能正確計算停車費m的是( )A.if t<=30: m=0elif t<=3*60: m=5else: m=5+(t-3*60+59)//60B.if t>30: m=5 if t>3*60: m=5+(t-3*60+59)//60else: m=0C.m=5if t>3*60: m=5+(t-3*60+59)//60elif t<=30: m=0D.m=0if t>3*60: m=5+(t-3*60+59)//60if t>30: m=55.(2023杭州“六縣九校”期中,12)已知d1={"地點":["杭州","金華","溫州"],"牌號":["a","b","c"],"編號":[1,2,3]},s="VALUE",下列表達式值與其他三項不相同的是( )A.ord(s[1])+3//10*10B.len(d1["地點"][0])**6+1C.74-d1["編號"][2]**2D.int((ord(d1["牌號"][1])-32)/10)*106.(2023余姚期中,12)有下面一段程序:a=[9,5,2,3,0,-9,5,0,7,-10]s,i=0,0while a[i]!=0 and i < len(a): s+=1 i+=1運行該程序后 s 的值為( )A.4 B.5 C.8 D.10專題綜合練題組一1.(2021浙江6月選考,8,2分)某算法的部分流程圖如圖所示,執行這部分流程,若輸入n的值為20,則輸出a,b的值分別是( )A.12,10 B.10,9C.9,15 D.9,102.(2020浙江7月選考,8,2分)某算法的部分流程圖如圖所示。執行這部分流程,若輸入a的值為36,則輸出c的值為( )A.2 B.3 C.4 D.53.(2020浙江1月選考,8,2分)某算法的部分流程圖如圖所示。執行這部分流程,若輸入a的值為22,則輸出b的值為( )A.0 B.1 C.2 D.164.(2023浙江1月選考,7,2分)某算法的部分流程圖如圖所示,執行這部分流程,若輸入x的值依次為10,7,8,12,0,則輸出k的值是( )A.2 B.3 C.4 D.55.(2024屆杭州S9聯盟期中,6)下列語句的功能與其他三項不一樣的是( )A.if a>b: flag=Trueflag=False B.flag=Falseif a>b: flag=TrueC.if a<=b: flag=Falseelse: flag=True D.flag=a>b6.(2024屆嘉興基測,8)下列Python表達式運算結果為True的是( )A.3**2<8 and 2%5>1B.25//4>4 and 3/2<1C.not 7<8 or 9>6+2D.not(2**3<9 or 6%4<2)7.(2024屆七彩聯盟聯考,12)有如下Python程序:import randoms=input()k=random.randint(1,len(s)-1)i=0while k>0 and i if s[i]>s[i+1]: k-=1 s=s[:i]+s[i+1:] if i>0: i-=1 else: i+=1if k>0: s=s[: len(s)-k]若輸入的s值為"8561324",則執行該程序,輸出s的值不可能為( )A.51324 B.124 C.132 D.13248.(2024屆嘉興基測,9)有如下Python程序段:s="A-b2c";ch=" "list=[4,3,1,5,2]for i in range(len(s)):if "A"<=s[i]<="Z": ch=ch+chr(ord(s[i])+list[i])elif "a"<=s[i]<="z": ch=ch+chr(ord(s[i])-list[i])else: ch=s[i]+chprint(ch)該程序運行后,輸出的結果是( )A.2-Eaa B.2-ECEC.E-c2e D.E-a2b9.(2024屆名校協作體聯考,12)有如下Python程序段:import randoma=[]for i in range(6):a.append(random.randint(1,10))for i in range(5):if i%2==0 and a[i] a[i],a[i+1]=a[i+1],a[i]else: a[i]-=1print(a)運行該程序后,輸出結果不可能是( )A.[7,3,3,4,9,4] B.[8,8,10,5,7,8]C.[9,4,9,4,8,7] D.[7,2,9,7,4,5]10.(2024屆強基聯盟統測,12)列表a有n(n>=2)個正整數,相鄰兩數的差值為1,0或-1。求相鄰兩數具有相同差值的連續子序列中,子序列元素和的最大值。實現該功能的程序段如下,加框處應填寫的正確代碼是( )state=a[1]-a[0]maxv=t1=t2=a[1]+a[0]for i in range(2,n):f=a[i]-a[i-1] print(maxv)A.if state==f: t1+=a[i]t2=t1else: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)if t2>maxv:maxv=t2B.if state==f: t1+=a[i]t2=t1elif state !=f: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)elif t2>maxv: maxv=t2C.if state==f: t1+=a[i]t2=t1if state !=f: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)elif t2>maxv: maxv=t2D.if state==f: t1+=a[i]t2=t1else: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)if t2>maxv: maxv=t211.(2024屆強基聯盟統測,9)有如下程序段:a=[30,10,20,11,12,50]d=[0]*6 ; max=0 ; n=len(a)for i in range(1,n):for j in range(i):if a[j] d[i]+=1if d[i]>max: max=d[i]執行程序后,變量max的值是( )A.2 B.3 C.4 D.512.(2024屆杭州質量檢測,10)列表d有n個整型元素,輸出列表中最長連續遞增序列的長度。小明編寫的 Python程序段如下:k=1;lmax=1;n=len(d)for i in range(1,n): if d[i]>d[i-1]: k+=1 else: if k>lmax: lmax=k k=1print(lmax)該程序段在某些情況下無法得到符合題意的結果,下列4組數據中能測試出這一問題的是( )A.[1,4,5,1,2] B.[1,2,3,4,1]C.[1,5,1,2,3] D.[5,4,3,2,1]13.(2023寧波期中,8)已知字典d={'名稱':'orange','數量':7,'售價':6.7,'利潤':6.78},則下列Python表達式中值最大的是( )A.len(d['名稱']) B.d['數量']C.round(d['利潤'],1) D.int(d['售價'])14.(2023衢州質量檢測,11)有如下Python程序段:def sm(a): if len(a)==1: return a[0] else: return a[0]+sm(a[1:])a=[7,8,9,1,5,6]print(sm(a))程序運行后,函數sm被調用的次數是( )A.5 B.6 C.7 D.1215.(2022浙江7月學考,10,3分)某Python程序如下:p="Tel-114"c=" "for ch in p:if ch>="0" and ch<="9": c+=str(9-int(ch))elif ch>="a" and ch<="z":c+=chr(ord(ch)- ord("a")+ord("A"))else: c+=chprint(c)程序運行后,輸出的結果是( )A.tEL-885 B.tEL-114C.TEL-114 D.TEL-88516.(2023三校聯考,10)有如下Python 程序段:a=[]b=[1,5,4,1,5]c={1:3,2:4,3:5,4:1,5:2}for i in b: if i not in a: a.append(c[i])print(a)運行該程序段后,列表 a 的值是( )A.[1,5,4] B.[3,2,1]C.[3,2,1,2] D.[3,2,1,3]17.(2023嘉興基測,12)有如下Python程序段:import randomnums=[0]*6for i in range(6): nums[i]=random.randint(1,10)i=0j=len(nums)-1while i if nums[i] %2==0 and nums[j]%2==1: nums[i],nums[j]=nums[j],nums [i]elif nums[i] %2==1: i=i+1elif nums[j] %2==0: j=j-1print(nums)執行該程序段后,下列輸出結果中不可能的是( )A.[1,3,1,5,1,7]B.[1,4,3,6,5,8]C.[1,3,5,7,9,10]D.[6,4,2,8,2,10]18.(2023余姚期中,17)學考成績與學考等級折算方法如下:“A”等折算成10分,“B”等折算成9分,“C”等折算成7分,“D”等折算成4分。現編寫一個能實現將學考等級折算成相應分數的Python程序,程序運行結果如圖所示:請輸入各門功課的學考等級:ABABACBAAA你的學考成績折算為:94請回答下列問題:(1)若輸入"aaabbaac",該程序 (填:能/不能) 計算出相應的折算成績。 (2)請在程序劃線處填上合適的代碼。level=input("請輸入各門功課的學考等級:")dic={"A":10,"B":9,"C":7,"D":4}score=0for i in range(len(level)): score=score+ ① print("你的學考成績折算為:"+ ② ) 19.(2022浙江7月學考,12,10分)查找與替換。從鍵盤上分別輸入要查找和替換的字符串,對文本文件進行查找與替換,替換后保存到新的文本文件中。完成查找與替換功能的思路是:首先可從待檢索文本文件“in.txt”逐行讀取文本內容到列表text,然后從鍵盤上輸入查找的字符串key和替換的字符串new,對列表text中的元素逐個進行查找并替換,結果保存到列表result,最后將result 寫入文件“out. txt”。(1)主程序。text=readfile("in.txt") #讀入文件key=input("請輸入要查找的字符串:")new=input("請輸入要替換的字符串:")result=[]for line in text:newline=replace(key, new, line)#替換result.append(newline)#添加到列表writefile("out.txt",result)#寫入文件該程序段采用的算法是 (單選,填字母:A.解析算法 / B.枚舉算法)。 (2)讀寫文本文件。如下的readfile函數,逐行讀取文本文件數據存入列表并返回。請在劃線處填入合適的代碼。def readfile(filename):f=open(filename,encoding="utf-8")#打開文件text=[]line=f.readline()#從文件中讀取一行while line:text.append(line)#添加到列表line=f.readline()f.close()return def writefile(filename,text):#將text寫入filename文件,代碼略(3)查找字符串。如下的findstr函數,在字符串line中從begin位置開始查找key在字符串line中的位置,請在劃線處填入合適的代碼。def findstr(key,line,begin):for i in range(begin, len(line) - len(key)+ 1): if : return ireturn -1(4)替換字符串。如下的replace函數,在字符串line中檢索所有的字符串key并替換為new,請在劃線處填入合適的代碼。def replace(key,new,line):begin=0while begin < len(line) - len(key)+ 1: pos=findstr(key,line,begin)if pos==-1: else:line=line[0:pos]+ new+ line[pos+ len(key) :len(line)]begin=pos+ len(key) return line20.(2023浙江6月選考,13,7分)某倉庫有一排連續相鄰的貨位,編號依次為0~n-1,用于放置A、B兩種類型的箱子,A型箱子占2個相鄰貨位,B型箱子占1個貨位。編寫程序,根據已完成的放置或搬離操作,輸出空貨位數及還可以放置A型箱子的最多數量(不移動已放置的箱子)。請回答下列問題:(1)若n為10,開始時貨位全空,經過如表所示的放置或搬離操作后,不移動已放置箱子的情況下,還可放置A型箱子的最多數量為 個。 箱子類型 操作類型 貨位編號B 放置 5A 放置 2,3B 放置 0A 放置 7,8A 搬離 2,3(2)實現上述功能的部分Python程序如下,請在劃線處填入合適的代碼。#讀取貨位總數,存入n,代碼略。cnt1=nlst=[0]*n#貨位狀態,0表示對應的貨位為空while True:#讀取本次已操作的數據:箱子類型、操作類型、貨位編號起始值,存入t、d和s,代碼略 if t=='A': w=2 ① : w=1else: #t不是'A'或'B'時退出循環 breakif d=='P': #d為P時表示放置,否則表示搬離 ② else: cnt1+=wlst[s]=1-lst[s]if t=='A': lst[s+1]=1-lst[s+1]i, cnt2=0,0while i< n-1: if lst[i]==0 and lst[i+1]==0: ③ cnt2+=1 i+=1print('當前空貨位數:',cnt1,'還可放置A型箱子的最多數量:',cnt2)21.(2022“9+1”聯盟期中,14)蒙特卡羅方法是一類基于概率,通過使用隨機數來解決某些計算問題的方法。如圖所示,在平面上有k 個圓,可以使用蒙特卡羅方法求這些圓所占的近似總面積。(注:重疊部分僅計算一次,不重復計算)具體算法如下:(1)建立一個直角坐標系,測得每個圓的坐標位置和半徑;(2)用一個矩形包圍所有的k個圓,設該矩形的長、寬分別為m和n;(3)在矩形范圍內產生v個隨機點;(4)統計落在圓內或圓弧上的隨機點的數量,并存入變量cnt;(5)根據cnt占所有隨機點的比例,計算所有圓的近似總面積S=矩形面積×(cnt÷v)。請在劃線處填入合適的代碼。提示:平面上兩個坐標點(x1,y1)和(x2,y2)的距離=。from math import sqrtimport random#測量矩形的長度、寬度、圓的個數,存入變量m、n、k,代碼略v=int(input()) #讀入隨機點的數量,數量越多,精度越高cir=[]for i in range(k):#依次測量每個圓的圓心(x,y)及半徑r,存入cir列表 cir.append([x,y,r])def dis(x1,y1,x2,y2): #計算兩個坐標點的距離,參考題目中給出的公式 d= ① return ddef check(x,y): flag=False for i in range(k): if dis(x,y,cir[i][0],cir[i][1])<=cir[i][2]:#判斷點是否在圓內或圓上 flag=Truebreak ② cnt=0for i in range(v): x=random.uniform(0,n) #產生當前隨機點的x坐標y=random.uniform(0,m) #產生當前隨機點的y坐標if check(x,y): cnt+=1 ③ print(round(s,2)) #輸出近似總面積,四舍五入保留兩位小數22.(2023學軍中學月考,16)掃描算法是一種電梯的調度算法(非實際操作),電梯在最底層(1樓)和最頂層(20樓)之間連續往返掃描并運行,在運行過程中優先處理與當前電梯運行方向相同的請求,比如:當前電梯在3樓,方向為向上,此時有3個人請求使用電梯:7樓去16樓、2樓去9樓、6樓去1樓,則電梯先向上運行,依次在7樓和16樓停靠;然后再向下運行,依次在6樓和1樓停靠;最后再向上運行,依次在2樓和9樓停靠。小明編寫程序實現這個調度算法,運行界面如圖,請回答下列問題。(1)若電梯當前在3樓,方向為向上,收到的請求是:7樓去16樓、6樓去1樓、2樓去9樓、14樓去1樓、10樓去15樓,則第一趟向上運行依次停靠的樓層是 (按停靠順序填寫數字)。 (2)實現算法的Python程序如下,請在劃線處填入合適的代碼。def scan(now,d): #scan函數的功能:從當前樓層開始,按當前運行方向掃描一趟 for i in range(len(ask)): tmp=(d==1 and ask[i][0] >=now) or ( ① ) if ask[i][2]==d and not flag[i] and tmp: stop[ask[i][0]]=1stop[ask[i][1]]=1flag[i]=Trueask=[[7,16,0],[6,1,0],[2,9,0],[14,1,0],[10,15,0]]flag=[False for i in range(len(ask))]direct={1:"向上",-1:"向下"}now=3d=1print("當前樓層:",now,"方向:",direct[d])for i in range(len(ask)): ② if t>0: ask[i][2]=1 # t表示該請求的電梯運行方向elif t<0: ask[i][2]=-1 #t表示該請求的電梯運行方向else: flag[i]=Truewhile False in flag: stop=[0]* 21 #標記1~20各樓層是否停靠scan(now,d)print("n", direct[d], ",停靠樓層: ", end=" ")if d==1: st=1ed=21 now_next=20else:st=20ed=0now_next=1for i in range(st, ed, d): if stop[i]==1: print(i, end=" ")now=now_next ③ 題組二1.(2024浙江1月選考,10,2分)某算法的部分流程圖如圖所示,若n的值為7,key的值為78,數組元素a[0]至a[n-1]依次存放7,12,24,36,55,78,83,執行這部分流程后,輸出c的值為 ( )A.0 B.1 C.2 D.32.(2023浙江7月學考,6,3分)用算法流程圖描述“消費積分累計100分,升級為V1會員;消費積分累計180分,升級為V2會員”的問題,用t表示顧客的消費積分,下列選項不正確的是( )3.(2023桐鄉月考,16) 某算法的部分流程圖如圖所示,若列表a的值為[162,184,171,166,177,179],key的值為170,執行這部分流程后,f、k的值分別為( )A.false,0 B.true,1C.true,2 D.true,34.(2023十校聯盟聯考,6)某算法的部分流程圖如圖所示。執行這部分流程,若輸入s的值為“0152234512”,則輸出結果為( )A.3 B.12 C.015 D.223455.(2024屆三校聯考,8)已知變量s="2021china",則表達式s[-1]+s[2]*2的值是( )A."a4" B."a22" C."n22" D."a0"6.(2023溫州適應性考試,7)已知列表 a=[2,3,4,5],要將列表a更新為[1,2,3,4,5],則下列可實現該功能的操作是( )A.a="1"+a B.a.append(1)C.a=[1]+a D.a=1+a7.(2022浙江7月學考,6,3分)用Python算法控制結構描述“您所在街道25分鐘后小雨,50分鐘后雨停”,設t為距離天氣預報發布時間的間隔(單位:分鐘),下列選項正確的是( )A.if t>50: print("雨停")elif t>25: print("小雨")B.if t>50: print("雨停")else: print("小雨")C.if t>25 and t<=50: print("小雨")else: print("雨停")D.if t>25: print("小雨")elif t>50: print("雨停")8.(2023杭州地區重點中學期中,9)左右對稱的字符串稱回文串。若要判斷字符串s是不是回文串,可以先找到s的中間位置mid=len(s)//2,再采用切片操作取出s的左半部分left=s[0:mid],然后取出s的右半部分并反轉,存儲在變量right中,若left與right相等,則為回文串。則下列表達式能正確表達變量right值的是( )A.s[mid::][::-1]B.s[mid+1::][::-1]C.s[len(s)-1:mid:-1]D.s[-1:-mid-1:-1]9.(2023浙江7月學考,10,3分)某Python程序如下:p=")!@#$%^&*("c="cra2edu"t=" "for i in range(len(c)//2+1): if i%2==0: t+=c[len(c)-i-1] elif c[i]>="0" and c[i]<="9": t+=p[int(c[i])] else: t+=c[i]print(t)程序運行后,輸出的結果是( )A.ude@ B.cda# C.ure@ D.arc#10.(2024浙江1月選考,11,2分)若字符串s的值為"abcde",執行如下程序段后,變量res的值不可能是( )from random import randintres=" "i,j=0,len(s)-1while i=i: if randint(0,1)==0: #randint(0,1)隨機生成0或1 res+=s[i] i+=1 else: res+=s[j] j-=1A."abced" B."aecbd" C."aedbc" D."edcba"11.(2023十校聯盟聯考,11)有下列Python程序段:dict={"a":["apple",["abandon","ant"]],"b":["banana","bee","become"],"c":["cat","come"],"d":"down"}s="abcd"cnt=0for i in s: cnt+=len(dict[i])print(cnt)該程序段運行后,輸出結果是( )A.8 B.9 C.11 D.1212.(2024屆新陣地聯盟聯考,10)某Python程序如下:n=0for i in range(32): m=i;x=0 while m>0: x+=m%2 m//=2 if x==3: n+=1print(n)程序運行后,輸出的結果是( )A.3 B.5 C.10 D.3213.(2023杭州“六縣九校”期中,13)“最強大腦”游戲問題的算法分析:顯示游戲規則,顯示物品以及編號,屏幕停留10秒;隨機出題,給出物品,回答編號;判斷回答是否正確,如果正確,則答對的題數加1。重復以上步驟,直到答完5道題;顯示答對的題數。劃線處應填入的代碼為( )import random;import time;import osprint("你好,現在你有 10 秒鐘的時間記憶下列物品及其編號")things=["蘋果","香蕉","橙子","梨子","獼猴桃","柚子","猴魁","鐵觀音","彩蛋","復活節"]for i in range(10): print(i,":", ① ) #在屏幕上顯示編號及物品名稱 time.sleep(10)#延時 10 秒os.system("cls")#清屏幕,隱去編號及物品n=0#記錄答對的題數,初值為 0t2=random.sample( ② ,5)#隨機抽出 5 個物品 for i in t2:#出 5 題 ans=int(input(i+ "的編號是:")) #輸入編號答題 if i== ③ : n=n+1 #如果回答正確,答對的題數加1print("\n你一共答對了",n,"次") #屏幕顯示答對的題數input("\n按回車鍵結束程序")A.①things[i] ②things③things[ans]B.①things ②things③things[i]C.①things[i] ②things[i]③things[ans]D.①things[ans] ②things[ans]③things[i]14.(2024屆七彩聯盟聯考,13)某公路由于長期沒有維修,路上出現了很多個坑。為了盡快填補好這些坑,交通管理部門決定對m處地段采取交通管制。將該公路看成一條直線,坑就是直線上的坐標點,坑所在的路段需要封控管制。例如某管制路段2~4,需封控2、3、4路段。交管部門為了減少管制路段的長度,希望將這n個坑分成m段(一段可以只有一個坑),使得這m段公路的總長度最小。請你根據n個坑的位置(位置已按照從小到大進行排序),計算管制路段最小的總長度。代碼運行效果如圖所示。請回答下列問題:(1)上圖所示的例子中,若將路段數量修改為5,則管制路段總長度為 。 (2)實現上述功能的Python程序如下,請在劃線處填入合適的代碼。m=int(input("路段數量:"))s=input("坑的坐標依次為:").split(',')n=len(s)for i in range(n):s[i]=int(s[i])flag=[False] * (n-1)for i in range(1,m):k=-1for j in range(n-1):if ① : if k=-1 or s[j+1]-s[j]>s[k+1]-s[k]: k=jflag[k]=Trueprint("維修管制的路段依次為:")dis,t=0,0for i in range(n-1):if flag[i]: print(s[t],"~",s[i]) dis+=s[i]-s[t]+1 ② print(s[t],"~",s[n-1])dis= ③ print("管制總長度為" , dis)15.(2024屆強基聯盟聯考,13)下列Python程序段功能為:統計如圖所示英文小說中英文單詞出現的次數,且不區分大小字母,輸出文章中出現次數最多的英文單詞以及出現次數,如有并列則一并輸出。(1)下列程序代碼中,加框處的語句 (選填:能/不能)改寫成elif "a"<=ch<="z"。 (2)為實現題目所述功能,請為下面劃線處填寫合適的代碼。file=open("source.txt","r",encoding="utf8")context=" "line=file.readline()while line: context+=line.strip()+" " line=file.readline() ① words=word=" "for i in range(num):ch=context[i]if "A"<=ch<="Z": ch=chr(ord(ch)+32)if "a"<=ch<="z": word+=chelif len(word)>0: if word in words: ② else: words[word]=1 word=" "maxcount=0maxword=[]for key in words: if ③ : maxcount=words[key] maxword=[key]elif words[key]==maxcount: maxword.append(key)print(maxword,maxcount)16.(2024屆百校起點調研測試,13)某貨品倉庫最多存儲m件貨物,只能從左右兩側取出,現要在移動其他貨物次數盡可能少的情況下取出一件某類貨物,取出后,其他貨物按照原有順序重新存入,貨物間不留空隙。比如:倉庫存儲情況列表a=["0","A","A","B","B","A","0","0","0"],其中"0"表示空位,"A","B"表示位置上貨物種類,現需從中取出一件B貨物,則應從右側取出,取完后,倉庫存儲列表更新為a=["0","A","A","B","A","0","0","0","0"]。(1)若要在上述實例中,再取出一件B貨物,則應從 (選填:左側/右側)取出。 (2)實現上述功能的部分Python程序如下,請在劃線處填入合適的代碼。#讀取倉庫存儲情況列表a,最多存儲件數m,代碼略kind=input("請輸入貨物:")left=right=0 #left記錄從左側取出此貨物時需移動其他物品的次數,right記錄從右側取出此貨物時需移動其他物品的次數i=0;j=m-1t=[0,0] #t表示是否找到此貨物while i<=j and t!=[1,1]: if ① : i=i+1elif a[i]!=kind: left+=1 i=i+1else: t[0]=1if a[j]=="0": j=j-1elif a[j]!=kind: ② j=j-1else: t[1]=1if left>right: for k in range(j,m-1): a[k]=a[k+1]a[m-1]="0"else: for k in range(i,0,-1): ③ a[0]="0"print(a)17.(2024屆發展共同體聯考,13)檢查數學表達式中的括號是否配對是計算機進行數學計算的重要環節。括號序列“()()”中的“(”與“)”是配對的,而序列“())(”中的括號則是不配對的。對于不配對的序列,可以將“(”修改為“)”,或者將“)”修改為“(”來實現配對。下圖是括號序列“())(()”通過不同的修改方案使其配對所需要的修改次數,最少修改次數為2。請回答下列問題:(1)若括號序列為“())))())”,最少需要修改 次才能使得序列中的括號配對。 (2)編寫程序,計算修改括號序列使其配對的最少次數。部分Python程序如下,請在劃線處填入合適的代碼。s=input() #輸入括號序列,序列中僅包含“(” “)”兩種字符,且長度為偶數x=0ans=0for i in range(len(s)):if s[i]=='(': ① elif s[i]==')' and x>=1: x-=1elif s[i]==')' and ② : ans+=1;x+=1ans+= ③ print(ans)18.(2024屆三校聯考,17)有一小塊礦石,質量不超過200g,現用托盤天平來稱重,已知砝碼規格有50g,20g,10g,5g,2g,1g,共6種,每種規格的砝碼數量均滿足需求,游碼置于標尺零刻度位置且無需撥動,將該礦石放至托盤天平左盤,不斷往右盤加砝碼(注:先大后小),直至平衡。根據輸入的礦石質量(注:只考慮正整數),輸出平衡時所需的各規格砝碼數量。該程序運行的部分界面如下圖所示,請在程序劃線處填入合適的代碼。ore=int(input("請輸入礦石質量:"))weights=[50,20,10,5,2,1] #砝碼規格num=[0] * len(weights) #初始化所需的各規格砝碼數量res= ① i=0while ore > 0: num[i]=ore // weights[i] ② i+=1for i in range(len(num)): if ③ : res=res+ str(weights[i])+ "g:"+ str(num[i])+ "個;"print(res[:-1])19.(2023臺州八校聯考,15)近期學校大力宣傳信息安全,小張同學想利用近期學習的數據加密知識,對同班同學的密碼進行加密,加密規則如下:①大小寫轉換:將明文中的大寫字母改為小寫字母。②置換加密:根據輸入的置換密碼,將字符串中的字母和數字逐個加上置換密碼中的對應數字循環左移 ,置換密碼可以循環使用。如原文為“hello2023”,置換密鑰為“526”,則加密為“ccfgm6507”。(明文字符h、e、l、l、o、2、0、2、3分別往左移5、2、6、5、2、6、5、2、6位)。③除字母、數字以外的字符不變。(1)若輸入的明文為:123Bus,置換密碼為:4301,則輸出的密文為: 。 在程序劃線處填入合適的代碼:(2)大小寫的轉換。def change(ch): ch=chr( ) return ch(3)置換加密。def encypt(encode,key): q=[] result=" " for x in key: q.append(int(x))#將密鑰逐個轉為數值,并放到 q 中 head=0 for ch in encode: if "A"<=ch<="Z": ch=change(ch) if "a"<=ch<="z": ch=chr((ord(ch)-97-q[head])%26+97) elif "0"<=ch<="9": ch= ① head= ② result+=ch return result(4)主程序。mw=input("請輸入明文:")key=input("請輸入置換密鑰:")ss=encypt( ) print("密文為:"+ss)20.(2022“七彩陽光”聯盟期中,16)某閱卷系統設計如下:讀取學生答案文件后和標準答案進行對照并判分,題型分為單選、多選和填空。單選閱卷規則:和標準答案一致得全部分數,錯選或不選不給分。多選閱卷規則:和標準答案一致得全部分數,漏選給一半分數,錯選或不選不給分。填空閱卷規則:標準答案表中允許有多種答案存在。學生的答案在標準答案表中存在,得全部分數,不存在或未填不給分。例如“學生答案.txt”內容如下: 張三|A|D|AC|AD|字符串| 李四|A|D|ACD|A|string|i>=0標準答案:題號 1 2 3 4 5 6題型 單選 單選 多選 多選 填空 填空答案 A D ACD AD 字符串或 string i==0或 i>=0分值 2 2 2 2 2 2程序執行結果: 張三成績:9分 李四成績:11分(1)如果學生的答案數據為'王五|A|C|AD|ACD|string|i=0',則輸出的結果是 。 (2)請在橫線處填入合適的代碼。def dx(s1,s2,n): #對多選題判分flag=Truefor i in s1:if ① : flag=False breakif s1==s2: return nelif ② : return 0else: return n/2f=open('學生答案.txt')line=f.readline()#按行讀取學生答案.txt文件bzda=['單選','A',2,'單選','D',2,'多選','ACD',2,'多選', 'AD',2,'填空',['字符串','string'],2,'填空',['i==0', 'i>=0'],2]while line: studa=line.split('|') #將字符串以'│'為間隔分割成多個字符串組成的列表zf=0for i in range(len(studa)-1): p=3*i if bzda[p]=='單選': #對單選題判分 if studa[i+1]==bzda[p+1]: zf=zf+bzda[p+2] elif bzda[p]=='多選': #對多選題判分 zf= ③ else:if studa[i+1]!=' ' and studa[i+1] in bzda[p+1]: zf=zf+bzda[p+2]print(studa[0],'成績:', zf,'分')line=f.readline() #讀取下一行f.close()21.(2022寧波三鋒聯盟期中,16)某程序功能如下:輸入n,生成n*n 的矩陣,存于列表a,內容為1至9 的隨機整數。再對以(x0,y0)和(x1,y1)為對角頂點的矩形區域中的數據進行水平翻轉,并將變換后的二維數組以矩陣形式輸出。再輸入小于n的四個數字(如a, b, c, d,四者關系必須滿足a(1)以上圖中的矩陣為例,如果輸入左上角+右下角的坐標為:2,3,7,5。水平翻轉后,則元素a[3][4]的值在新數組保存在元素a[ ][ ](填寫下標)中。 (2)代碼如下,請完成填空。#生成n*n 的矩陣import randomn=int(input('輸入n,產生n*n的矩陣:'))a=[[random.randint(1,9)for i in range(n)] for j in range(n)]for i in a: print(i)print()x,y=[],[]xy=input("請輸入左上角+右下角坐標:")#輸入左上角坐標+右下角坐標,用逗號分隔xy=xy+","c,j=0,0for i in range(len(xy)):if xy[i]==" ,":if ① : x.append(int(xy[j:i]))else: y.append(int(xy[j:i])) ② c=c+1for i in range(y[0],y[1]+1,1): for j in range(x[0],(x[0]+x[1])//2+1,1): a[i][j],a[i][ ③ ]=a[i][ ③ ],a[i][j] for i in range(len(a)): print(a[i])22.(2022衢溫“5+1”聯盟期中,18)某信息僅包含大寫字母,字符數不超過n*n (n*n為密鑰矩陣規模),加密過程如下:圖a字母 A B C D E F G H I編碼值 1 2 3 4 5 6 7 8 9字母 J K L M N O P Q R編碼值 10 11 12 13 14 15 16 17 18字母 S T U V W X Y Z編碼值 19 20 21 22 23 24 25 26圖b根據上述加密算法編寫解密程序。程序在啟動時讀取密鑰矩陣存入列表a中,根據程序提示,輸入密文,然后顯示明文。運行界面如圖c所示。請輸入密文:2,1,6,2,10,3,12,4,10,5,原文為:ABCDE圖c(1)輸入的密文是“8,1,23,2,17,3,33,4,”,則原文是 (按圖a中的密鑰矩陣)。 (2)實現上述算法的Python程序如下,請在劃線處填入合適的代碼。def getmm(x, n): col=(x-1)%nrow=(x-1)//ngetmm=a[col*n+row]if row % 2==1: getmm= ① return getmmn=3#存儲密文數據,偶數位存儲加密值,奇數位存儲該數據在原文中的位置#生成規模為n*n的密鑰矩陣存入列表a中mw=[]a=[]for i in range (n*n):a.append(i+1)p=input("請輸入密文:") #2,1,6,2,10,3,12,4,10,5,t=0k=0for i in range(len(p)):c=p[i]if c!=",":t=t*10+int(c)else: ② mw.append(t)t=0yw=[]for i in range(k//2): #對密文解密,結果存入列表yw中 yw.append(mw[2*i]-getmm(mw[2*i+1],n))s=" "for i in range(k//2):s=s+ ③ #轉換為字母輸出 print("原文為:" ,end=" ")print(s)23.(2022浙北G2聯盟期中,17)求字符環上的最長公共字符串:將字符串首尾相接后可以得到一個字符環,圖a和圖b分別為由字符串“sunlight s”和“sunshine s”首尾相接后得到的環,它們的最長的公共字符串為“ ssun”,長度為5。 請輸入第一個字符環:sunlight s請輸入第二個字符環:sunshine s兩字符環的最長公共子串為: ssun;長度為:5圖c編寫Python程序,實現如下功能:輸入兩個字符環,輸出其最長公共子串和長度。程序運行界面如圖c所示。Python程序如下,請在劃線處填入合適的代碼。s1=input("請輸入第一個字符環:")s2=input("請輸入第二個字符環:")len1=len(s1)len2=len(s2)minlen=len1if len2 (1) common=" "cl=0for i in range(len1): for j in range(len2):temp=0;itemp=i;jtemp=jwhile s1[itemp]==s2[jtemp] and temp temp+=1itemp= (2) jtemp= (3) if temp>cl: cl=tempif i<=itemp: common=s1[i:itemp]else: common= (4) print("兩字符環的最長公共子串為:"+common+";長度為: ",cl)24.(2023十校聯盟聯考,16)某字符串僅由大寫字母組成,其加密方法描述如下:①將待加密字符依次轉換為數字,“A”對應0,“B”對應1,以此類推;②將轉換后的數字按列優先存儲的方式,存入n*n的矩陣中,空缺部分用-1補全;③值變換:將矩陣中每一行除-1外的數據增加k,若增加后的值超過25,則重新從0開始循環;④位置變換:將矩陣中每一行的數據向左循環移動k位;⑤按行優先依次讀取矩陣中的數字;⑥將0~25按字母表順序轉換為字母,-1用“#”代替,輸出加密后的字符串。例如,明文=“ABCDXYZ”,n=3,k=2時,加密過程如下:(1)若n=2,k=1,密文為“QA#J”,則明文為 。 (2)實現上述功能的加密程序如下,請在劃線處填入合適的代碼。(3)程序加框處代碼有錯,請改正。def yw(array,k): for i in range(k):temp=array[0]for j in range(0,len(array)-1): ① array[-1]=temps=input("請輸入明文:")n=int(input("n="))k=int(input("k="))a=[[-1 for i in range(n)] for i in range(n)]for i in range(len(s)): if "A"<=s[i]<="Z": t=ord(s[i])-ord("A")x=i%ny=i//na[y][x]=t+knews=" "for i in range(n): yw(a[i],k)for j in range(n): if a[i][j]==-1: news+="#" else: ② print(news)專題二 算法與程序基礎考點過關練考點一 算法的概念及描述考點二 算法的控制結構1.(2024屆杭州質量檢測,7)某算法的部分流程如圖所示,執行這部分流程,若輸入i的值為序列[2,3,4,5]中的隨機數,則下列說法正確的是( )A.變量c的最大值為11B.“a>0 ”至少執行5次C.程序結束時變量a一定等于0D.只能使用while語句實現該循環結構答案 B 2.關于算法的重要特征,下列說法錯誤的是( )A.有窮性:算法必須能在執行有限個步驟之后終止B.確定性:算法中的每一次運算都既有明確的定義,也可具有二義性C.輸入項:一個算法有0個或多個輸入,以刻畫運算對象的初始情況,所謂0個輸入是指算法本身給出了初始條件;輸出項:算法一定要有輸出D.可行性:算法中執行的任何計算都可以在有限時間內完成(也稱為有效性)答案 B 3.(2022精誠聯盟聯考,7)某算法流程圖如圖所示,已知randint (0, 10)函數可以產生閉區間[0, 10]內的隨機整數,執行完該流程圖后,輸出結果可能是( )A.6 6 6 6 6B.10 12 16 18 22C.0 2 4 5 8D.12 8 10 16 20答案 A 4.(2023海寧適應性考試,7 )某算法的部分流程圖如圖所示,若用Python語言描述,則下列選項正確的是( )A.res=1;a=2for n in range(6,0,-2): if n%2==1: res*=a else: a*=a n//=2B.res=1;a=2;n=6while n>0: if n%2==1: res*=a else: a*=a n//=2C.res=1;a=2for n in range(6,0,-2): if n%2=1: res*=a a*=a n//=2print(res)D.res=1;a=2;n=6while n>0: if n%2==1: res*=a a*=a n//=2print(res)答案 D 5.(2023東陽模擬,7)某算法的部分流程圖如圖所示。執行這部分流程,若輸入n的值為55,則輸出s的值為( )A.110111 B.000100C.001000 D.111011答案 C 6.(2023金麗衢聯考,7 )某算法的部分流程圖如圖所示,執行這部分流程圖,若輸入的值依次為7, 20,8, 15, 10, 40, -1,則輸出結果為( )A.4,40 B.3,10C.1,20 D.3,15答案 D 考點三 用算法解決問題的一般過程考點四 用計算機編程解決問題的一般過程1.使用算法解決實際問題時,首先應該做的是( )A.設計算法 B.抽象與建模C.編寫程序 D.描述算法答案 B 2.任何一個算法都要使用的控制結構是( )A.循環結構 B.樹型結構C.分支結構 D.順序結構答案 D 3.要編程判斷一個正整數是不是素數(質數),最適合使用的控制結構是( )A.順序結構 B.分支結構C.選擇結構 D.循環結構答案 D 4.小王想設計一個文件加密的程序,為此她制訂了如下的工作過程,你認為最恰當的是( )A.設計算法、編寫程序代碼、調試程序、得到答案B.分析問題、編寫程序代碼、運行程序、得到答案C.分析問題、設計算法、編寫程序代碼、調試運行D.分析問題、設計程序、編寫程序代碼、運行程序答案 C 5.解決問題的一般過程中,需要先分析問題,對問題進行抽象與建模。以下不屬于分析問題階段的是( )A.查找與問題相關的資料B.尋找已知與未知的聯系C.明確問題所涉及的相關知識D.設計問題求解方案答案 D 6.(2023舟山期末,7)下列關于算法的說法正確的是( )A.算法解決問題的一般過程依次為“設計算法、抽象與建模、描述算法”B.數據、運算和控制轉移是算法三大要素C.任何算法都必須要有至少一個輸入數據和一個輸出數據D.同一種算法只能用一種方法表示答案 B 考點五 Python語言程序設計考點六 簡單算法及其程序實現1.(2023余姚期中,9)若 x 是整型變量,下列選項中與表達式 not(x>=1 and x<5)等價的是( )A.x<1 and x>5 B.not x>=1 or x<5C.x<1 and x<5 D.x<1 or x>=5答案 D 2.(2023杭州S9聯盟期中,5)已知字典 dic={False: 0, True: 1},執行語句 print(dic["hi" in "height" or "3" > "21"])后的結果是( )A.False B.0C.True D.1答案 D 3.(2023杭州“六縣九校”期中,11)某Python程序如下:d={"A":1,"B":2,"C":3,"D":4,"E":5}a=d["E"]b=d["D"]c=d["B"]s=a+b+cprint(s)程序運行后,輸出的結果是( )A.8 B.9 C.10 D.11答案 D 4.(2023寧波期末,10)某停車場的收費標準為“30分鐘內(含)免費,3小時內(含)5元,超過3小時每增加1小時加收1元,停車不足1小時的按1小時計算。”已知停車時長為t分鐘,則下列Python程序段中不能正確計算停車費m的是( )A.if t<=30: m=0elif t<=3*60: m=5else: m=5+(t-3*60+59)//60B.if t>30: m=5 if t>3*60: m=5+(t-3*60+59)//60else: m=0C.m=5if t>3*60: m=5+(t-3*60+59)//60elif t<=30: m=0D.m=0if t>3*60: m=5+(t-3*60+59)//60if t>30: m=5答案 D 5.(2023杭州“六縣九校”期中,12)已知d1={"地點":["杭州","金華","溫州"],"牌號":["a","b","c"],"編號":[1,2,3]},s="VALUE",下列表達式值與其他三項不相同的是( )A.ord(s[1])+3//10*10B.len(d1["地點"][0])**6+1C.74-d1["編號"][2]**2D.int((ord(d1["牌號"][1])-32)/10)*10答案 D 6.(2023余姚期中,12)有下面一段程序:a=[9,5,2,3,0,-9,5,0,7,-10]s,i=0,0while a[i]!=0 and i < len(a): s+=1 i+=1運行該程序后 s 的值為( )A.4 B.5 C.8 D.10答案 A 專題綜合練題組一1.(2021浙江6月選考,8,2分)某算法的部分流程圖如圖所示,執行這部分流程,若輸入n的值為20,則輸出a,b的值分別是( )A.12,10 B.10,9C.9,15 D.9,10答案 D 2.(2020浙江7月選考,8,2分)某算法的部分流程圖如圖所示。執行這部分流程,若輸入a的值為36,則輸出c的值為( )A.2 B.3 C.4 D.5答案 C 3.(2020浙江1月選考,8,2分)某算法的部分流程圖如圖所示。執行這部分流程,若輸入a的值為22,則輸出b的值為( )A.0 B.1 C.2 D.16答案 C 4.(2023浙江1月選考,7,2分)某算法的部分流程圖如圖所示,執行這部分流程,若輸入x的值依次為10,7,8,12,0,則輸出k的值是( )A.2 B.3 C.4 D.5答案 B 5.(2024屆杭州S9聯盟期中,6)下列語句的功能與其他三項不一樣的是( )A.if a>b: flag=Trueflag=False B.flag=Falseif a>b: flag=TrueC.if a<=b: flag=Falseelse: flag=True D.flag=a>b答案 A 6.(2024屆嘉興基測,8)下列Python表達式運算結果為True的是( )A.3**2<8 and 2%5>1B.25//4>4 and 3/2<1C.not 7<8 or 9>6+2D.not(2**3<9 or 6%4<2)答案 C 7.(2024屆七彩聯盟聯考,12)有如下Python程序:import randoms=input()k=random.randint(1,len(s)-1)i=0while k>0 and i if s[i]>s[i+1]: k-=1 s=s[:i]+s[i+1:] if i>0: i-=1 else: i+=1if k>0: s=s[: len(s)-k]若輸入的s值為"8561324",則執行該程序,輸出s的值不可能為( )A.51324 B.124 C.132 D.1324答案 C 8.(2024屆嘉興基測,9)有如下Python程序段:s="A-b2c";ch=" "list=[4,3,1,5,2]for i in range(len(s)):if "A"<=s[i]<="Z": ch=ch+chr(ord(s[i])+list[i])elif "a"<=s[i]<="z": ch=ch+chr(ord(s[i])-list[i])else: ch=s[i]+chprint(ch)該程序運行后,輸出的結果是( )A.2-Eaa B.2-ECEC.E-c2e D.E-a2b答案 A 9.(2024屆名校協作體聯考,12)有如下Python程序段:import randoma=[]for i in range(6):a.append(random.randint(1,10))for i in range(5):if i%2==0 and a[i] a[i],a[i+1]=a[i+1],a[i]else: a[i]-=1print(a)運行該程序后,輸出結果不可能是( )A.[7,3,3,4,9,4] B.[8,8,10,5,7,8]C.[9,4,9,4,8,7] D.[7,2,9,7,4,5]答案 A 10.(2024屆強基聯盟統測,12)列表a有n(n>=2)個正整數,相鄰兩數的差值為1,0或-1。求相鄰兩數具有相同差值的連續子序列中,子序列元素和的最大值。實現該功能的程序段如下,加框處應填寫的正確代碼是( )state=a[1]-a[0]maxv=t1=t2=a[1]+a[0]for i in range(2,n):f=a[i]-a[i-1] print(maxv)A.if state==f: t1+=a[i]t2=t1else: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)if t2>maxv:maxv=t2B.if state==f: t1+=a[i]t2=t1elif state !=f: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)elif t2>maxv: maxv=t2C.if state==f: t1+=a[i]t2=t1if state !=f: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)elif t2>maxv: maxv=t2D.if state==f: t1+=a[i]t2=t1else: state=ft2=t1t1=a[i-1]+a[i]t2=max(t1,t2)if t2>maxv: maxv=t2答案 D 11.(2024屆強基聯盟統測,9)有如下程序段:a=[30,10,20,11,12,50]d=[0]*6 ; max=0 ; n=len(a)for i in range(1,n):for j in range(i):if a[j] d[i]+=1if d[i]>max: max=d[i]執行程序后,變量max的值是( )A.2 B.3 C.4 D.5答案 D 12.(2024屆杭州質量檢測,10)列表d有n個整型元素,輸出列表中最長連續遞增序列的長度。小明編寫的 Python程序段如下:k=1;lmax=1;n=len(d)for i in range(1,n): if d[i]>d[i-1]: k+=1 else: if k>lmax: lmax=k k=1print(lmax)該程序段在某些情況下無法得到符合題意的結果,下列4組數據中能測試出這一問題的是( )A.[1,4,5,1,2] B.[1,2,3,4,1]C.[1,5,1,2,3] D.[5,4,3,2,1]答案 C 13.(2023寧波期中,8)已知字典d={'名稱':'orange','數量':7,'售價':6.7,'利潤':6.78},則下列Python表達式中值最大的是( )A.len(d['名稱']) B.d['數量']C.round(d['利潤'],1) D.int(d['售價'])答案 B 14.(2023衢州質量檢測,11)有如下Python程序段:def sm(a): if len(a)==1: return a[0] else: return a[0]+sm(a[1:])a=[7,8,9,1,5,6]print(sm(a))程序運行后,函數sm被調用的次數是( )A.5 B.6 C.7 D.12答案 B 15.(2022浙江7月學考,10,3分)某Python程序如下:p="Tel-114"c=" "for ch in p:if ch>="0" and ch<="9": c+=str(9-int(ch))elif ch>="a" and ch<="z":c+=chr(ord(ch)- ord("a")+ord("A"))else: c+=chprint(c)程序運行后,輸出的結果是( )A.tEL-885 B.tEL-114C.TEL-114 D.TEL-885答案 D 16.(2023三校聯考,10)有如下Python 程序段:a=[]b=[1,5,4,1,5]c={1:3,2:4,3:5,4:1,5:2}for i in b: if i not in a: a.append(c[i])print(a)運行該程序段后,列表 a 的值是( )A.[1,5,4] B.[3,2,1]C.[3,2,1,2] D.[3,2,1,3]答案 C 17.(2023嘉興基測,12)有如下Python程序段:import randomnums=[0]*6for i in range(6): nums[i]=random.randint(1,10)i=0j=len(nums)-1while i if nums[i] %2==0 and nums[j]%2==1: nums[i],nums[j]=nums[j],nums [i]elif nums[i] %2==1: i=i+1elif nums[j] %2==0: j=j-1print(nums)執行該程序段后,下列輸出結果中不可能的是( )A.[1,3,1,5,1,7]B.[1,4,3,6,5,8]C.[1,3,5,7,9,10]D.[6,4,2,8,2,10]答案 B 18.(2023余姚期中,17)學考成績與學考等級折算方法如下:“A”等折算成10分,“B”等折算成9分,“C”等折算成7分,“D”等折算成4分。現編寫一個能實現將學考等級折算成相應分數的Python程序,程序運行結果如圖所示:請輸入各門功課的學考等級:ABABACBAAA你的學考成績折算為:94請回答下列問題:(1)若輸入"aaabbaac",該程序 (填:能/不能) 計算出相應的折算成績。 (2)請在程序劃線處填上合適的代碼。level=input("請輸入各門功課的學考等級:")dic={"A":10,"B":9,"C":7,"D":4}score=0for i in range(len(level)): score=score+ ① print("你的學考成績折算為:"+ ② ) 答案 (1)不能 (2)①dic[level[i]] ②str(score)19.(2022浙江7月學考,12,10分)查找與替換。從鍵盤上分別輸入要查找和替換的字符串,對文本文件進行查找與替換,替換后保存到新的文本文件中。完成查找與替換功能的思路是:首先可從待檢索文本文件“in.txt”逐行讀取文本內容到列表text,然后從鍵盤上輸入查找的字符串key和替換的字符串new,對列表text中的元素逐個進行查找并替換,結果保存到列表result,最后將result 寫入文件“out. txt”。(1)主程序。text=readfile("in.txt") #讀入文件key=input("請輸入要查找的字符串:")new=input("請輸入要替換的字符串:")result=[]for line in text:newline=replace(key, new, line)#替換result.append(newline)#添加到列表writefile("out.txt",result)#寫入文件該程序段采用的算法是 (單選,填字母:A.解析算法 / B.枚舉算法)。 (2)讀寫文本文件。如下的readfile函數,逐行讀取文本文件數據存入列表并返回。請在劃線處填入合適的代碼。def readfile(filename):f=open(filename,encoding="utf-8")#打開文件text=[]line=f.readline()#從文件中讀取一行while line:text.append(line)#添加到列表line=f.readline()f.close()return def writefile(filename,text):#將text寫入filename文件,代碼略(3)查找字符串。如下的findstr函數,在字符串line中從begin位置開始查找key在字符串line中的位置,請在劃線處填入合適的代碼。def findstr(key,line,begin):for i in range(begin, len(line) - len(key)+ 1): if : return ireturn -1(4)替換字符串。如下的replace函數,在字符串line中檢索所有的字符串key并替換為new,請在劃線處填入合適的代碼。def replace(key,new,line):begin=0while begin < len(line) - len(key)+ 1: pos=findstr(key,line,begin)if pos==-1: else:line=line[0:pos]+ new+ line[pos+ len(key) :len(line)]begin=pos+ len(key) return line答案 (1)B (2)text (3)line[i:i+len(key)]==key (4)break或其他等價答案20.(2023浙江6月選考,13,7分)某倉庫有一排連續相鄰的貨位,編號依次為0~n-1,用于放置A、B兩種類型的箱子,A型箱子占2個相鄰貨位,B型箱子占1個貨位。編寫程序,根據已完成的放置或搬離操作,輸出空貨位數及還可以放置A型箱子的最多數量(不移動已放置的箱子)。請回答下列問題:(1)若n為10,開始時貨位全空,經過如表所示的放置或搬離操作后,不移動已放置箱子的情況下,還可放置A型箱子的最多數量為 個。 箱子類型 操作類型 貨位編號B 放置 5A 放置 2,3B 放置 0A 放置 7,8A 搬離 2,3(2)實現上述功能的部分Python程序如下,請在劃線處填入合適的代碼。#讀取貨位總數,存入n,代碼略。cnt1=nlst=[0]*n#貨位狀態,0表示對應的貨位為空while True:#讀取本次已操作的數據:箱子類型、操作類型、貨位編號起始值,存入t、d和s,代碼略 if t=='A': w=2 ① : w=1else: #t不是'A'或'B'時退出循環 breakif d=='P': #d為P時表示放置,否則表示搬離 ② else: cnt1+=wlst[s]=1-lst[s]if t=='A': lst[s+1]=1-lst[s+1]i, cnt2=0,0while i< n-1: if lst[i]==0 and lst[i+1]==0: ③ cnt2+=1 i+=1print('當前空貨位數:',cnt1,'還可放置A型箱子的最多數量:',cnt2)答案 (1)2 (2)①elif t=='B' 或elif t=="B"或elif (t=='B') ②cnt1-=w 或cnt1=cnt1-w ③i+=1 或i=i+121.(2022“9+1”聯盟期中,14)蒙特卡羅方法是一類基于概率,通過使用隨機數來解決某些計算問題的方法。如圖所示,在平面上有k 個圓,可以使用蒙特卡羅方法求這些圓所占的近似總面積。(注:重疊部分僅計算一次,不重復計算)具體算法如下:(1)建立一個直角坐標系,測得每個圓的坐標位置和半徑;(2)用一個矩形包圍所有的k個圓,設該矩形的長、寬分別為m和n;(3)在矩形范圍內產生v個隨機點;(4)統計落在圓內或圓弧上的隨機點的數量,并存入變量cnt;(5)根據cnt占所有隨機點的比例,計算所有圓的近似總面積S=矩形面積×(cnt÷v)。請在劃線處填入合適的代碼。提示:平面上兩個坐標點(x1,y1)和(x2,y2)的距離=。from math import sqrtimport random#測量矩形的長度、寬度、圓的個數,存入變量m、n、k,代碼略v=int(input()) #讀入隨機點的數量,數量越多,精度越高cir=[]for i in range(k):#依次測量每個圓的圓心(x,y)及半徑r,存入cir列表 cir.append([x,y,r])def dis(x1,y1,x2,y2): #計算兩個坐標點的距離,參考題目中給出的公式 d= ① return ddef check(x,y): flag=False for i in range(k): if dis(x,y,cir[i][0],cir[i][1])<=cir[i][2]:#判斷點是否在圓內或圓上 flag=Truebreak ② cnt=0for i in range(v): x=random.uniform(0,n) #產生當前隨機點的x坐標y=random.uniform(0,m) #產生當前隨機點的y坐標if check(x,y): cnt+=1 ③ print(round(s,2)) #輸出近似總面積,四舍五入保留兩位小數答案 ①sqrt((x1-x2)**2+(y1-y2)**2)②return flag ③s=n*m*(cnt/v)22.(2023學軍中學月考,16)掃描算法是一種電梯的調度算法(非實際操作),電梯在最底層(1樓)和最頂層(20樓)之間連續往返掃描并運行,在運行過程中優先處理與當前電梯運行方向相同的請求,比如:當前電梯在3樓,方向為向上,此時有3個人請求使用電梯:7樓去16樓、2樓去9樓、6樓去1樓,則電梯先向上運行,依次在7樓和16樓停靠;然后再向下運行,依次在6樓和1樓停靠;最后再向上運行,依次在2樓和9樓停靠。小明編寫程序實現這個調度算法,運行界面如圖,請回答下列問題。(1)若電梯當前在3樓,方向為向上,收到的請求是:7樓去16樓、6樓去1樓、2樓去9樓、14樓去1樓、10樓去15樓,則第一趟向上運行依次停靠的樓層是 (按停靠順序填寫數字)。 (2)實現算法的Python程序如下,請在劃線處填入合適的代碼。def scan(now,d): #scan函數的功能:從當前樓層開始,按當前運行方向掃描一趟 for i in range(len(ask)): tmp=(d==1 and ask[i][0] >=now) or ( ① ) if ask[i][2]==d and not flag[i] and tmp: stop[ask[i][0]]=1stop[ask[i][1]]=1flag[i]=Trueask=[[7,16,0],[6,1,0],[2,9,0],[14,1,0],[10,15,0]]flag=[False for i in range(len(ask))]direct={1:"向上",-1:"向下"}now=3d=1print("當前樓層:",now,"方向:",direct[d])for i in range(len(ask)): ② if t>0: ask[i][2]=1 # t表示該請求的電梯運行方向elif t<0: ask[i][2]=-1 #t表示該請求的電梯運行方向else: flag[i]=Truewhile False in flag: stop=[0]* 21 #標記1~20各樓層是否停靠scan(now,d)print("n", direct[d], ",停靠樓層: ", end=" ")if d==1: st=1ed=21 now_next=20else:st=20ed=0now_next=1for i in range(st, ed, d): if stop[i]==1: print(i, end=" ")now=now_next ③ 答案 (1)7,10,15,16 (2)①d==-1 and ask[i][0]<=now ②t=ask[i][1]-ask[i][0] ③d=-d題組二1.(2024浙江1月選考,10,2分)某算法的部分流程圖如圖所示,若n的值為7,key的值為78,數組元素a[0]至a[n-1]依次存放7,12,24,36,55,78,83,執行這部分流程后,輸出c的值為 ( )A.0 B.1 C.2 D.3答案 B 2.(2023浙江7月學考,6,3分)用算法流程圖描述“消費積分累計100分,升級為V1會員;消費積分累計180分,升級為V2會員”的問題,用t表示顧客的消費積分,下列選項不正確的是( )答案 D 3.(2023桐鄉月考,16) 某算法的部分流程圖如圖所示,若列表a的值為[162,184,171,166,177,179],key的值為170,執行這部分流程后,f、k的值分別為( )A.false,0 B.true,1C.true,2 D.true,3答案 C 4.(2023十校聯盟聯考,6)某算法的部分流程圖如圖所示。執行這部分流程,若輸入s的值為“0152234512”,則輸出結果為( )A.3 B.12 C.015 D.22345答案 B 5.(2024屆三校聯考,8)已知變量s="2021china",則表達式s[-1]+s[2]*2的值是( )A."a4" B."a22" C."n22" D."a0"答案 B 6.(2023溫州適應性考試,7)已知列表 a=[2,3,4,5],要將列表a更新為[1,2,3,4,5],則下列可實現該功能的操作是( )A.a="1"+a B.a.append(1)C.a=[1]+a D.a=1+a答案 C 7.(2022浙江7月學考,6,3分)用Python算法控制結構描述“您所在街道25分鐘后小雨,50分鐘后雨停”,設t為距離天氣預報發布時間的間隔(單位:分鐘),下列選項正確的是( )A.if t>50: print("雨停")elif t>25: print("小雨")B.if t>50: print("雨停")else: print("小雨")C.if t>25 and t<=50: print("小雨")else: print("雨停")D.if t>25: print("小雨")elif t>50: print("雨停")答案 A 8.(2023杭州地區重點中學期中,9)左右對稱的字符串稱回文串。若要判斷字符串s是不是回文串,可以先找到s的中間位置mid=len(s)//2,再采用切片操作取出s的左半部分left=s[0:mid],然后取出s的右半部分并反轉,存儲在變量right中,若left與right相等,則為回文串。則下列表達式能正確表達變量right值的是( )A.s[mid::][::-1]B.s[mid+1::][::-1]C.s[len(s)-1:mid:-1]D.s[-1:-mid-1:-1]答案 D 9.(2023浙江7月學考,10,3分)某Python程序如下:p=")!@#$%^&*("c="cra2edu"t=" "for i in range(len(c)//2+1): if i%2==0: t+=c[len(c)-i-1] elif c[i]>="0" and c[i]<="9": t+=p[int(c[i])] else: t+=c[i]print(t)程序運行后,輸出的結果是( )A.ude@ B.cda# C.ure@ D.arc#答案 C 10.(2024浙江1月選考,11,2分)若字符串s的值為"abcde",執行如下程序段后,變量res的值不可能是( )from random import randintres=" "i,j=0,len(s)-1while i=i: if randint(0,1)==0: #randint(0,1)隨機生成0或1 res+=s[i] i+=1 else: res+=s[j] j-=1A."abced" B."aecbd" C."aedbc" D."edcba"答案 B 11.(2023十校聯盟聯考,11)有下列Python程序段:dict={"a":["apple",["abandon","ant"]],"b":["banana","bee","become"],"c":["cat","come"],"d":"down"}s="abcd"cnt=0for i in s: cnt+=len(dict[i])print(cnt)該程序段運行后,輸出結果是( )A.8 B.9 C.11 D.12答案 C 12.(2024屆新陣地聯盟聯考,10)某Python程序如下:n=0for i in range(32): m=i;x=0 while m>0: x+=m%2 m//=2 if x==3: n+=1print(n)程序運行后,輸出的結果是( )A.3 B.5 C.10 D.32答案 C 13.(2023杭州“六縣九校”期中,13)“最強大腦”游戲問題的算法分析:顯示游戲規則,顯示物品以及編號,屏幕停留10秒;隨機出題,給出物品,回答編號;判斷回答是否正確,如果正確,則答對的題數加1。重復以上步驟,直到答完5道題;顯示答對的題數。劃線處應填入的代碼為( )import random;import time;import osprint("你好,現在你有 10 秒鐘的時間記憶下列物品及其編號")things=["蘋果","香蕉","橙子","梨子","獼猴桃","柚子","猴魁","鐵觀音","彩蛋","復活節"]for i in range(10): print(i,":", ① ) #在屏幕上顯示編號及物品名稱 time.sleep(10)#延時 10 秒os.system("cls")#清屏幕,隱去編號及物品n=0#記錄答對的題數,初值為 0t2=random.sample( ② ,5)#隨機抽出 5 個物品 for i in t2:#出 5 題 ans=int(input(i+ "的編號是:")) #輸入編號答題 if i== ③ : n=n+1 #如果回答正確,答對的題數加1print("\n你一共答對了",n,"次") #屏幕顯示答對的題數input("\n按回車鍵結束程序")A.①things[i] ②things③things[ans]B.①things ②things③things[i]C.①things[i] ②things[i]③things[ans]D.①things[ans] ②things[ans]③things[i]答案 A 14.(2024屆七彩聯盟聯考,13)某公路由于長期沒有維修,路上出現了很多個坑。為了盡快填補好這些坑,交通管理部門決定對m處地段采取交通管制。將該公路看成一條直線,坑就是直線上的坐標點,坑所在的路段需要封控管制。例如某管制路段2~4,需封控2、3、4路段。交管部門為了減少管制路段的長度,希望將這n個坑分成m段(一段可以只有一個坑),使得這m段公路的總長度最小。請你根據n個坑的位置(位置已按照從小到大進行排序),計算管制路段最小的總長度。代碼運行效果如圖所示。請回答下列問題:(1)上圖所示的例子中,若將路段數量修改為5,則管制路段總長度為 。 (2)實現上述功能的Python程序如下,請在劃線處填入合適的代碼。m=int(input("路段數量:"))s=input("坑的坐標依次為:").split(',')n=len(s)for i in range(n):s[i]=int(s[i])flag=[False] * (n-1)for i in range(1,m):k=-1for j in range(n-1):if ① : if k=-1 or s[j+1]-s[j]>s[k+1]-s[k]: k=jflag[k]=Trueprint("維修管制的路段依次為:")dis,t=0,0for i in range(n-1):if flag[i]: print(s[t],"~",s[i]) dis+=s[i]-s[t]+1 ② print(s[t],"~",s[n-1])dis= ③ print("管制總長度為" , dis)答案 (1) 22 (2)①not flag[j] ②t=i+1 ③dis+s[n-1]-s[t]+1或其他等效答案15.(2024屆強基聯盟聯考,13)下列Python程序段功能為:統計如圖所示英文小說中英文單詞出現的次數,且不區分大小字母,輸出文章中出現次數最多的英文單詞以及出現次數,如有并列則一并輸出。(1)下列程序代碼中,加框處的語句 (選填:能/不能)改寫成elif "a"<=ch<="z"。 (2)為實現題目所述功能,請為下面劃線處填寫合適的代碼。file=open("source.txt","r",encoding="utf8")context=" "line=file.readline()while line: context+=line.strip()+" " line=file.readline() ① words=word=" "for i in range(num):ch=context[i]if "A"<=ch<="Z": ch=chr(ord(ch)+32)if "a"<=ch<="z": word+=chelif len(word)>0: if word in words: ② else: words[word]=1 word=" "maxcount=0maxword=[]for key in words: if ③ : maxcount=words[key] maxword=[key]elif words[key]==maxcount: maxword.append(key)print(maxword,maxcount)答案 (1)不能 (2)①num=len(context)②words[word]+=1 ③words[key]>maxcount16.(2024屆百校起點調研測試,13)某貨品倉庫最多存儲m件貨物,只能從左右兩側取出,現要在移動其他貨物次數盡可能少的情況下取出一件某類貨物,取出后,其他貨物按照原有順序重新存入,貨物間不留空隙。比如:倉庫存儲情況列表a=["0","A","A","B","B","A","0","0","0"],其中"0"表示空位,"A","B"表示位置上貨物種類,現需從中取出一件B貨物,則應從右側取出,取完后,倉庫存儲列表更新為a=["0","A","A","B","A","0","0","0","0"]。(1)若要在上述實例中,再取出一件B貨物,則應從 (選填:左側/右側)取出。 (2)實現上述功能的部分Python程序如下,請在劃線處填入合適的代碼。#讀取倉庫存儲情況列表a,最多存儲件數m,代碼略kind=input("請輸入貨物:")left=right=0 #left記錄從左側取出此貨物時需移動其他物品的次數,right記錄從右側取出此貨物時需移動其他物品的次數i=0;j=m-1t=[0,0] #t表示是否找到此貨物while i<=j and t!=[1,1]: if ① : i=i+1elif a[i]!=kind: left+=1 i=i+1else: t[0]=1if a[j]=="0": j=j-1elif a[j]!=kind: ② j=j-1else: t[1]=1if left>right: for k in range(j,m-1): a[k]=a[k+1]a[m-1]="0"else: for k in range(i,0,-1): ③ a[0]="0"print(a)答案 (1)右側 (2)①a[i]=="0" ②right+=1 ③a[k]=a[k-1]17.(2024屆發展共同體聯考,13)檢查數學表達式中的括號是否配對是計算機進行數學計算的重要環節。括號序列“()()”中的“(”與“)”是配對的,而序列“())(”中的括號則是不配對的。對于不配對的序列,可以將“(”修改為“)”,或者將“)”修改為“(”來實現配對。下圖是括號序列“())(()”通過不同的修改方案使其配對所需要的修改次數,最少修改次數為2。請回答下列問題:(1)若括號序列為“())))())”,最少需要修改 次才能使得序列中的括號配對。 (2)編寫程序,計算修改括號序列使其配對的最少次數。部分Python程序如下,請在劃線處填入合適的代碼。s=input() #輸入括號序列,序列中僅包含“(” “)”兩種字符,且長度為偶數x=0ans=0for i in range(len(s)):if s[i]=='(': ① elif s[i]==')' and x>=1: x-=1elif s[i]==')' and ② : ans+=1;x+=1ans+= ③ print(ans)答案 (1)2 (2)①x+=1或x=x+1 ②x==0 ③x//218.(2024屆三校聯考,17)有一小塊礦石,質量不超過200g,現用托盤天平來稱重,已知砝碼規格有50g,20g,10g,5g,2g,1g,共6種,每種規格的砝碼數量均滿足需求,游碼置于標尺零刻度位置且無需撥動,將該礦石放至托盤天平左盤,不斷往右盤加砝碼(注:先大后小),直至平衡。根據輸入的礦石質量(注:只考慮正整數),輸出平衡時所需的各規格砝碼數量。該程序運行的部分界面如下圖所示,請在程序劃線處填入合適的代碼。ore=int(input("請輸入礦石質量:"))weights=[50,20,10,5,2,1] #砝碼規格num=[0] * len(weights) #初始化所需的各規格砝碼數量res= ① i=0while ore > 0: num[i]=ore // weights[i] ② i+=1for i in range(len(num)): if ③ : res=res+ str(weights[i])+ "g:"+ str(num[i])+ "個;"print(res[:-1])答案 ①"所需的砝碼:" ②ore=ore-weights[i]*num[i] 或 ore=ore-num[i]*weights[i] 或 ore=ore % weights[i] ③num[i]>0 或 num[i]!=019.(2023臺州八校聯考,15)近期學校大力宣傳信息安全,小張同學想利用近期學習的數據加密知識,對同班同學的密碼進行加密,加密規則如下:①大小寫轉換:將明文中的大寫字母改為小寫字母。②置換加密:根據輸入的置換密碼,將字符串中的字母和數字逐個加上置換密碼中的對應數字循環左移 ,置換密碼可以循環使用。如原文為“hello2023”,置換密鑰為“526”,則加密為“ccfgm6507”。(明文字符h、e、l、l、o、2、0、2、3分別往左移5、2、6、5、2、6、5、2、6位)。③除字母、數字以外的字符不變。(1)若輸入的明文為:123Bus,置換密碼為:4301,則輸出的密文為: 。 在程序劃線處填入合適的代碼:(2)大小寫的轉換。def change(ch): ch=chr( ) return ch(3)置換加密。def encypt(encode,key): q=[] result=" " for x in key: q.append(int(x))#將密鑰逐個轉為數值,并放到 q 中 head=0 for ch in encode: if "A"<=ch<="Z": ch=change(ch) if "a"<=ch<="z": ch=chr((ord(ch)-97-q[head])%26+97) elif "0"<=ch<="9": ch= ① head= ② result+=ch return result(4)主程序。mw=input("請輸入明文:")key=input("請輸入置換密鑰:")ss=encypt( ) print("密文為:"+ss)答案 (1)793aqp (2)ord(ch)+32 (3)①chr((ord(ch)-48-q[head])%10+48) 或者 chr((ord(ch)-ord('0')-q[head])%10+ord('0')) 或者 str((int(ch)-q[head])%10)②(head+1)%len(q)或者(head+1)%len(key) (4)mw,key20.(2022“七彩陽光”聯盟期中,16)某閱卷系統設計如下:讀取學生答案文件后和標準答案進行對照并判分,題型分為單選、多選和填空。單選閱卷規則:和標準答案一致得全部分數,錯選或不選不給分。多選閱卷規則:和標準答案一致得全部分數,漏選給一半分數,錯選或不選不給分。填空閱卷規則:標準答案表中允許有多種答案存在。學生的答案在標準答案表中存在,得全部分數,不存在或未填不給分。例如“學生答案.txt”內容如下: 張三|A|D|AC|AD|字符串| 李四|A|D|ACD|A|string|i>=0標準答案:題號 1 2 3 4 5 6題型 單選 單選 多選 多選 填空 填空答案 A D ACD AD 字符串或 string i==0或 i>=0分值 2 2 2 2 2 2程序執行結果: 張三成績:9分 李四成績:11分(1)如果學生的答案數據為'王五|A|C|AD|ACD|string|i=0',則輸出的結果是 。 (2)請在橫線處填入合適的代碼。def dx(s1,s2,n): #對多選題判分flag=Truefor i in s1:if ① : flag=False breakif s1==s2: return nelif ② : return 0else: return n/2f=open('學生答案.txt')line=f.readline()#按行讀取學生答案.txt文件bzda=['單選','A',2,'單選','D',2,'多選','ACD',2,'多選', 'AD',2,'填空',['字符串','string'],2,'填空',['i==0', 'i>=0'],2]while line: studa=line.split('|') #將字符串以'│'為間隔分割成多個字符串組成的列表zf=0for i in range(len(studa)-1): p=3*i if bzda[p]=='單選': #對單選題判分 if studa[i+1]==bzda[p+1]: zf=zf+bzda[p+2] elif bzda[p]=='多選': #對多選題判分 zf= ③ else:if studa[i+1]!=' ' and studa[i+1] in bzda[p+1]: zf=zf+bzda[p+2]print(studa[0],'成績:', zf,'分')line=f.readline() #讀取下一行f.close()答案 (1)王五成績:5分(2)①i not in s2或not i in s2或i in s2==False②s1==' ' or flag==False③zf+dx(studa[i+1], bzda[p+1], bzda[p+2])或zf+dx(studa[i+1], bzda[3*i+1], bzda[3*i+2])21.(2022寧波三鋒聯盟期中,16)某程序功能如下:輸入n,生成n*n 的矩陣,存于列表a,內容為1至9 的隨機整數。再對以(x0,y0)和(x1,y1)為對角頂點的矩形區域中的數據進行水平翻轉,并將變換后的二維數組以矩陣形式輸出。再輸入小于n的四個數字(如a, b, c, d,四者關系必須滿足a(1)以上圖中的矩陣為例,如果輸入左上角+右下角的坐標為:2,3,7,5。水平翻轉后,則元素a[3][4]的值在新數組保存在元素a[ ][ ](填寫下標)中。 (2)代碼如下,請完成填空。#生成n*n 的矩陣import randomn=int(input('輸入n,產生n*n的矩陣:'))a=[[random.randint(1,9)for i in range(n)] for j in range(n)]for i in a: print(i)print()x,y=[],[]xy=input("請輸入左上角+右下角坐標:")#輸入左上角坐標+右下角坐標,用逗號分隔xy=xy+","c,j=0,0for i in range(len(xy)):if xy[i]==" ,":if ① : x.append(int(xy[j:i]))else: y.append(int(xy[j:i])) ② c=c+1for i in range(y[0],y[1]+1,1): for j in range(x[0],(x[0]+x[1])//2+1,1): a[i][j],a[i][ ③ ]=a[i][ ③ ],a[i][j] for i in range(len(a)): print(a[i])答案 (1)3;5(2)①c%2==0或c%2!=1或其他等價答案②j=i+1 ③x[0]+x[1]-j;x[0]+x[1]-j22.(2022衢溫“5+1”聯盟期中,18)某信息僅包含大寫字母,字符數不超過n*n (n*n為密鑰矩陣規模),加密過程如下:圖a字母 A B C D E F G H I編碼值 1 2 3 4 5 6 7 8 9字母 J K L M N O P Q R編碼值 10 11 12 13 14 15 16 17 18字母 S T U V W X Y Z編碼值 19 20 21 22 23 24 25 26圖b根據上述加密算法編寫解密程序。程序在啟動時讀取密鑰矩陣存入列表a中,根據程序提示,輸入密文,然后顯示明文。運行界面如圖c所示。請輸入密文:2,1,6,2,10,3,12,4,10,5,原文為:ABCDE圖c(1)輸入的密文是“8,1,23,2,17,3,33,4,”,則原文是 (按圖a中的密鑰矩陣)。 (2)實現上述算法的Python程序如下,請在劃線處填入合適的代碼。def getmm(x, n): col=(x-1)%nrow=(x-1)//ngetmm=a[col*n+row]if row % 2==1: getmm= ① return getmmn=3#存儲密文數據,偶數位存儲加密值,奇數位存儲該數據在原文中的位置#生成規模為n*n的密鑰矩陣存入列表a中mw=[]a=[]for i in range (n*n):a.append(i+1)p=input("請輸入密文:") #2,1,6,2,10,3,12,4,10,5,t=0k=0for i in range(len(p)):c=p[i]if c!=",":t=t*10+int(c)else: ② mw.append(t)t=0yw=[]for i in range(k//2): #對密文解密,結果存入列表yw中 yw.append(mw[2*i]-getmm(mw[2*i+1],n))s=" "for i in range(k//2):s=s+ ③ #轉換為字母輸出 print("原文為:" ,end=" ")print(s)答案 (1)GSJY (2)①a[(n-col-1)*n+row] ②k=k+1 ③chr((yw[i])+64)或chr((yw[i])+ord("A")-1)或其他等價答案23.(2022浙北G2聯盟期中,17)求字符環上的最長公共字符串:將字符串首尾相接后可以得到一個字符環,圖a和圖b分別為由字符串“sunlight s”和“sunshine s”首尾相接后得到的環,它們的最長的公共字符串為“ ssun”,長度為5。 請輸入第一個字符環:sunlight s請輸入第二個字符環:sunshine s兩字符環的最長公共子串為: ssun;長度為:5圖c編寫Python程序,實現如下功能:輸入兩個字符環,輸出其最長公共子串和長度。程序運行界面如圖c所示。Python程序如下,請在劃線處填入合適的代碼。s1=input("請輸入第一個字符環:")s2=input("請輸入第二個字符環:")len1=len(s1)len2=len(s2)minlen=len1if len2 (1) common=" "cl=0for i in range(len1): for j in range(len2):temp=0;itemp=i;jtemp=jwhile s1[itemp]==s2[jtemp] and temp temp+=1itemp= (2) jtemp= (3) if temp>cl: cl=tempif i<=itemp: common=s1[i:itemp]else: common= (4) print("兩字符環的最長公共子串為:"+common+";長度為: ",cl)答案 (1)minlen=len2 (2)(itemp+1)%len1(3)(jtemp+1)%len2 (4)s1[i:]+s1[ :itemp]24.(2023十校聯盟聯考,16)某字符串僅由大寫字母組成,其加密方法描述如下:①將待加密字符依次轉換為數字,“A”對應0,“B”對應1,以此類推;②將轉換后的數字按列優先存儲的方式,存入n*n的矩陣中,空缺部分用-1補全;③值變換:將矩陣中每一行除-1外的數據增加k,若增加后的值超過25,則重新從0開始循環;④位置變換:將矩陣中每一行的數據向左循環移動k位;⑤按行優先依次讀取矩陣中的數字;⑥將0~25按字母表順序轉換為字母,-1用“#”代替,輸出加密后的字符串。例如,明文=“ABCDXYZ”,n=3,k=2時,加密過程如下:(1)若n=2,k=1,密文為“QA#J”,則明文為 。 (2)實現上述功能的加密程序如下,請在劃線處填入合適的代碼。(3)程序加框處代碼有錯,請改正。def yw(array,k): for i in range(k):temp=array[0]for j in range(0,len(array)-1): ① array[-1]=temps=input("請輸入明文:")n=int(input("n="))k=int(input("k="))a=[[-1 for i in range(n)] for i in range(n)]for i in range(len(s)): if "A"<=s[i]<="Z": t=ord(s[i])-ord("A")x=i%ny=i//na[y][x]=t+knews=" "for i in range(n): yw(a[i],k)for j in range(n): if a[i][j]==-1: news+="#" else: ② print(news)答案 (1)ZIP (2)①array[j]=array[j+1]或其他等價答案 ②news+=chr(a[i][j]+ord("A"))或news+=chr(a[i][j]+65) (3)a[x][y]=(t+k)%2621世紀教育網 www.21cnjy.com 精品試卷·第 2 頁 (共 2 頁)21世紀教育網(www.21cnjy.com) 展開更多...... 收起↑ 資源預覽 縮略圖、資源來源于二一教育資源庫