Python程序设计 字符串类型及其操作(二)

27 篇文章 6 订阅

实验三 字符类型及其操作

1. 判断回文数

输入一个整数,判断其是否回文数。 回文数是指该数翻转后也等于该数本身。例如12321就是回文数,12345不是回文数。

判断字符串是否数字

str.isnumeric()方法可以判断字符串str是否都是数字字符。若都是数字字符,返回true,否则返回false

字符串翻转

通过字符串[::-1]的切片形式可以得到翻转的字符串 或者 通过循环,按索引从-1到-n(n为字符串长度),将对应的字符一个个连接起来得到翻转的字符串

x=input("请输入一个数字")
#代码开始
if x.isnumeric()==True:
    if x == x[::-1]:
        print("%s是回文数" % x)
    else:
        print("%s不是回文数" % x)
else:
    print("不是数字")    
#代码结束

2. 凯撒密码解密

编写一个能对凯撒密码执行解密的小程序。

凯撒密码加密的规则

凯撒密码是古罗马凯撒大帝用来对军事情报进行加密的算法,它采用了替换方法对信息中的每一个英文字符循环替换为字母表序列该字符后面第三个字符,对应关系如下: 原文:ABCDEFGHIJKLMNOPQRSTUVWXYZ 密文:DEFGHIJKLMNOPQRSTUVWXYZABC

字符编码

每个字符在计算机中可以表示为一个数字,称为编码。 字符串则以编码序列方式存储在计算机中。 目前,计算机采用的重要编码是ASCII编码。 asc码表如图所示

asc码表

字符A的编码是65,字符B的编码是66,其余字母以此类推 ord(字符)函数可以返回字符的编码 chr(码值)函数可以返回编码对应的字符 例如,chr(65)是'A' ord('D')是68

mw = input("")
#代码开始
ming = ""
for i in mw:
    if "A" <= i <= "Z":
        s = chr((ord(i)-ord("A") - 3) % 26 + ord("A"))
    else:
        s = i
    ming += s
#代码结束
print(ming)

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

p=input("")
y=""
#代码开始
for i in p:
    if "a" <= i <= "z":
        s = chr(ord("z")-(ord(i)-ord("a")))
    elif "A" <= i <= "Z":
        s = chr(ord("Z")-(ord(i)-ord("A")))
    elif "0" <= i <= "9":
        s = str(9 - int(i))
    else:
        s = i
    y += s

#代码结束
print(y)

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整除,认定校验通过。 注意:信用卡的卡号长度是根据输入来确定的。

cardid=input("请输入信用卡号")
#代码开始
n = len(cardid)
s = 0
d = 0
for i in range(n,0,-2):
    s += int(cardid[-int(i)])

for j in range(n-1,1,-2):
    a = int(cardid[-int(j)]) * 2
    if  a > 9:
        d += a - 9
    else:
        d += a
if (s + d) % 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

x=input("")
#代码开始
n = 10
s = 0
for i in x:
    s += n*int(i)
    n -= 1

a =str(11 - s % 11)
if a == "10":
    a = "X"

print(x+a)

#代码结束

6. 打印田字格

编写一个能打印田字格的小程序。

输入整数(大于2小于10),输出该整数对应的由星号和空格组成的田字格图形(注意:每一个星号后面有一个空格)

假设输入x,第一行,第x行和第2x-1行输出2x-1个星号空格“* “ 其余行输出星号空格和2x-4个空格和星号空格和2x-4空格和星号空格

#打印田字格
x=eval(input())
#代码开始
n = x*2-1
for i in range(1, n+1):
    for j in range(1, n+1):
        if i not in [1,x,n] and j not in [1,x,n]:
            print(" ",end=" ")
        else:
            print("*",end=" ")
    print()

7. 数字汉字转换

不管是阿拉伯数字(1、2、3……), 还是所谓汉字小写数码(一、二、三……), 由于笔画简单,容易被涂改伪篡。所以一般文书和商业财务票据上的数字都要采用汉字数码大写: 壹、贰、叁、肆、伍、陆、柒、捌、玖、拾、佰、仟、(“万、亿”本身笔画已经比较复杂,使用机会也少,没有必要再用别的字代替)。如“ 3564 元”写作“叁仟伍佰陆拾肆元” 。

编写程序,将输入的阿拉伯数字金额转换为汉字数码大写的小程序。假设给定的数字不超过1亿。

提示:除了最后一个数字字符,每个数字字符对应一个数值的汉字和一个权值的汉字,数值的汉字由其大小决定,权值的汉字由其位置决定。 例如12345,1对应数值壹和权值万,2对应数值贰和权值仟,3对应数字叁和权值佰,4对应数值肆和权值拾。

