2018-12-27

day4

===========获取字符===========

1.获取单个字符

"""
字符串中的每一个字符都会对应一个唯一的下标(索引)用来表示字符在字符串中的位置。
下标是从0开始一次增加的, 0对应的是第一个字符(0 ~ 字符串长度-1)
可以是从-1开始依次减小,-1代表最后一个字符(-1 ~ -字符串长度)

例如:'hello' -> h->(0,-5) e->(1,-4) l->(2,-3) l->(3,-2) o->(4,-1)
'\tpytho\u4e00n' -> p->(1, -7)

a.语法:
字符串[下标] - 获取字符串中指定下标对应的字符
b.说明:
字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量, 字符串变量
[] - 固定写法
下标 - 需要获取的字符对应的下标; 注意,这儿的下标不能越界
"""

result = 'how are you!'[0]    # 获取字符串'how are you!'中下标是0的字符,并且赋给变量result
print(result)

print('how are you!'[-4])   # y
# print('how are you!'[-13])   # IndexError: string index out of range

str1 = 'good good study! day day up!'
print(str1[10])

2.获取部分字符(字符串切片)

"""
方法一:
a.语法:
字符串[开始下标:结束下标:步长] - 从开始下标开始,获取到结束下标前为止。每次下标值加上步长去获取下一个
b.说明:
字符串 - 只要结果是字符串的表达式都可以,例如:字符串字面量, 字符串变量
[] - 固定写法
开始下标、结束下标 - 下标值(这儿的下标可以越界)
步长 - 必须是整数(正数和负数都行); 如果步长是正数,是从开始下标开始从前往后获取;
如果步长是负数,是从开始下标开始从后往前获取;

c.注意:
当步长为正,要求开始下标对应的字符的位置必须在结束下标对应的字符的位置的前面,否则结果是空串!
当步长为负,要求开始下标对应的字符的位置必须在结束下标对应的字符的位置的后面,否则结果是空串!

不管怎么取,结束下标一定取不到!
"""

str1 = 'hello python!'
print('结果1:', str1[0:-1:2])   # 从前往后取
print('结果2:', str1[-1:0:-2])    # 从后往前取

print('结果3:', str1[-1:-100:-1])   # 结束下标越界
print('结果4:', str1[100: -100: -1])  # 下标越界

练习:获取一个字符串中所有下标是奇数的字符(顺序)

print(str1[1:100:2])

str2 = "{'name':'小明', 'age': 18}"
print(str2[1:-1:1])

"""
方法二:(省略步长)
字符串[开始下标:结束下标] - 步长是1;从开始下标开始到结束下标前为止,一个一个的取!
"""

print('when i was young!'[2:6])

"""
方法三:(省略开始下标和结束下标)
a.省略开始下标
字符串[:结束下标:步长] - 当步长是正数,从字符串的第一个字符开始取到结束下标前为止;
当步长是负数,从字符串的最后一个字符开始取到结束下标前为止.
b.省略结束下标
字符串[开始下标::步长] - 当步长是正数,从开始下标开始取到字符串最后一个字符为止;
当步长是负数,从开始下标开始取到字符串的第一个字符为止
"""

str3 = 'when i was young!'
print(str3[:6], str3[:6:-1])
print(str3[2:], str3[2::-1])
print(str3[:])
print(str3[::-1])    # 让字符串倒序
print(str3)

1.字符串支持的运算符: +, *, >, <, ==, != ,>=, <=

python中的字符串支持数学运算符中的+和*,以及所有的比较运算符

"""
a. + : 字符串1 + 字符串2 - 将字符串1和字符串2拼接在一起产生一个新的字符串
注意:字符串和数字不能混合相加!
b. * : 字符串 * N - N是正整数; 字符串重复N次产生一个新的字符串
"""

new_str = 'abc' + '123'
print(new_str)
name = '张三'
message = '吃饭了吗?'
print(name+message+'....')

print('abc'+123) # TypeError: must be str, not int

