1. 小王设计“模拟撤销”程序,需要用一个“历史记录”,“历史记录”是在对字符串s进行插入或删除时,将每步操作信息依次存储得到的,操作信息由操作符(“+”表示插入,“-”表示删除)、操作位置和操作字符串(只包含英文字母)构成,例如,“+23abc”表示在字符串s第23位插入了“abc”,“模拟撤销”过程按照“历史记录”的逆序进行,将字符串s的内容恢复到初始状态。对字符串“Book”的操作与撤销过程,如图所示。

小王编写的“模拟撤销”Python程序如下,输入撤销前字符串和历史记录,显示撤销过程代码如下所示。

实现上述功能的代码如下,请回答下列问题。

s=input("输入撤销前的字符串")

t=input("历史记录")

t=t[::-1]

c,num="",""

ss=s

for ch in t:

    if "a"<=ch<="z"or"A"<=ch<="Z":

    c=ch+c

    elif "0"<=ch<="9"··

    num=ch+num

    else:

                  ①        

    if ch=="-":

                 ②     

    else:

         s=s[:n-1]+s[n-1+len(c):]

    ss=ss+"→"+s

    c,num="",""

print("撤销过程:"+     ③     )

(1) 请在划线处填入合适的代码。

程序划线①处应填入的代码为;

程序划线②处应填入的代码为;

程序划线③处应填入的代码为

(2) 运行该程序,输入的内容分别是"April"和"-3p+3ri-6e",字符串s的值是
【考点】
分支结构语句及程序实现; 循环结构语句及程序实现;
【答案】

您现在未登录,无法查看试题答案与解析。 登录
综合题 困难
能力提升
真题演练
换一批
1. 小华开发了一个自动改卷系统,但是由于科目不同,没有固定的题号模板,于是小华又编写了python程序,能根据试卷答案自动输出题号。如图1为答案模板文件,小华在模板文件中录入答案后保存为"卷3.txt",如图2所示,每一行是一题或者一题中的一小题的答案,题号之间没有跳跃。例如:图2中【1】和【5】之间有4行,A、B、C、D为第1到4题的答案。程序运行结果如图3所示。

图 1

图 2

图 3

(1) 实现上述功能的 Python 程序如下,若删除图2最后一行(【7】所在的行),对程序运行结果  影响(填:有/没有)。
(2) 请在划线处填入合适的代码。

f=open("卷 3.txt",encoding="utf-8")

line=f.readline().strip() c=0      #strip()用于删除字符串尾部的"\n"换行符

preId=0

QuestionInfo=[ ]

while line:

    if line[0] == "【":

        curId =

        if curId - preId > 1:

            for i in range(preId, curId):

                QuestionInfo.append(str(i))

        elif c>0:

            for i in range(1, c + 1):

                QuestionInfo.append(str(preId) + "(" + str(i) + ")")

        c = 0

           

    else:

       

    line=f.readline().strip()         #strip()用于删除字符串尾部的"\n"换行符

f.close()

print("卷 3 题号划分为: ")

for Id in QuestionInfo:

    print(Id)

综合题 困难
2. 小林在玩一种纸牌游戏——纸牌钓鱼。他对牌做了如下处理:

1)取两副纸牌去除大小王,共104张,其中▲表示黑桃,○表示红心,★表示梅花,◇表示方块,将牌按顺序叠好,成为原始牌叠;

2)对原始牌叠洗牌:进行104次洗牌,每次将面上的第一张牌随机插在牌叠中,成为洗牌牌叠;

3)摸牌:从洗牌牌叠中从上向下连续摸牌,使得摸到的牌里没有重复的牌(同花色、同点数视为重复的牌),这样连接的牌数量最多时即为最长无重复牌叠。

现设计Python程序模拟这个游戏:先显示原始牌叠,洗牌后再显示洗牌牌叠,摸牌后显示最长无重复牌叠张数、起点及终点,并显示最长无重复牌叠的信息。运行结果如第所示。

(1) 实现上述功能的Python程序如下,请在划线处填入合适的代码。

from random import randint

def dayin(head,tail):               #打印牌叠

    pt=head; k=0

    while :

        print(str(pai[pt][0])+'-'+str(pai[pt][1]),end='||')

        pt=pai[pt][1]; k=k+1

        if k==13: print(); k=0

    print('\n','*'*105)

