内容正文:
进制与字符处理
学考要点1 进制转换
【必修1数据与计算第70~108页 指导意见第13~19页】
1.十进制转k进制程序代码
除k倒取余数,将输入的十进制数不断除k取余直至商为零,并将余数以下标形式借助数码字符串转换成对应字符串型数值 除k倒取余数,将输入的十进制数不断除k取余直至商为零,并将余数通过数据类型转换函数转换成对应字符串型数值
code='0123456789ABCDEF'
s=''
n=int(input('请输入待转换的值: '))
k=int(input('请输入进制数: '))
while n>0:
r=n%k
n=n//k
s1=code[r]
s=s1+s
print('转换后的值为: ',s)
s=''
n=int(input('请输入待转换的值: '))
k=int(input('请输入进制数: '))
while n>0:
r=n%k
n=n//k
if 0<=r<=9:
s1=str(r)
else:
s1=chr(r+55)
s=s1+s
print('转换后的值为: ',s)
2.二进制转十进制程序代码
位权展开相加,对输入的二进制字符串中的元素依次顺序遍历,并乘以该数值对应的位权,累加得到十进制数 位权展开相加,对输入的二进制字符串中的元素依次逆序遍历,并乘以该数值对应的位权,累加得到十进制数
s=input('请输入待转换的值: ')
n=len(s)
sum=0
for i in range(0,n,1):
ch=s[i]
sum=sum+int(ch)*2**(n-1-i)
print(sum) s=input('请输入待转换的值: ')
n=len(s)
sum=0
for i in range(n-1,-1,-1):
ch=s[i]
sum=sum+int(ch)*2**(n-1-i)
print(sum)
移位思想,对输入的二进制字符串中的元素依次顺序遍历,使用累乘相加,得到十进制数 移位思想,对输入的二进制字符串中的元素依次逆序遍历,使用累乘相加,得到十进制数
续表
s=input('请输入待转换的值: ')
n=len(s)
sum=0
for i in range(0,n,1):
ch=s[i]
sum=sum*2+int(ch)
print(sum) s=input('请输入待转换的值: ')
n=len(s)
sum=0
for i in range(n-1,-1,-1):
ch=s[n-1-i]
sum=sum*2+int(ch)
print(sum)
3.十六进制转十进制程序代码
位权展开相加,对输入的十六进制字符串中的元素依次顺序遍历,转换成对应数值,并乘以该数值对应的位权,累加得到十进制数 移位思想,对输入的十六进制字符串中的元素依次顺序遍历,使用累乘相加,得到十进制数
s=input('请输入待转换的值: ')
n=len(s)
sum=0
for i in range(0,n,1):
ch=s[i]
if 'A'<=ch<='F':
x=ord(ch)-55
else:
x=int(ch)
sum=sum+x*16**(n-1-i)
print(sum) s=input('请输入待转换的值: ')
n=len(s)
sum=0
for i in range(0,n,1):
ch=s[i]
if 'A'<=ch<='F':
x=ord(ch)-55
else:
x=ord(ch)-48
sum=sum*16+x
print(sum)
4.二进制转十六进制程序代码
将输入的二进制字符串中的每四位二进制数以位权展开相加的方法转换为十进制数,再对应转换为十六进制的数码,实现进制转换
m=0;k=0;sum=''
s=input('请输入待转化的值: ')
n=len(s)
for i in range(-1,-n-1,-1):
ch=s[i]
m=m+int(ch)*2**k
k+=1
if k==4:
if m>=10:
f=chr(m+55)
else:
f=chr(m+48)
sum=f+sum
k=0
m=0
if m>0:
sum=str(m)+sum
print(sum)
学考要点2字符处理
【必修1数据与计算第70~108页 指导意见第13~19页】
1.常见字符表达式
Python表达式 表达式功能
ch>=”a” and ch<=”z” 判断字符 ch 是否为小写字母
ch>=”A” and ch<=”Z” 判断字符 ch 是否为大写字母
ch>=”a” and ch<=”z” or ch>=”A” and ch<=”Z” 判断字符 ch 是否为字母
ch>=”0” and ch<=”9” 判断字符 ch 是否为数字字符
chr(ord(ch)+32) 实现大写字母转小写字母
chr(ord(ch)-32) 实现小写字母转大写字母
asc(ch)-asc(”a”)+1 或asc(ch)-96 ch 的值若为小写字母,实现将字符“a”“b”“z”转换成数值 1,2,…,26
asc(ch)-asc(”A”)+1 或asc(ch)-64 ch 的值若为大写字母,实现将字符“A”“B”“Z”转换成数值 1,2,…,26
2.字符串遍历与数据提取
实现运行界面的常见方式如下:(s=input())
for i in range(len(s)):
ch=s[i]
if ch>=”0” and ch<=”9”:
t=t+ch
else:
sum=sum+int(t)
print(t)
t=””
print(”数据之和为: ”+str(sum)) for i in range(len(s)):
ch=s[i]
if ch>=”0” and ch<=”9”:
t=t*10+int(ch)
else:
sum=sum+t
print(t)
t=0
print(”数据之和为: ”+str(sum))
例1 有如下Python程序段:
code='0123456789ABCDEF'
s=”
n=58
k=16
while n>0:
r=n%k
n=n//k
s1=code[r]
s=s1+s
print('转换后的值为:',s)
执行该程序段后,输出的结果是( )
A.3A B.310 C.39 D.111010
【解析】 k=16,程序实现将十进制数转换成十六进制数,用除以16倒取余数的方式实现。选项A正确。
A
变式1 有如下Python程序段:
s='1B2';ans=0;n=len(s)
for i in s:
if '0'<=i<='9':
ans=ans*16+int(i)
if 'A'<=i<='F':
ans=ans*16+ord(i)-55
print(ans)
执行该程序段后,输出的结果是( )
A.428 B.434 C.439 D.450
【解析】 该程序实现将十六进制数转换为十进制数。(1B2)16=2×1+11×16+1×256=434。选项B正确。
B
变式2 有如下Python程序段:
a=input('输入小写字母组成的字符:')
for i in a:
n=ord(i)+1 #字符“a”的ASCII码为97
h=''
for j in range(8):
h=str(abs(n%2-1))+h
n=n//2
print(h,end='')
执行该程序段后,输入小写字母“ab”,输出的结果是( )
A.0011101 0011100
B.1100010 0011100
C.10011101 10011100
D.00011101 00011100
【解析】 将字母的ASCII值加1后,分别转化成8位二进制,语句“abs(n%2-1)”将每一位上的二进制值取反,选项C正确。
C
变式3 (2024·舟山中学学考模拟)有如下Python程序段:
code=”0123456789ABCDEF”
numstr=input(”请输入一个二进制整数:”)
numlen=len(numstr)
s=0
ss=””
for i in range(numlen):
x=int(numstr[i])*2**(numlen-i-1)
s+=x
t=s
while t>0:
ss=code[t%16]+ss
t=t//16
print(s)
执行该程序段,输入1100111,输出的结果是( )
A.110 B.103 C.67 D.1100111
【解析】 for循环将二进制数转换成十进制数,while循环将十进制数转换成十六进制数,选项B正确。
B
变式4 小明编写了一个将二进制数转换成十六进制数的Python程序。输入二进制数,输出对应的十六进制数,程序运行界面如图所示:
请在横线处填入合适的代码。
s2='0123456789ABCDEF';s3=''
s=input('请输入待转换的二进制数: ')
i=①__________
while i>0:
len(s)
if i>=4:
s1=②____________
else:
s1=s[:i]
t=0
for j in s1:
t=t*2+int(j)
s3=③___________
i=i-4
print('转换后的十六进制数为: ',s3)
s[i-4:i]
s2[t]+s3
【解析】 二进制数转换成十六进制数的过程为:从字符串末端开始,以每四位二进制数为一组转换成十进制数,再对应转换成十六进制数,实现进制转换。①i为字符串的长度,指向末端;②s1中依次存放末端开始的4位二进制数;③t为转换后的十进制数,s3为十六进制数,将得到的数值倒序拼接。
例2 有如下Python程序段:
s='WE12-30ab!cd@';y=''
for i in range(len(s)-1,-1,-1):
ch=s[i]
if '0'<=ch<='9':
y=ch+y
elif 'a'<=ch<='z':
y=y+ch
print(y)
执行该程序段后,输出的结果是( )
A.dcba0321 B.dcba0321EW
C.1230dcba D.0321abcd
【解析】 程序实现对字符串逆序读取,并将数字字符逆序拼接到变量y中,即”1230”;将小写字母顺序拼接到变量y中,即”dcba”,程序段执行后y为”1230dcba”。选项C正确。
C
变式1 有如下Python程序段:
s='MoreHasteLessSpeed'
mx=”
pre=0
for i in range(1,len(s)):
if ord(s[i])<97:
if mx<s[pre:i]:
mx=s[pre:i]
pre=i
print(mx)
执行该程序段后,输出的结果是( )
A.More B.Haste C.Less D.Speed
【解析】 循环i从第2个位置开始处理,若ASCII码值小于97,结合字符串s,即当s[i]为大写字母时,取出s[pre:i],pre的初值为0,故第一次截取出单词More,第二次截取出Haste,第三次截取出Less,最后一个Speed取不到,所以三个单词中的最大值是More。选项A正确。
A
变式2 统计连续小写字母最长的个数,编写Python程序段如下:
s=input()
(1)____
ans=0
for i in range(len(s)):
t=s[i]
if t>=”a” and t<=”z”:
c=c+1
____(2)____
else:
____(3)____
print(ans)
上述程序段横线处可选的语句有:
①c=0 ②c=1 ③if c>ans: ans=c ④if c<ans: c=ans ⑤ans=ans+1
则3个横线处的语句依次为( )
A.②③① B.①④⑤ C.②④② D.①③①
D
【解析】 c用来统计连续小写字母的个数,初值是0,故(1)填c=0;ans用来统计连续小写字母最长的个数,从前往后遍历字符串s,提取第i个字符放在t中,若c>ans,则更新ans的值,故(2)填if c>ans: ans=c;若第i个字符非小写字母,将c清0,重新统计下一个连续小写字母的长度,故(3)填c=0。选项D正确。
变式3 某网络平台要求新注册用户的密码必须要有八位及以上,至少包含大写英文字母、小写英文字母、数字、指定字符这四类字符中的三类。密码设置有5次尝试机会,连续5次失败将不予注册。程序运行结果如图所示:
请回答下列问题。
(1)若用户输入的密码是“Hello202202”,则_______(选填:符合/不符合)上述密码规则。
(2)实现上述功能的程序代码如下,请在横线处填入合适的代码。
def check_letter(password):
#代码略,本函数用于判断password是否含有大、小写英文字母
#若只包含一种则返回1,若两种都包含则返回2,若两种都未包含则返回0
def check_number(password):
符合
#代码略,本函数用于判断password是否含有数字字符,若包含则返回1,否则返回0
def check_symbol(password):
#本函数用于判断password是否含有指定特殊符号,若包含则返回1,否则返回0
x=”!@#$%^&*()_+-=<>?,.” #指定字符
c=0
for i in password:
if ①______________________:
i in x 或其他等价答案
c=1;break
return c
try_times=5
password=input('请输入密码: ')
while True:
strength=check_letter(password)+check_number(password)+check_symbol(password)
if ②_______________________________ and len(password)>=8:
print('恭喜!密码设置成功。');break
strength>=3 或其他等价答案
else:
if try_times<=1:
print('尝试次数过多。密码设置失败!')
break
else:
if len(password)<8:
password=input('密码长度不足。请重新输入: ')
else:
password=input('密码强度不合格。请重新输入: ')
③________________________________________________________
【解析】 (1)长度超过8位,含有数字、大写字母、小写字母,符合要求。
(2)①x字符串为指定字符,i为设置的密码中的单个字符,当“i in x”为True时,表示输入的字符属于指定字符。
②至少包含四类字符中的三类。
③密码设置不符合要求,允许尝试次数减1,try_times为允许尝试次数。
try_times-=1 或 try_times=try_times-1 或其他等价答案
$$