实验三 字符类型及其操作(新)
第1关:判断回文数
任务描述
本关任务:
输入一个整数,判断其是否回文数。 回文数是指该数翻转后也等于该数本身。例如12321就是回文数,12345不是回文数。
相关知识
为了完成本关任务,你需要掌握:1.如何获判断字符串是否都是数字字符,2.如何得到翻转后的字符串。
判断字符串是否数字
str.isnumeric()方法可以判断字符串str是否都是数字字符。若都是数字字符,返回true,否则返回false
字符串翻转
通过字符串[::-1]的切片形式可以得到翻转的字符串 或者 通过循环,按索引从-1到-n(n为字符串长度),将对应的字符一个个连接起来得到翻转的字符串
编程要求
根据提示,在右侧编辑器补充代码,接收用户输入的字符串。 若字符串不是数字字符串,提示不是数字 若字符串x是回文数,显示x是回文数 若字符串x不是回文数,显示x不是回文数
测试说明
平台会对你编写的代码进行测试:
测试输入:
请输入字符串12321;
预期输出: 12321是回文数
测试输入:
请输入字符串12345;
预期输出: 12345不是回文数
测试输入:请输入字符串12a;
预期输出: 不是数字
古之立大志者,不惟有超世之才,亦必有坚韧不拔之志。 开始你的任务吧,祝你成功!
代码:
x=input("请输入一个数字")#代码开始if x.isnumeric()== False: print("不是数字");elif x==x[::-1]: print("{}是回文数".format(x));else: print("{}不是回文数".format(x));#代码结
第2关:凯撒密码解密
任务描述
本关任务:编写一个能对凯撒密码执行解密的小程序。
相关知识
为了完成本关任务,你需要掌握:1.凯撒密码加密的规则,2.字符的编码;3.如何遍历字符串。
凯撒密码加密的规则
凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符,对应关系如下: 原文:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文:DEFGHIJKLMNOPQRSTUVWXYZABC
字符编码
每个字符在计算机中可以表示为一个数字,称为编码。 字符串则以编码序列方式存储在计算机中。 目前,计算机采用的重要编码是ASCII编码。 asc码表如图所示
字符A的编码是65,字符B的编码是66,其余字母以此类推 ord(字符)函数可以返回字符的编码 chr(码值)函数可以返回编码对应的字符 例如,chr(65)是'A' ord('D')是68
如何遍历字符串
for 字符变量 in 字符串: <语句块> 从字符串中逐一提取每个字符,放在字符变量中,对提取到的每个字符执行一次循环体 例如,要统计字符串s中元音字母的个数
s='this is an apple'
for ch in s:
if ch in "aeoiu":
c=c+1
print("元音字符个数",c)
相关课件和视频 字符串操作
编程要求
根据提示,在右侧编辑器补充代码,实现凯撒密码解密。 即输入一串采用凯撒密码加密后的字符串(大写字母),输出解密后的字符串
测试说明
平台会对你编写的代码进行测试:
测试输入:WKLV LV DQ DSSOH; 预期输出: "THIS IS AN APPLE" 提示:大写英文字母才按规则进行解密
长风破浪会有时,直挂云帆济沧海。 开始你的任务吧,祝你成功!
代码:
etxt = input("")#代码开始for p in etxt: if "a" <= p <= "z": print(chr(ord("a")+(ord(p)-ord("a")-3)%26), end='') elif "A" <= p <= "Z": print(chr(ord("A")+(ord(p)-ord("A")-3)%26), end='') else: print(p, end='')#代码结束
第3关:简单密码加密
任务描述
某用户在存储自己的密码时(密码由大小写英文字母和数字组成),为了不被别人知晓,将其按下列规则加密 数字字符0用9替换,1用8替换,2用7替换,3用6替换,4用5替换,5用4替换,6用3替换,7用2替换,8用1替换 英文字母a用z替换,b用y替换,c用x替换,d用w替换,e用v替换,f用u替换,g用n替换,以此类推 英文字母A用Z替换,B用Y替换,C用X替换,D用W替换,E用V替换,F用U替换,G用N替换,以此类推 编写程序,输入用户的密码,输出其加密后的密码 例如输入0012xyzM 输出9987cbaN
测试说明
平台会对你编写的代码进行测试:
测试输入:123asAB; 预期输出: 876zhZY
测试输入:XYZ123abc45; 预期输出: CBA876zyx54
开始你的任务吧,祝你成功!
dic={}number_list=[str(i) for i in range(10)]word_list1=[chr(i) for i in range(ord("a"),ord("z")+1)]word_list2=[chr(i) for i in range(ord("A"),ord("Z")+1)]for i in range(5): dic[number_list[i]]=number_list[-i-1] dic[number_list[-i-1]]=number_list[i]for i in range(13): dic[word_list1[i]]=word_list1[-i-1] dic[word_list1[-i-1]]=word_list1[i] dic[word_list2[i]]=word_list2[-i-1] dic[word_list2[-i-1]]=word_list2[i]s=input("")print(s.translate(str.maketrans(dic)))
第4关:信用卡号校验
任务描述
本关任务:编写一个能判断信用卡号是否合法的小程序。
信用卡号必须通过lun算法进行校验,其过程: 1、从卡号最后一位数字开始,逆向将奇数位(1、3、5等等)相加。 2、从卡号倒数第二位数字开始,逆向将偶数位数字,先乘以2(如果乘积为两位数,则将其减去9),再求和。 3、将奇数位总和加上偶数位总和,结果应该可以被10整除。 例如,卡号是:5432123456788881 逆向奇数位为 4 2 2 4 6 8 8 1 和 = 35 逆向偶数位乘以2(有些要减去9)的结果:1 6 2 6 1 5 7 7,求和 = 35。 最后 35 + 35 = 70 可以被10整除,认定校验通过。 注意:信用卡的卡号长度是根据输入来确定的。 相关课件和视频 字符类型操作
提示: <字符串>[结尾字符:开始字符:<负整数>]
可以逆序间隔地取字符 例如 x="hello world"
则x[-1::-2]
表示从结尾字符每隔2个字符取子串,即"drwolh"
编程要求
根据提示,在右侧编辑器补充代码,判断信用卡号是否合法。
测试说明
平台会对你编写的代码进行测试:
测试输入:5432123456788881; 预期输出: 合法卡号
测试输入:955876543; 预期输出: 非法卡号
天行健,君子以自强不息。地势坤,君子以厚德载物。 开始你的任务吧,祝你成功!
cardid=input("请输入信用卡号")#代码开始digits = [int(x) for x in reversed(cardid)] #对偶数位数字翻倍 d*2even_digits = [d * 2 for d in digits[1::2]]#如果对某个数字翻倍之后结果是一个两位数,将这两位数字加在一起even_digits = [d // 10 + d % 10 for d in even_digits] #将上一步所有一位数相加even_sum = sum(even_digits) #将卡号里从右到左奇数位上所有数字相加odd_sum = sum(digits[::2]) #将even_sum和odd_sum相加,能被10整数为合法,否则不合法if (odd_sum + even_sum) % 10 == 0: print("合法卡号")else: print("非法卡号")#代码结束
第5关:ISBN校验
任务描述
本关任务: 国际标准书号(ISBN)用10位数字唯一标识的一本书。 最后一位数字为校验位,可以由其他9位数字计算出来,且d1+2d2+3d3+……+10d10必须是11的倍数(di的下标表示从右边起第i个数)。 校验位必须是介于0到10中的一个数字,用字母X表示10. 例如,020131452的校验和是5 10*0+9*2+8*0+7*1+6*3+5*1+4*4+3*5+2*2+1*5
为88,是11的倍数
编写一个python程序,将9位整数作为输入,计算校验和并打印isbn号 例如,输入020131452,输出0201314525
测试说明
平台会对你编写的代码进行测试:
测试输入:711141995; 预期输出: 7111419952
测试输入:730232560; 预期输出: 730232560X
开始你的任务吧,祝你成功!
#代码开始string=input("")def cal(string): S = sum([i*int(j) for i,j in zip(range(10,1,-1),"".join(string.split('-')))]) N = 11 - S%11 if N == 10: return string + 'X' if N == 11: return string + '1' return string + str(N)print(cal(string))#代码结束
任务描述
本关任务:编写一个能打印田字格的小程序。
输入整数(大于2小于10),输出该整数对应的由星号和空格组成的田字格图形(注意:每一个星号后面有一个空格) 假设输入x,第一行,第x行和第2x-1行输出2x-1个星号空格“* “ 其余行输出星号空格和2x-4个空格和星号空格和2x-4空格和星号空格
相关知识
为了完成本关任务,你需要掌握:
如何连接和重复字符串,
如何循环。
if多条件的组合
连接和重复字符串
字符串的操作符加号+和星号*规则: x+y
:连接两个字符串x与y x*n
与n*x
:复制n次字符串x
固定次数循环
固定次数n次的循环 for i in range(n): 循环体
if条件的组合
对于if语句,同时需要符合的两个条件,使用and连接。 例如要求x大于10并且y大于5,输出yes If x>10 and y>5: print(“yes”) 对于只要符合一个的情况,使用or连接。 例如只要x大于10或y大于5,输出yes If x>10 or y>5: print(“yes”) 相关课件和视频 字符串操作
测试说明
平台会对你编写的代码进行测试:
测试输入:3; 预期输出:
开始你的任务吧,祝你成功!
代码:
#打印田字格x=eval(input())#代码开始for i in range(2*x-1): if i in (0,x-1,2*x-2): print("* "*(2*x-1)) else: print("* "+" "*(2*x-4)+"* "+" "*(2*x-4)+"* ")#代码结束
第7关:数字汉字转换
任务描述
不管是阿拉伯数字(1、2、3……), 还是所谓汉字小写数码(一、二、三……), 由于笔画简单,容易被涂改伪篡。所以一般文书和商业财务票据上的数字都要采用汉字数码大写: 壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、(“万、亿”本身笔画已经比较复杂,使用机会也少,没有必要再用别的字代替)。如“ 3564 元”写作“叁仟伍佰陆拾肆元” 。
任务要求
编写程序,将输入的阿拉伯数字金额转换为汉字数码大写的小程序。假设给定的数字不超过1亿。
提示:除了最后一个数字字符,每个数字字符对应一个数值的汉字和一个权值的汉字,数值的汉字由其大小决定,权值的汉字由其位置决定。 例如12345,1对应数值壹和权值万,2对应数值贰和权值仟,3对应数字叁和权值佰,4对应数值肆和权值拾。
提示:设置两个字符串 hz='零壹贰叁肆伍陆柒捌玖' dw='拾佰仟万拾佰仟'。 对输入字符串(除最后一位)循环,将每位数字对应的数值汉字和权值汉字连接起来。最后再连接最后一位的数字汉字和元即可。
注意:数值为0的情况。
对于if语句,同时需要符合的两个条件,使用and连接。 例如要求x大于10并且y大于5,输出yes If x>10 and y>5: print(“yes”) 对于只要符合一个的情况,使用or连接。 例如只要x大于10或y大于5,输出yes If x>10 or y>5: print(“yes”)
测试说明
平台会对你编写的代码进行测试:
测试输入:12345 预期输出: 壹万贰仟叁佰肆拾伍元 测试输入:100 预期输出:壹佰元 测试输入:23451000 预期输出:贰仟叁佰肆拾伍万壹仟元 测试输入:1009020 预期输出: 壹佰万玖仟零贰拾元 测试输入: 45689021 预期输出:肆仟伍佰陆拾捌万玖仟零贰拾壹元
提示: 注意对于连续的0值的处理
骐骥一跃,不能十步;驽马十驾,功在不舍;锲而舍之,朽木不折;锲而不舍,金石可镂。 开始你的任务吧,祝你成功!
代码:
x=input("")hz='零壹贰叁肆伍陆柒捌玖'dw='拾佰仟万拾佰仟'y=""#代码开始i=len(x)for c in x[:-1]: if(c!="0" or (c=="0" and x[-i+1]!="0" and i!=5 and i!=9)): y=y+hz[int(c)] if c!='0' or(c=='0' and((i==5 and y[-1]!="亿"and y[-1]!="兆")or(i==9 and y[-1]!="兆"))): y=y+dw[i-2] i=i-1if x[-1]!='0': y=y+hz[int(x[-1])]y=y+"元"#代码结束print(y)
第8关:日期汉字格式转换
任务描述
本关任务: 编写程序,用户输入阿拉伯数字的日期,转换为汉字的日期。 例如,输入2021/2/25,输出二零二一年二月二十五日
相关知识
为了完成本关任务,你需要掌握:如何返回字符c在字符s中的位置
获取字符在字符串的位置
使用str.find(c)方法可以返回字符串str中字符c所在位置的序号。 “2021/2/25“.find(“/“)返回数字4。 str.rfind(c)方法可以返回从尾部起,字符串str中字符c所在位置的序号。 “2021/2/25“.rfind(“/“)返回数字6。
测试说明
平台会对你编写的代码进行测试:
测试输入:2021/3/18; 预期输出: 二零二一年三月十八日
测试输入:2020/12/1; 预期输出: 二零二零年十二月一日
提示: 将年月日分别截取出来处理 对于月份等于10、大于10和小于10分别处理 对于日号也要分几种情况考虑: 小于10、等于10、10的整数倍和不是10的整数倍
开始你的任务吧,祝你成功!
代码:
#代码开始data=input()def num2cn(n): cn='零一二三四五六七八九十' return list(cn)[int(n)] def day2cn(m): m = int(m) if m<=10: return num2cn(m) else: t1 = '' if m//10==1 else num2cn(m//10) t2 = num2cn(m%10) if m%10 else '' return t1 +'十'+t2 def year2cn(y): y = list(str(y)) return ''.join([num2cn(i) for i in y]) def date2cn(Date): Date = Date.split('/') return year2cn(Date[0])+'年'+day2cn(Date[1])+'月'+day2cn(Date[2])+'日' print(date2cn(data))#代码结束
任务描述
本关任务:输入表示武力、速度、智力、统治的四个整数(10的倍数,小于等于200),输出相应结果(使用format函数)
注意: 输出第一行为 武力是空格30空格空格3星号 输出第三行为 智力是空格110空格11星号 数字前面一个空格 数字后的空格个数与数字位数有关 提示: 是后面有一个固定的空格 数值部分指定4个输出宽度左对齐 *
号重复的次数必须为整数 /运算的结果是实数 //运算的结果是整数
相关知识
为了完成本关任务,你需要掌握:格式化字符串
格式化字符串
format()方法的基本使用
<模板字符串>.format(<逗号分隔的参数>) 模板字符串由一系列槽组成(槽用大括号表示), 用来控制修改字符串中嵌入值出现的位置, 将format()逗号分隔的参数按照序号关系替换到模板字符串的槽中。 模板字符串的槽除了包括参数序号,还可以包括格式控制信息。 {<参数序号>: <格式控制标记>} 格式控制标记包括:<填充><对齐><宽度>,<.精度><类型> 6个字段。
编程要求
根据提示,输入表示武力、速度、智力、统治的四个整数(10的倍数,小于等于200),输出相应结果(使用format函数)
测试说明
平台会对你编写的代码进行测试:
测试输入: 请输入武力120 请输入速度80 请输入智力20 请输入统治40 预期输出:
书读百遍,其义自见。 开始你的任务吧,祝你成功!
代码:
a=eval(input("请输入武力"))b=eval(input("请输入速度"))c=eval(input("请输入智力"))d=eval(input("请输入统治"))#代码开始print('武力是 {0:<4}'.format(a)+'*'*(int(a)//10))print('速度是 {0:<4}'.format(b)+'*'*(int(b)//10))print('智力是 {0:<4}'.format(c)+'*'*(int(c)//10))print('统治是 {0:<4}'.format(d)+'*'*(int(d)//10))#代码结束
来源地址:https://blog.csdn.net/weixin_62174595/article/details/126754064
免责声明:
① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。
② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341