提示:设置两个字符串 hz='零壹贰叁肆伍陆柒捌玖' dw='拾佰仟万拾佰仟'。 对输入字符串(除最后一位)循环,将每位数字对应的数值汉字和权值汉字连接起来。最后再连接最后一位的数字汉字和元即可。注意:数值为0的情况。

x=input("")
hz='零壹贰叁肆伍陆柒捌玖'
dw='拾佰仟万拾佰仟'
y=""
#代码开始
n = len(x)
for i in x[:-1]:
    if i != "0" or (i == "0" and x[-n+1] != "0" and n != 5 and n != 9):
        y += hz[int(i)] 
    if i != "0" or (i == "0" and ((n==5 and y[-1]!="兆" and y[-1]!="亿") or (n==9 and y[-1] !="兆"))):
        y += dw[n-2]
    n -= 1

if x[-1]!="0":
    y += hz[int(x[-1])]

y += "元"

#代码结束
print(y)

8. 日期汉字格式转换

编写程序,用户输入阿拉伯数字的日期,转换为汉字的日期。 例如,输入2021/2/25,输出二零二一年二月二十五日

使用str.find(c)方法可以返回字符串str中字符c所在位置的序号。 “2021/2/25“.find(“/“)返回数字4。 str.rfind(c)方法可以返回从尾部起,字符串str中字符c所在位置的序号。 “2021/2/25“.rfind(“/“)返回数字6。

x=input("")
hz="零一二三四五六七八九"
#代码开始
a = x.find("/")
b = x.rfind("/")
zwnf = ""
zwyf = ""
zwrh = ""
for i in x[:a]:
    zwnf += hz[int(i)]

for i in x[a+1:b]:
    if x[a+1:b] == "10":
        zwyf = "十"
    elif int(x[a+1:b]) > 10:
        zwyf = "十" + hz[int(i)+1]
        break
    else:
        zwyf += hz[int(i)]

for i in x[b+1:]:
    if x[b+1:] == "10":
        zwrh = "十"
    elif int(x[b+1:]) % 10 == 0:
        zwrh = hz[int(i)] + "十"   
        break
    elif int(x[b+1:]) > 10:
        zwrh = hz[int(i)] + "十" + hz[int(x[-1])]
        break
    else:
        zwrh += hz[int(i)]
#代码结束
print(zwnf+"年"+zwyf+"月"+zwrh+"日")

9. 输出格式化字符

输入表示武力、速度、智力、统治的四个整数(10的倍数,小于等于200),输出相应结果(使用format函数)

gl=eval(input("请输入武力"))
sd=eval(input("请输入速度"))
zl=eval(input("请输入智力"))
tzl=eval(input("请输入统治"))
#代码开始
print("武力是","{:<3d}".format(gl),"*"*int(gl/10))
print("速度是","{:<3d}".format(sd),"*"*int(sd/10))
print("智力是","{:<3d}".format(zl),"*"*int(zl/10))
print("统治是","{:<3d}".format(tzl),"*"*int(tzl/10))
#代码结束

练习三 字符类型及其操作

1. 提取数字字符

输入字符串x,将其中的数字字符('0'到'9')取出来,再逆向输出 例如 输入abc123def45gh123 输出32154321 输入123abab45 输出54321 提示:使用一个新的字符串变量保存提取的数字字符串

x=input("")
#代码开始
y = ""
for i in x:
    if "0" <= i <= "9":
        y += i

print(y[-1::-1])
#代码结束

2. 删除连续的字符

输入一个字符串,得到一个新字符串 将原字符串中出现连续的相同的字符,在新字符串中只留下一个字符 例如原字符串为abbbccdabc,新字符串为abcdabc 提示: 用一个新字符串存放删除重复字符后的新字符串 对原字符串遍历,将新字符串的最后一个字符与原字符比较,将不重复的字符连接到新的字符串

x=input()
#代码开始
n=len(x)
y = ""
for i in range(n):
    if x[i]==x[i-1]:
        continue
    else:
        y += x[i]

#代码结束
print(y)

3. gs1校验码计算

GS1码,即GS1全球商品标识 代码位置序号是指包括校验码在内的,由右至左的顺序号(校验码的代码位置序号为1)

  1. 从代码位置序号2开始,所有偶数位的数字代码求和。
  2. 将步骤1的和乘以3。
  3. 从代码位置序号3开始,所有奇数位的数字代码求和。
  4. 将步骤2与步骤3的结果相加。
  5. 用大于或等于步骤4所得结果且为10最小整数倍的数减去步骤4所得结果,其差即为所求校验码的值。
s=input()
#代码开始
n = 0
d = 0
for i in s[-1::-2]:
    n += int(i)

for i in s[-2::-2]:
    d += int(i)

c = n * 3 + d

jym = c // 10 * 10 + 10 - c

#代码结束
print(jym)

4. dna的碱基统计

