python第二周day5(9.27)
1、day9字符串作业更改版
# *1.1输入一个字符串,打印所有奇数位上的字符(下标是1,3,5,7…位上的字符)
# 例如: 输入**'abcd1234 ' ** 输出**'bd24'**
# 切片
str1 = 'abcd1234'
print(str1[1::2]) # bd24
# 2.1输入用户名,判断用户名是否合法(用户名长度6~10位)
# str2 = input('请输入一个用户名:')
# if 6 <= len(str2) <= 10:
# print('用户名合法')
# else:
# print('用户名不合法') # 请输入一个用户名:陈来
# 3.1 **输入用户名,判断用户名是否合法(用户名中只能由数字和字母组成)(经常遇到)
# user_name = input('请输入一个用户名:')
# for x in user_name:
# if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
# print('用户名不合法')
# break
# else:
# print('用户名合法')
# 4.1 ***输入用户名,判断用户名是否合法(用户名必须包含且只能包含数字和字母,并且第一个字符必须是大写字母)
user_name = input('请输入一个用户名:')
if 'A' <= user_name[0] <= 'Z':
# 保存数字字符的个数
count = 0
for x in user_name[1:]:
if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
print('用户名不合法')
break
else:
if '0' <= x <= '9':
count += 1
else:
if count: # count !=0 一样
print('用户名合法')
else:
print('用户名不合法')
else:
print('用户名不合法')
# 练习5:输入一个字符串,将字符串中所有的数字字符取出来产生一个新的字符串
str3 = 'abc1shj23kls99+2kkk'
new_str3 = ''
for x in str3:
if '0' <= x <= '9':
new_str3 += x
print(new_str3) #123992
# 练习6:输入一个字符串,将字符串中所有的小写字母变成对应的大写字母输出 (用upper方法和自己写算法两种方式实现)
str1 = 'a2h2klm12+'
# 方法一
# 规律:小写字母转大写字母:小写字母的编码值 - 32 --> 转换成字符
new_str1 = ''
for x in str1:
if 'a' <= x <= 'z':
new_str1 += chr(ord(x)-32) # ord(字符) ,chr(编码值)
else:
new_str1 += x
print(new_str1) # A2H2KLM12+
# a:97 A:65 b:98 B:66
# 方法二
# 字符串.upper() - 将字符串中所有的小写字母转换成对应的大写字母,产生一个新的字符串
# lower 大写转小写
new_str1 = str1.upper()
print(new_str1) # A2H2KLM12+
# **练习7:输入一个小于1000的数字,产生对应的学号(简单做法,运用+,*)
# 输入 ** '23' **,输出 ** 'py1901023' ** 输入 ** '9' **, 输出 ** 'py1901009' ** 输入 ** '123' **,输出 ** 'py1901123' **
# 23 -> 023 9 -> 009 123 -> 123
num = '23'
study_id = 'py1901' + (3-len(num))*'0'+num
print(study_id) # 'py1901
# 练习8.1 输入一个字符串,统计字符串中非数字字母的字符的个数
# str1 = input('请输入一个字符串:')
str1 = 'anc2+93-sj胡说'
count = 0
for x in str1:
if not ('0' <= x <= '9' or 'a' <= x <= 'z' or 'A' <= x <= 'Z'):
count += 1
print(count) # 4
# 练习9:输入字符串,将字符串的开头和结尾变成'+',产生一个新的字符串
# 例如: 输入字符串**'abc123'**, 输出**'+bc12+
str1 = input('请输入一个字符串:')
new_str1 = '+'+str1[1:-1]+'+'
print(new_str1) # +bc12+
# 练习10.1. ***输入字符串,获取字符串的中间字符
# 例如: 输入**'abc1234'** 输出:**'1'** 输入**'abc123'** 输出**'c1'**
str1 = 'abc1234c'
count = len(str1)
if count % 2:
print(str1[count//2])
else:
print(str1[count//2 - 1:count // 2 +1]) # 12
# **练习11:11. **写程序实现字符串函数find/index的功能(获取字符串1中字符串2第一次出现的位置)
# 例如: 字符串1为:**how are you? Im fine, Thank you!** , 字符串2为:**you**, 打印**8**
str1 = 'how are you? Im fine, Thank you!'
str2 = 'you'
len1 = len(str1)
len2 = len(str2)
for index in range(len1-len2 + 1): # *8取到最后三位
if str1[index: index + len2] == str2: # **切片每次获得三个元素
print(index)
break
else:
print('找不到')
# 12.获取两个字符串中公共的字符
# 例如: 字符串1为:**abc123**, 字符串2为: **huak3** , 打印:**公共字符有:a3**
str1 = 'abc123'
str2 = 'huak3'
result = set(str1) & set(str2) # 使用集合的交集 &
print(''.join(result)) # 使用join方法直接转
new_str1 = ''
for x in result:
new_str1 += x
print(new_str1)
2、r语法
1.r语法(阻止转义)
在字符串的最前面加r或者R,可以让字符串中所有的转义字符的功能消失(每个符号都会变成普通字符)
str1 = r'C:\users\name\test\demo.py'
str1 = R'C:\users\name\test\demo.py'
str2 = 'C:\\users\\name\\test\demo.py'
print(str1)
3、字符串格式化
# name = input('请输入姓名:')
# age = int(input('请输入年龄:'))
# message = 'xxx今年xx岁'
name = '小新'
age = 17
# 方法一:字符串拼接
message = name +'今年'+str(age)+'岁'
print(message) # chenlai今年12岁
# 方法二:格式字符串
message = '%s今年%d岁' % (name, age)
print(message)
# 方法三:f-string
message = f'{name}今年{age}岁!'
print(message)
1.格式字符串
“”"
语法:包含格式占位符的字符串 % (数据1,数据2,…)
%s->字符串 %d->整数
格式占位符:
%s - 字符串占位符(任何类型占位,不确定时可以使用)
%d - 整数占位符
%f - 浮点数占位符(保存6位小数)
%.Nf - 浮点数保留N位小数
1)%s可以给任何类型的数据占位(如果只有一个数据可以省略括号)
str1 = '%sxxx' % ('陈来')
str1 = '%sxxx' % '陈来'
str2= '%sxxx' % (123)
str2= '%sxxx' % ([12, 11])
print(str1, str2)
2)%d 可以给任何能转换成数字数据占位
str1 = '%d-xxx' % 12
str1 = '%d-xxx' % 12.5
print(str1)
3)%f 可以给任何能转换成数字数据占位
str2 = '%f-xxx' % 4.34
print(str2) #4.340000-xxx
str1 = '余额:%.2f' % 78.9908099
print(str1) # 余额:78.99
str1 = '%s今年%d岁,月薪:%.2f元' % (name, age, 10000+2300) # 只要不是赋值语句就可以
print(str1) # 小新今年17岁,月薪:12300.00元
str2 = '%s嘉年是%d年,总收入额达到%3.f' % ('某某公司',12,123.89)
print(str2)
2.f-string
“”"
1)基本用法
语法:f’{任何有结果的表达式}’ - 用表达式的结果来填充{}所在的位置2)加参数
语法:f’{任何有结果的表达式:参数}’
参数:
.Nf — 控制小数位数
, — 逗号分隔银行金额的格式,数字三位之间用逗号隔开(金额)
.N% — 将数转换成百分比,比值保留N位小数
X>N — 将数据转换成长度为N的字符串,不够在前面用X对应的字符来填充
X<N — 将数据转换成长度为N的字符串,不够在后面用X对应的字符来填充
解释:,< - 决定填充的时候填在前面还是后面
X - 填充字符
N - 目标长度
“”"1)基本用法
str1 = f'收到你请讲'
str1 = f'{name}收到你请讲'
str1 = '{name}收到你请讲'
str1 = f'{name}-{age}-{age*10}-{name[-1]}' # 小新-17-170-新。f'{里面是有结果的表达式}'
print(str1)
str1 = f'{age- 10}是多少岁呢,{name}'
print(str1)
2)参数
a…Nf
money = 2305
str1 = f'金额:{money:.2f}'
print(str1) # 金额:2305.00
b. ,
money = 2345000
str1 = f'余额:{money:,}'
print(str1) # 2,345,000.三位之间用逗号隔开
c. .N%
rate = 0.5
str1 = f'市场占有率:{rate:.2%}'
print(str1)
d.X>N X<N 放前面,添几位,不够的加什么x :
,< - 决定填充的时候填在前面还是后面
X - 填充字符
N - 目标长度
num = 23
str1 = f'Python2106{num:0>3}'
print(str1) # Python2106023
str1 = f'Python2106{num:好<3}'
print(str1) # Python2106023
4、字符串相关方法
所有的关于字符串的相关方法看一下
菜鸟教程 - python字符串(网址) https://www.runoob.com/python3/python3-string.html
1、center,rjust,ljust,zfill
“”"
字符串.center(长度,填充字符),例如:‘abc’.center(7,‘x’)->‘xxabcxx’
字符串.rjust(长度,填充字符),例如:‘abc’.rjust(7,‘x’)->‘xxxxabc’
字符串.ljust(长度,填充字符),例如:‘abc’.ljust(7,‘x’)->‘abcxxxx’
字符串.zfill(长度)==字符串.rjust(长度,‘0’),例如:‘abc’.zfill(7)->‘0000abc’“”"
print('abc'.center(7,'x')) # xxabcxx
print('abc'.zfill(7)) # 0000abc
2.count
“”"
字符串1.count(字符串2) - 统计字符串1中字符串2出现的次数
字符串1.count(字符串2,开始下标,结束下标) - 在开始下标到结束下标(取不到)对应的范围内容统计字符串2出现的次数
“”"
str1 = 'how are you? i am fine, thank you. and you?'
print(str1.count('a')) # 4
print(str1.count('you')) # 3
print(str1.count('a', 0, 12)) # 1
print(str1.count('u', 0, 10)) # 0
3.find,index
“”"
字符串1.find(字符串2) - 获取字符串1中字符串2第一次出现的位置,返回0开始的下标值;如果字符串2不存在,返回-1
字符串1.index(字符串2) - 获取字符串1中字符串2第一次出现的位置,返回0开始的下标值;如果字符串2不存在,报错
字符串1.find(字符串2,开始下标,结束下标),字符串1.index(字符串2,开始下标,结束下标)
“”"
str1 = 'how are you? i am fine, thank you. and you?'
print(str1.find('you')) # 8
print(str1.index('you')) # 8
print(str1.find('you1')) # -1
# print(str1.index('you1')) # 报错
print(str1.find('you', 0, 8)) # -1
4.isdigit,isnumeric
“”"
字符串.isdigit() - 判断是否是纯数字字符串(数字指0~9的数字字符)
字符串.isnumeric() - 判断是否是纯数字字符串(单个数字指具有数字意义的字符)
“”"
print('123456'.isdigit()) # True
print('2323'.isnumeric()) # True
print('one2323一二三'.isnumeric()) # False
print('2323一二三'.isnumeric()) # True
print('2323一Ⅴ'.isnumeric()) # True
*5.islower,isupper
“”"
字符串1.islower() - 判断字符串是否是纯小写字母字符串
字符.islower() - 判断是否是小写字母字符串1.isupper() - 判断字符串是否是纯大写字母字符串
字符.isupper() - 判断是否是大写字母
“”"
print('abcs'.islower()) # True
print('ABCS'.isupper()) # True
**6.join
“”"
字符串.join(序列) - 将序列中的元素用指定的字符串拼接成一个新的字符串
注意:序列中的元素必须是字符串
“”"
result = '+'.join('abc') # a+b+c
result = 'and'.join('abc')
print(result) # aandbandc
result = '+'.join(['小明','张三']) # 小明+张三
result = ''.join(['小明','张三'])
print(result) # 小明张三
s1 = {'a', '1'} # 集合去重后连接在一起
result = ''.join(s1)
print(result) # a1
# **练习:将下面列表中的元素合并成一个字符串(有问题)【推导式+join】【推导式很重要】
# ['abc', 100, 12.5, True, 'hello'] -> 'abc10012.5Truehello'
list1 = ['abc', 100, 12.5, True, 'hello']
result = ''.join(str(x) for x in list1)
print(result)
# **练习2:已经一个列表保存多个学生的分数,提取所有学生的姓名,以一个字符串的形式返回(有问题)【推导式+join】
# [{'name':'张三', 'age': 18}, {'name':'小明', 'age': 20}, {'name':'小花', 'age': 30}] -> '张三,小明,小花'
students = [
{'name': '张三', 'age': 18},
{'name': '小明', 'age': 20},
{'name': '小花', 'age': 30}
]
result = ','.join(x['name'] for x in students)
print(result)
7.strip, lstrip, rstrip
“”"
字符串.strip() - 去掉字符串两端的空白字符
字符串.lstrip() - 去掉字符串前面的空白
字符串.rstrip() - 去掉字符串后面的空白
“”"
str1 = ' \tabc 123 \n'
result = str1.strip()
print('==', result, '===', sep='') # ==abc 123===
result = str1.lstrip()
print('==', result, '===', sep='') # ==abc 123 ===
result = str1.rsplit()
print('==', result, '===', sep='') # ==['abc', '123']===
8.replace
“”"
字符串1.replace(字符串2,字符串3) - 将字符串1中所有的字符串2替换成字符串3
字符串1.replace(字符串2,字符串3, N) - 替换前N个
“”"
str1 = 'how are you? i am fine, thank you. and you?'
result = str1.replace('you', 'me')
print(result) # how are me? i am fine, thank me. and me?
result = str1.replace('you', 'me', 2) # 替换前2个
print(result) # how are me? i am fine, thank me. and you?
9.maketrans,translate
“”"
str.maketrans(字符串1,字符串2) - 创建一张字符串1和字符串2的字符对应表
字符串.translate(表)
“”"
举例说明ege:
table = str.maketrans('ain', '你我他') # a->你,i->我,n->他
str1 = 'how are you? i am fine, thank you. and you?'
result = str1.translate(table)
print(result)
# 练习:将字符串中所有的阿拉伯数字都替换成对应的中文数字
# '123木头人,88' -> '一二三木头人,八八'
table = str.maketrans('0123456789', '零一二三四五六七八九') # 替换所有
str1 = '123木头人,88'
# result = '123木头人,88'.translate(table)
result = str1.translate(table)
print(result) # 一二三木头人,八八
# 10.rfind,rindex 从后往前找
str1 = 'how are you? i am fine, thank you. and you?'
print(str1.find('you')) #8 从前往后找
print(str1.rfind('you')) #39 从后往前找
11.split
“”"
字符串1.split(字符串2) - 将字符串1中所有的字符串2作为切割点对字符串进行切割
“”
str1 = 'how are you? i am fine, thank you. and you?'
result = str1.split('you')
print(result) # ['how are ', '? i am fine, thank ', '. and ', '?']
# 注意:如果切割点在最前面或者最后面或者出现连续的切割点,结果会出现空串
str2 = 'mnayoua==a123aklp'
print(str2.split('a')) # ['mn', 'you', '==', '123', 'klp']
str2 = 'mnayouaa==a123aklp'
print(str2.split('a')) # ['mn', 'you', '', '==', '123', 'klp']
5、函数的价值
nums = [29, 10, 12, 18, 23]
print(max(nums))
6、认识函数和定义函数
1.认识函数
“”"
- 概念:函数就是对实现某一特定功能的代码的封装 - 机器
- 函数的分类
系统函数(系统造好的机器) - 由Python创建好的函数,例如:print,input,type,max,min,id等
自定义函数(自己造机器) - 由程序员自己创建的函数
“”"
def func():
print(’======’)
print(’++++++’)
print(’------’)
func()
func()
func()
2.定义和函数(创建函数)
“”"
语法:
def 函数名(形参列表):
函数说明文档
函数体说明:
a.def - 关键字;固定写法
b.函数名 - 由程序员自己命名
要求:是标识符;不能是关键字
规范:见名知义(看到函数名大概知道这个函数的功能是什么);
所有的字母都小写,多个单词之间用下划线隔开;
不使用系统的函数名,类名和模块名
c. () - 固定写法
d.形参列表 - 以’变量名1,变量名2,变量名3,。。。‘格式存在。
这儿的每一个变量就是一个形参,如果不需要形参,括号里什么都不用写
形参是用来将函数外部的数据传递到函数内部。(可以理解成连接函数外部和内部的通道)
需不需要形参就看实现函数的功能需不需要额外的数据
e. : - 固定写法
f. 函数说明文档 - 本质就是文档注释’’’’’’,""""""
g. 函数体 - 和def保持一个缩进的一条或者多条语句;
函数体就是实现函数功能的代码“”"
# 练习1:定义一个函数,求任意两个数的和
def sum2(num1, num2):
print(num1 + num2)
# 练习2:定义一个函数,求N的阶乘
# N! = 1*2*3*...*N
def factorial(n):
result = 1
for x in range(1, n+1):
result *= x
print(result)
本文是Python第二周的学习记录,主要涵盖day5的内容,包括字符串的r语法、格式化方法、相关方法如center、count、find等,并介绍了函数的基本概念、分类及定义方法。
9339

被折叠的 条评论
为什么被折叠?



