python练习

1、循环、字符串分割

控制台输入邮箱地址(格式为 username@companyname.com), 程序识别用户名和公司名后,将用户名和公司名输出到控制台。 要求:

  1. 校验输入内容是否符合规范, 如是进入下一步,如否则抛出提 示"incorrect email format"。注意必须以.com 结尾

  2. 可以循环“输入–输出判断结果”这整个过程

  3. 按字母 Q(不区分大小写)退出循环,结束程序

while True:
    a = input('请输入邮箱地址(按q退出):')
    try:
        if a == 'q' or a == 'Q':
            print('结束程序')
            break
        elif '@' not in a or a.split('@')[0] == '' or a.split('@')[1].endswith('.com') != True:
            print("incorrect email format")
        else:
            print(f'用户名:{a.split("@")[0]}')
            print(f'公司名:{a.split("@")[1].split(".")[0]}')
    except:
        print('程序异常')
        break

2、文件写入

有一个数据list of dict如下

a = [

{"test1": "123456"},

{"test2": "123456"},

{"test3": "123456"},

]

写入到本地一个txt文件,内容格式如下:

test1,123456

test2,123456

test3,123456

with open("test.txt", "w", encoding="utf-8") as w:
    for data in a:
        for key, value in data.items():
            f.write(f"{key},{value}\n")

3、 列表元素拼接

a = [1, 2, 3, 4, 5]
b = [“a”, “b”, “c”, “d”, “e”]
如何得出c = [“a1”, “b2”, “c3”, “d4”, “e5”]

c=[]
for i in range(len(a)):
    c.append(f"{b[i]}{a[i]}")
print(c)

4、 求1000以内的水仙花数(3位数)

如果一个 3 位数等于其各位数字的立方和,则称这个数为水仙花数。
例如:153 = 1^3 + 5^3 + 3^3,因此 153 就是一个水仙花数

l=[]
for i in range(100, 1000):
    i = str(i)
    i1, i2, i3 = int(i[0]), int(i[1]), int(i[2])
    if int(i)==(i1**3)+(i2**3)+(i3**3):
        l.append(i)
print(l)

5、九九乘法表

for i in range(1,10):
    for j in range(1,i+1):
        print(f'{j}X{i}={i*j}',end=' ')
    print(end='\n')

6、列表排序去重

‘’’
问题1.对列表a 中的数字从小到大排序

问题2.排序后去除重复的数字

‘’

a = [1, 6, 8, 11, 9, 1, 8, 6, 8, 6, 8]
# print(sorted(a))
# print(set(a))
l=[]
##排序
for j in range(len(a)-1):
    for i in range(len(a)-j-1):
        if a[i]>a[i+1]:
            a[i],a[i+1]=a[i+1],a[i]
#去重
for i in a:
    if i not in l:
        l.append(i)
print(a)
print(l)

7、反转,取值

如果有一个列表a=[1,3,5,7,11]
问题:1如何让它反转成[11,7,5,3,1]
2.取到奇数位值的数字,如[1,5,11]

a=[1,3,5,7,11]
##反转
# print(a[::-1])
if len(a)%2==0:
    for i in range(len(a)/2):
        b=a[i]
        a[i]=a[len(a)-i-1]
        a[len(a) - i - 1]=b
elif len(a)%2!=0:
    for i in range(int(len(a)/2)):
        b=a[i]
        a[i]=a[len(a)-i-1]
        a[len(a) - i - 1]=b
print(a)
##取值
a=a[::-1]
l=[]
for i in range(len(a)):
    if (i+1)%2!=0:
        l.append(a[i])
print(l)

8、对称数组

用Python代码判断,是对称数组打印True,不是打印False,如:

x = [1, "a",  0, "2", 0, "a", 1]
##方法一
if len(x)%2==0:
    if x[0:int(len(x)/2)]==x[int(len(x)/2):len(x)][::-1]:
        print('True')
    else:
        print('False')
elif len(x)%2!=0:
    if x[0:int(len(x)/2)]==x[int(len(x)/2)+1:len(x)][::-1]:
        print('True')
    else:
        print('False')
##方法二
result='True'
for i in range(0,int(len(x)/2)):
    if x[i]!=x[len(x)-i-1]:
        result = 'False'
print(result)

9、斐波那契数列

求100 以内的斐波那契数列

l=[1,1]
for i in range(0,100):
    if i==l[-1]+l[-2]:
        l.append(i)
print(l)

10、三元表达式

使用列表生成式语法,将列表中[1, 3, -3, 4, -2, 8, -7, 6],找出大于0的数

l=[x for x in l if x >0]

11、完全数

如果一个正整数等于除它本身之外其他所有除数之和,就称之为完全数。
例如:6是完全数,* 因为6 = 1+2+3;
下一个完全数是28 = 14+7+4+2+1。
求1000以下的完全数

all=[]
l=[]
for a in range(1,1000):
    for i in range(1,a):
        if a%i==0:
            l.append(i)
    if sum(l)==a:
        all.append(a)
    l.clear()
print(all)

12、请写一个函数find_odd,参数是1个列表,请返回该列表中出现奇数次的元素

