1、循环、字符串分割
控制台输入邮箱地址(格式为 username@companyname.com), 程序识别用户名和公司名后,将用户名和公司名输出到控制台。 要求:
-
校验输入内容是否符合规范, 如是进入下一步,如否则抛出提 示"incorrect email format"。注意必须以.com 结尾
-
可以循环“输入–输出判断结果”这整个过程
-
按字母 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())