脱氧核糖核酸DNA,其中的核糖部分是脱氧核糖. 碱基有且仅有四种----腺嘌呤(A),胞嘧啶(C),鸟嘌呤(G)和胸腺嘧啶(T)。 输入一段DNA字符串,统计并输出ACTG的个数。 例如 输入AGCTTTTCATTCTGACTGCAACGGGCAATATGTCTCTGTGTGGATTAAAAAAAGAGTGTCTGATAGCAGC 输出 碱基A数量20 碱基C数量12 碱基T数量21 碱基G数量17 若输入的字符串中有其他字符,则显示输入错误。提示:可以设置flag变量来标志是否有错误输入

x=input("")
#开始
a = 0
c = 0
g = 0
t = 0
s = 0
for i in x:
    if i =="A"or i == "C" or i == "G" or i == "T":
        if i == "A":
            a += 1
        elif i == "C":
            c+=1
        elif i =="G":
            g+=1
        elif i=="T":
            t+=1
    else:
        s = 1

if s == 1:
    print("输入错误")
else:
    print("碱基A数量%d" % a)
    print("碱基C数量%d" % c)
    print("碱基T数量%d" % t)
    print("碱基G数量%d" % g)
#结束

5. 点突变个数

突变是核酸复制或合成时的错误,最简单的突变就是点突变。 给定两个相等长度的DNA字符串,要求计算点突变的数目。 输入 两相等长度的DNA字符串 输出 两个字符串相同位置字符不同的个数 若输入的字符串不等长或者包含除了ACTG外的其他字符, 输出 DNA错误

s1=input()
s2=input()
#代码开始
s = 0
n = 0
i = 0
for j in s1:
    if j in ["A","C","G","T"] and len(s1) == len(s2):
        if s1[i] != s2[i]:
            s += 1     
    else:
        n = 1
    i += 1

for j in s2:
    if j not in ["A","C","G","T"]:
        n = 1
if n==1:
    print("DNA错误")
else:
    print(s)

#代码结束

6. 密码有效性检测

小明同学最近开发了一个网站,在用户注册账户的时候,需要设置账户的密码,为了加强账户的安全性,小明对密码强度有一定要求: 1.密码长度至少为8 2.密码只能由大写字母,小写字母,数字构成; 3.密码不能以数字开头; 编写程序,输入密码,若符合以上要求,显示合法密码,否则显示非法密码 例如,若输入12abcdefg,输出非法密码 输入abc12xyz,输出合法密码 输入a#c12xyz,输出非法密码 提示: 字符串方法isalpha()可以判断字符串是否为英文字母 isdigit()可以判断字符串是否为数字字符 可以设置flag变量的值来标识字符串是否合法

x=input()
#开始
n = 0
for i in x:
    if (i.isalpha()==True or i.isdigit()==True) and len(x)>=8:
        if x[0].isdigit() == False: 
            n = 1

if n == 0 or x.find("!") != -1:
    print("非法密码")           
else:
    print("合法密码")


#结束 

7. 考勤计算

某单位的考勤机输出一串字符串表示员工出勤状况 字符A表示正常,字符B表示迟到,字符C表示请假,字符D表示加班 该单位规定,正常上班奖励5元,迟到一次罚款10元,请假一次扣除50,加班一次奖励50 输入一串字符串,计算员工的奖金(有可能为负数) 例如AAABCDD,则显示金额55 例如ABBBCAAAAAA,则显示金额-45

x=input("")
#代码开始
a = 0
b = 0
c = 0
d = 0
for i in x:
    if i =="A":
        a += 1
    elif i =="B":
        b += 1
    elif i =="C":
        c += 1
    elif i =="D":
        d += 1

s = 5 * a - 10 * b - 50 * c + 50 * d
print("金额%d"%s)
#代码结束

8. 年号干支的计算

在中国传统文化中,年份可以用天干地支来表示 转换方法如下: 天干=(年份-3)/10……余数一 地支=(年份-3)/12……余数二 余数一为1-9和0,按以下规则取天干 天干:甲、乙、丙、丁、戊、己、庚、辛、壬、癸 余数二为1-11和0,按以下规则取地支 地支:子、丑、寅、卯、辰、巳、午、未、申、酉、戌、亥 例如2021年 (2021-3)/10……余数一为8 天干是辛 (2021-3)/12……余数二为2 地支是丑 所以为辛丑年 编写程序,输入年号,显示其天干地支 例如输入2020 输出庚子年

y=eval(input())
tgzf="癸甲乙丙丁戊己庚辛壬癸"
dzzf="亥子丑寅卯辰巳午未申酉戌"
#代码开始
tg = (y-3) % 10
dz = (y-3) % 12
print(tgzf[tg]+dzzf[dz]+"年")
#代码结束
  • 31
    点赞
  • 22
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值