l=[20, 1, 1, 2, 2, 3, 3, 5, 5, 4, 20, 4, 5]
def find_odd(l):
    result=[]
    for i in l:
        if l.count(i)%2!=0 and i not in result:
            result.append(i)
    return result
print(find_odd(l))

13、写一个函数,该函数 参数为1个字符串,请分析并返回包含字符串中所有大写字母索引的有序列表。

def lin(s):
    res=[]
    for i in s:
        if i==i.upper():
            res.append(s.index(i))
    return res
print(lin("eQuINoX"))

14、请写一个函数,该函数 参数为数字列表,请算出另外一个列表,里面每个元素依次是参数列表里面元素的累计和。

def lin(l):
    res=[]
    for i in range(0,len(l)):
        n=0
        for j in range(0,i+1):
            n+=l[j]
        res.append(n)
    return res
print(lin([1, 2, 3, 4]))

15、请写一个函数,该函数 参数为一个字符串,请验证该字符串是否是一个合法的电话号码,合法返回True,否则返回False

规则如下
1、该字符串必须全部都是数字。
2、该字符串长度为11位。
3、该字符必须以数字1开头。

def lin(s):
    if s.isdigit()==True and len(s)==11 and s[0]=='1':
        return True
    else:
        return False
print(lin('31356020053'))

16、写一个函数replace

写一个函数replace,该函数参数是两个字符串,
第一个参数给出一个源,
第二个参数是指定范围。
要求该函数将 第一个参数里面的字符串中 落在第二个参数指定范围内的字符串替换为 # 号

def replace(str,scope):
    l=scope.split('-')
    for i in str:
        if l[0]<= i <=l[1]:
            str=str.replace(i,'#')
    return str
print(replace("microscopic", "i-i") )

17、写一个函数alphabet_index​

该函数参数是1个字符串,要求该函数返回一个新字符串,里面是 参数字符串中每个字母依次对应的 数字。如果是非字母,则忽略它
字母"a" 和"A" 都对应 1, "b"和"B"都对应2, "c"和"C"对应3, 依次类推

def alphabet_index(s):
    res=[]
    for i in s:
        if i.isalpha()==True:
            res.append(i)
    for i in range(len(res)):
        if ord(res[i])>96:  #小写字母ASCII为97~122
            res[i]=str(ord(res[i])-96)
        else:#小写字母ASCII为65~90
            res[i] = str(ord(res[i])-64)
    return ' '.join(res)
print(alphabet_index("The river stole the gods."))

18、提取出只包含数字及字母,且以字母开头的最长的子字符串,打印出子字符串及其长度,如果有多个,都要打印出来。

testStr = '#ab1k23$%&()*+,-./:;<=ab12w4>?666qzcsbj@[4f]^{1aaa12|}'
class maxlen():
    def __init__(self,str):
        self.l=[]
        self.L=[]
        self.str=str
    def all(self):
        for i in range(len(self.str)):
            if 97<=ord(self.str[i])<=122 or 65<=ord(self.str[i])<=90:
                for j in self.str[i:len(self.str)]:
                    if 97<=ord(j)<=122 or 65<=ord(j)<=90 or 48<=ord(j)<=57:
                        self.l.append(j)
                    else:
                        break
                s=''.join(self.l)
                self.L.append(s)
                self.l.clear()
        return self.L
    def res(self):
        self.all()
        for k in self.L:
            if len(k) == len(max(self.L,key=len)):
                print(k)

if __name__=='__main__':
    m=maxlen(str=testStr)
    m.res()

19、移除l=[1,2,3,4,5,6,7,8,9]奇数

l=list(filter(lambda x:x%2==0,l))

20、对字符串“2kd4-1124*2|^2sdAmZ%fkMcv”排序,并返回符合要求格式的元组数据。

排序规则:按照 ASCII 码由大到小排序,返回数据格式:((最大字符,最小字符),(次大字符,次小
字符),,,)

testStr = '2kd4-1124*2|^2sdAmZ%fkMcvM'
class sort():
# a=set(testStr)
    def __init__(self,str):
        self.l=list(testStr)
        self.l1=[]
        self.L=[]
    #先排序
    def sorted(self):
        for i in range(len(self.l)-1):
            for j in range(i+1,len(self.l)):
                if self.l[i]<self.l[j]:
                    self.l[i],self.l[j]=self.l[j],self.l[i]
        return self.l

    #按格式输出
    def output(self):
        self.sorted()
        if len(self.l)%2==0:
            for i in range(int(len(self.l)/2)): #偶数个
                self.l1.append(self.l[i])
                self.l1.append(self.l[len(self.l)-i-1])
                self.L.append(tuple(self.l1))
                self.l1.clear()
        if len(self.l) % 2 != 0:
            for i in range(int(len(self.l)/2)):#奇数个
                self.l1.append(self.l[i])
                self.l1.append(self.l[len(self.l)-i-1])
                self.L.append(tuple(self.l1))
                self.l1.clear()
            self.L.append(tuple(self.l[int(len(self.l) / 2)]))
        return self.L

if __name__=='__main__':
    d=sort(str=testStr)
    print(d.output())
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值