new_str = 'abc'*3
print(new_str)

print(('abc'+'123')*2)    # abc123abc123
print('abc'+'123'*2)      # abc123123

c.比较是否相等
==, != 可以判断两个字符串是否相等或者不相等

d.字符比较大小:从第一个字符开始依次往后找,找到第一个不相等的字符对,判断它们的编码值的大小,
谁的编码值大,对应的字符串就大;不会再往后比较了!

应用:
1.判断是否是小写字母: 'a'<=char<='z' <===> char>='a' and char<='z'
2.判断是否是大写字母: 'A'<=char<='Z'
3.判断是否是字母: 'a' <= char <= 'z' or 'A' <= char <= 'Z'
"""

print('abc' == 'abc')    # True
print('abc' == 'cba')    # False
print('abc' != 'abc')    # False

print('abdcb' > 'abczde')

判断一个字符串中第3个字符是否是字母

str1 = 'sh是23.ssy23'
char = str1[2]     # 将第3个字符取出
print('是否是字母:', 'a' <= char <= 'z' or 'A' <= char <= 'Z')
print('是否是中文:', '\u4e00' <= char <= '\u9fa5')

实际操作结果:

是否是字母: False
是否是中文: True

2. in和not in操作

"""
字符串1 in 字符串2 -> 判断字符串2中是否包含字符串1(判断字符串1是否是字符串2的子串)
字符串1 not in 字符串2 -> 判断字符串2中是否不包含字符串1(判断字符串1是否是字符串2的子串)
"""

print('abc' in 'hello abc')     # True
print('abc' in 'ahello bc')     # False

print('abc' not in 'hello abc')     # False
print('abc' not in 'ahello bc')     # True

print('A' in 'hello Abc')

3. len函数

"""
len(序列) - 获取序列长度, 获取序列中元素的个数
len(字符串) - 获取字符串的长度(字符的个数) -- 结果是一个整数

注意:
一个可以转移的转义字符的长度是1!
一个编码字符的长度是1!
一个空格字符的长度是1!
手动在键盘上按一个tab,一般是4个空格,长度是4; 一个\t来表示的tab,长度是1
"""

print(len('abc'))

str1 = input('请输入:')
last_char = str1[len(str1)-1]    # 获取输入的字符串中的最后一个字符
print(last_char)

str1 = '    abc'
str2 = '\tabc'
print(str1)
print(str2)
print(len(str1), len(str2))   

手动输入的tab和\t对应的字符个数可能不一样!\t永远是1
===========格式字符串============
"""
1.什么是格式字符串:
在字符串中通过格式占位符来代替字符串中变化的部分,然后在后面通过数据或者变量确定变化

语法:
包含占位符的字符串 % (值1, 值2, 值3...)
说明:
占位符 - %s 字符串
%d 整数
%f 小数 (%.Nf 保留小数点后N位小数)
%c 字符 (可以将数字转换成字符)
% - 固定写法
() - 固定写法,字符串中只有一个占位符的时候,这个()可以省略
括号中的值 - 值和占位符要一一对应(个数、类型、位置都要对应)
"""
name = input('姓名:')
age = 18
sex = '男'

加操作

mesage = '我叫XXX,今天xx岁,性别:X, 月薪x万'

mesage = '我叫'+name+',今年'+age+'岁,性别:'+sex

print(mesage)

格式字符串

message = '我叫%s,今年%s,性别:%d, 月薪%.2f万 字符:%c' % (name, age, sex, 1.5, 97)
print(message)

练习: 输入一个字符串, 用一个变量保存输入的字符串的相关信息:XXX的长度是XX,最后一个字符是X

例如: 输入abc -> abc的长度是3,最后一个字符是c

input_str = input('输入一个字符串:')
message = '%s的长度是%d, 最后一个字符是%c' % (input_str, len(input_str), input_str[-1])
print(message)

print('%s-%d-%c' % ('abc', 100, 'A'))
==========类型转换==========
1.基本语法
语法:
类型名(数据) - 将指定数据转换成指定类型

说明:
类型名 - 任何python支持的,或者自定的类型都可以
数据 - 需要转换的对象(类型不同要求可能不一样)

2.转换实例
int(数据) -> 将其他数据转换成整型
float(数据) -> 将其他数据转换成浮点型
bool(数据) -> 将其他类型转换成布尔
str(数据) -> 将其他数据转换成字符串
"""