dic={0:'▲',1:'○',2:'★',3:'◇',4:'A',5:'2',6:'3',7:'4',8:'5',9:'6',10:'7',11:'8',12:'9',13:'10',14:'J',15:'Q',16:'K'}

pai=[]; head=- 1; k=0

while k<104:

    pai.append([ ,head])

    head=len(pai)- 1; k=k+1

print('原始的牌叠')

dayin(head,- 1)        #打印原始牌叠

k=0

while k<=103:

    x=randint(0,103)

    i=0;pt=head

    while i<x:

        pt=pai[pt][1]

        i+=1

    if pt!=head:

        nhead=pai[head][1]

       

        pai[pt][1]=head

        head=nhead

    k+=1

print('洗牌后的牌叠')

dayin(head,- 1)        #打印洗牌牌堆

f={}

for i in range(4):

    for j in range(4,17):

        f[dic[i]+dic[j]]=False

L=ans=0; i=j=head

while j!=- 1:

    m=pai[j][0]

    if not f[m]:

        f[m]=True; L=L+1

        if L>ans: ans=L; pt=j; qt=i

            j=pai[j][1]

        else:

            while  :

                f[pai[i][0]]=False

                L=L- 1

                i=pai[i][1]

print('最长无重复牌叠%d 张'%ans,'起点',qt,'终点',pt)

dayin(  )

(2) 程序最后的加框处代码有错,请改正。
综合题 困难
3. 疫情期间学校实行错时吃饭,中午吃饭时间(文本框Text1)按照高三、高一、高二的顺序依次下课去食堂,年级之间间隔5分钟(文本框Text2),已知每个年级同学数按500人整计算,每分钟进入食堂的人数按100人次计算,5批次可以全部进入食堂。食堂共设置了15个打菜窗口,每个打菜窗口的绝对等待时间依次为“0秒,10秒,20秒,……,(n-1)*10秒”n表示该窗口第n位排队打菜同学。每个窗口最多容纳排队人数=1500/15=100人。

现在设计一个VB程序,计算三个年级每一个批次进入食堂排队打菜完需要的相对等待时间平均值(输出到标签Label1,单位:分钟),以及抽样调查:在文本框Text3中输入某年级第n位进入食堂的同学,排队打到饭菜需要的时间(单位分钟,取整)并输出到标签Label2中。程序运行界面如第16题图所示。

(1) 如图所示,将食堂打菜窗口增加到20个,则平均排队打菜时间将(单选:A .增大/B .减小)。
(2) 实现上述功能的部分VB程序如下,请在划线处填入合适的代码。

Const n= 1500:Const nj = "

Dim d(1 To 3 * 5) As Integer, cw(1 To 100) As Integer, w(1 To n) As Integer

Private Sub Command1_Click()

    Dim i As Integer, j As Integer, t(1 To 3) As Integer

    Dim k As Integer, sum As Long, aver As Integer

    t(1) = TtoM(Text1.Text):k = Val(Text2.Text)

    For i = 1 To 3

        If i > 1 Then t(i) =      '三个年级的午餐时间

        For j = 1 To 5

            d((i -1) * 5 + j) = t(i) + j -1   '记录三个年级每个批次进入食堂的时间点

        Next j

    Next i

    List1.Clear

    For i = 1 To 15

    '输出三个年级每个批次进入食堂的时间点,代码略

    Next i

    For j = 1 To n

        If j Mod 15 = 1 Then

            i = (j -1) \15 + 1

            cw(i) = (i -1) * 10     '每个打菜窗口的等待时间(单位:秒)

        End If

        w(j) = cw(i) -() * 60    '每位同学打菜等待时间

        sum = sum + w(j)

    Next j

    aver = sum \n \60

    Label1.Caption = "平均排队打菜时间:" + Str(aver) + "分钟" 

End Sub

Private Sub Command2_Click()

    Dim i As Integer, j As Integer, k As Integer, s As String

    s = Text3.Text

    i = 1

    Do While i <= 3

        If Then j = (i -1) * 500 + Val(Mid(s, 4)): Exit Do

        i = i + 1

    Loop

    Label2.Caption = s+"进入食堂的同学大约" +Str(w(j)\60)+ "分钟左右打到饭菜。"

End Sub

Function TtoM(t As String) As Integer

    '将时间转换为绝对数值,例如t="12:01"→TtoM=721,代码略

End Function

Function MtoT(m As Integer) As String

    '将时间绝对数值转换为时间格式,代码略

End Function

综合题 困难