Python常见编程题(三)

----------------------------字符串----------------------------

1.注册验证程序。设定如下条件:

(1)用户名必须以下划线“_”开头,长度必须在3~30个字符之间;
(2)密码必须由下划线、数字和字母共同组成,不允许有其他符号,长度必须在8~16个字符之间。

user=input("请输入用户名:")
if user[0]!='_': #判断用户名的第一个字符是否是下划线
    print("用户名必须以下划线开头!")
elif len(user)<3 or len(user)>30: #判断用户名的长度
    print("用户名长度必须在3-30个字符之间!")
else: #满足以上两种情况
    pwd=input("请输入密码:")
    if pwd.find('_')==-1: #字符串的find方法,若值为-1,说明找不到指定字符
        print("密码必须包含下划线!")
    else: #pwd中包含下划线
    	#为了测试字符串的其他字符,先处理下划线,
    	#比如这里通过字符串的replace方法把下划线替换成空,也就是把下划线删除
        password=pwd.replace('_','') 
        #判断经过处理后的密码是否只包含数字和字母,长度在8-16之间
        if password.isalnum() and 8<=len(pwd)<=16:
            if password.isalpha(): 
            #isalpha()方法用来判断字符串是否全是由字母组成
                print("密码不能全部由字母组成!")
            elif password.isnumeric(): 
            #isnumeric()方法用来判断字符串是否全是由数字组成
                print("密码不能全部由数字组成!")
            else: #说明此密码中包含了数字和字母
                print("恭喜注册成功,用户名:{},密码:{}".format(user,pwd))
        else:
            print("密码不允许有其他符号,长度必须在8~16个字符之间!")

2.敏感词替换。

给定一个字符串,判断字符串中的文字是否是敏感词汇(敏感词汇可以自己定义),如果存在则使用*替换。

比如:把敏感词定义为’哈’,‘嘿’,‘呵’

str=input("请输入一段文字:")
sen=['哈','嘿','呵']  #自定义的敏感词
for s in str: #遍历输入的每一个字符
    if s in sen: #如果字符s能够匹配sen列表中其中一个
        str=str.replace(s,"*") #使用replace方法替换
print(str)

3. 文本进度条。

要求编写程序,实现进度条动态显示的效果。
在这里插入图片描述

import time
print("="*15+"开始下载"+"="*15)
for i in range(21): #设置20个符号表示进度条
    j=(i/20)*100 #完成的百分比
    complete=i*"." #已完成的用.表示
    uncomplete=(20-i)*'*' #未完成的用*表示
    print("{:.0f}% [{}{}]".format(j,complete,uncomplete))
    time.sleep(0.5) #间隔0.5秒
print("="*15+"下载完成"+"="*15)

4.密码加密。

假设当前开发的程序中需要对用户的密码进行加密处理,已知用户的密码均为6位数字,加密规则如下:
(1)获取每个数字的ASCII值。
(2)将所有数字的ASCII值进行累加求和。
(3)将每个数字对应的ASCII值按照从前往后的顺序进行拼接,并将拼接后的结果进行反转。
(4)将反转后的结果与(2)中累加的结果相加,所得到的结果即为加密后的密码。

pwd=input("请输入6位数字的密码:")
sums=0
total=""
#因输入的密码是字符串类型的数据,所以可以使用循环遍历密码中每一个字符
for p in pwd: 
    p_ascii=ord(p) #ord(p)返回字符p对应的ASCII数值
    sums+=p_ascii #所有数字的ASCII值进行累加求和
    #因p_ascii是ASCII数值,是整型数据类型,所有在拼接之前需要先使用str函数将其转换为字符串
    total+=str(p_ascii)+"" 
#利用切片操作[::-1]将字符串中的数据逆序显示,此时total的数据类型是字符串
total=total[::-1] 
#因最后需要把total和sums的值相加,所以需要先把total转换为整型才可以
password=int(total)+sums
print("加密后的密码为:",password)

♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥–函数–♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥♥

1.编写函数,检查传入的列表中所有奇数位索引对应的元素,并将其作为新列表返回给调用者。

def getElements(list):
    list2=[]
    for l in list: #遍历传进来的列表
    	#list.index(l)返回列表list中第一个与l匹配的元素的索引下标
        if list.index(l)%2!=0: 
            list2.append(l)
    return list2
#eval()函数:执行一个字符串表达式,并返回表达式的值。
#也就是输入的是列表,通过eval()函数转换之后仍是列表。
list1=eval(input("请输入列表:"))
#通过函数名(参数)的形式调用该函数
print(getElements(list1))

2.编写函数,检查传入字典的每一个value的长度,如果大于2,那么仅保留前两个长度的内容,并将字典的新值存到列表中返回给调用者。

def getValues(dict): #dict参数传进来是字典
    list=[]
    #dict.values()获取字典dict所有的值
    for v in dict.values(): 
        v=str(v) #把字典中所有值转换为字符串的数据类型
        if len(v)>2:
            list.append(v[:2]) #v[:2]取v值的前两个值
        else: #若v的长度小于等于2,则把v的值原样存到列表中
            list.append(v)
    return list #返回列表list
dic=eval(input("请输入字典:"))
print(getValues(dic)) #调用getValues()函数

3.斐波那契数列。

要求编写程序,实现根据用户输入的数字输出斐波那契数列。数列中的数据满足以下公式:F(1)=1,F(2)=1,F(n)=F(n-1)+F(n-2) (n>=3)。

def fb(n):
    if n==1 or n==2:
        return 1
    elif n>=3:
        return fb(n-1)+fb(n-2) #递归调用

n=int(input("输入n:"))
print("当n={}时,值为{}".format(n,fb(n)))

4.给定两个均不超过9的正整数a和n,要求编写函数fn(a,n) ,求a+aa+aaa++⋯+aa⋯aa(n个a)之和,fn须返回的是数列和。

def fn(a,n):
    sums=0
    i=0
    while i!=n:
        sums += a
        #第i个a
        a=10*a+a%10
        i+=1
    return sums
#同时输入两个值并以逗号分隔,使用split方法分割两个值
a,n=input("请输入a和n,以逗号隔开:").split(",")
a,n=int(a),int(n) 
#因input函数传递进来的是str字符串类型,而本题需要用到整型,所以使用int()转换
print("数列和为:",fn(a,n))

5.使用函数求素数和、合数和。

函数prime§,当用户传入参数p为素数时返回True,否则返回False。函数Sum(m,n)返回区间[m, n]内所有素数和合数的和。题目保证用户传入的参数1<=m<n。

一个数要么是素数,要么是合数。1除外,1既不是素数也不是合数。
判断一个数p是否为素数,只需判断这个数能不能被[2,p/2]之间的数整除即可

import math #导入math模块
def prime(p):
    if p<=1:
        return False
    j=2
    while j<(p/2): #j是[2,p/2]之间的数
    	#若p能被[2,p/2]之间的任一个数整除,说明p是合数,退出循环,判断p后面的数
        if p%j==0: 
            break #结束循环
        j+=1
    if j>(p/2): #若j超出了p/2,说明p是素数
        return True
    return False
def Sum(m,n):
    k = w = 0
    for i in range(m, n + 1): #遍历m和n之间的数
        if i==1:
            print("1不是素数也不是合数")
        elif prime(i):
            print(f"{i}是素数",end=" ")
            k += i
        else:
            print(f"{i}是合数",end=" ")
            w += i
    print(f"\n{m}{n}之间所有素数之和为{k},合数之和为{w}")
m,n=input("请输入m和n:").split(",")
m,n=int(m),int(n)
Sum(m,n)
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值