age = input('年龄:')

print(type(age), age)

print('是否能进入网吧:', int(age) >= 18)

1.转换成整型

a = int(-10.90) # 所有浮点数可以转换成整数,直接保留整数部分
b = int(False) # 所有布尔可以转化成整数, True -> 1; False -> 0
c = int('-120') # 只有去掉字符串的引号后本身就是一个整数的字符串才能转换成整型
print(a, b, c)

2.转换成浮点型

a = float(100) # 所有整数都可以转换成浮点数,在后面加.0
b = float(True) # 所有布尔可以转化成浮点数, True -> 1.0; False -> 0.0
c = float('12.9') # 去掉引号后本身就是一个数字的字符串能转换成浮点型
print(a, b, c)

3.转换成布尔类型

python中所有的数据都可以转换成布尔

所有为空为0的值都会转换成False,其他都是True

a = bool(0)
b = bool(-0.0)
c = bool('')
d = bool([])
e = bool({})
f = bool(None)
print(a, b, c, d, e, f)

4.转换成字符串类型

python中所有的数据都可以转换成字符串,而且转换的时候就是单纯的在最外面加引号

a = str(100)
print(a)
print('abc'+str(100))

练习:输入三个数字,求三个数的和

num1 = input('第一个数:')
num2 = input('第二个数:')
num3 = input('第三个数:')
print(float(num1)+float(num2)+float(num3))

inputstr = input('输入三个数以逗号隔开:')

print(inputstr)

表中所有字符串相关方法的使用方式都是: 字符串.方法名()

1.capitalize()

字符串.capitalize() - 将指定的字符串的第一个字符转换成大写字母,返回新的字符串

注意:只有第一个字符是字母的时候才有效

str1 = 'abc'
print(str1.capitalize())

2.字符串对齐方式

"""
字符串.center(width, fillchar) - 居中, width决定新的字符串的长度, fillchar就是用来填充多出来的位置的字符
width是整数,fillchar是字符
字符串.ljust(width, fillchar) - 左对齐
字符串.rjust(width, fillchar) - 右对齐
"""
str1 = 'abc'
print(str1.center(7, '0'))
print(str1.ljust(7, '*'))
print(str1.rjust(7, '='))

3.count

字符串1.count(字符串2) - 在字符串1中统计字符串2出现的次数

print('abc and hight a'.count('abc'))

4.isalpha

字符串.isalpha() - 判断字符串中是否全是字母

注意:非ASCII码表中的字符检测不出来!

print('aSH'.isalpha())

5.join

字符串1.join(字符串2) - 将字符串1插入到字符串2中的每个字符之间

new_str = '**'.join('abc')
print(new_str)

6.split

字符串1.split(字符串2) - 以字符串2去切割字符串1,返回一个列表

print('12,89,90'.split(','))

python1809009

python1809010

练习:输入进班顺序,然后自动产生对应的学号, py1809XXXX

例如:输入1 ——> py18090001 输入32 ——> py18090032 ...

zfill (width) == rjust(width, '0')

num = input('请输入顺序号:')

生成序号后面变化的部分

new_num = num.rjust(4, '0')

new_num = num.zfill(4)

添加固定部分

study_num = 'py1809'+new_num

print(study_num)

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,547评论 6 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,399评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,428评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,599评论 1 274
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,612评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,577评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,941评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,603评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,852评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,605评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,693评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,375评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,955评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,936评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,172评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,970评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,414评论 2 342

推荐阅读更多精彩内容