007.Python基础数据类型之数字与字符串

一、补充:for+range()

(一)使用while循环打印多个值时,操作会稍显繁琐:

count = 0
while count < 3:
    print("=" * 10)
    print("Step 1")
    print("Step 2")
    count += 1   # 实现将内容循环打印多次

(二)使用for循环可以更简单的实现这个操作:

for x in "a" * 3:  
    # in后面跟一个有多个元素的字符串或者容器类型的数据,可以实现与元素数相同的循环次数
	print("=" * 10)
    print("Step 1")
    print("Step 2")

(三)使用range()可以制造一个列表,更方便for循环进行取值:

range(start, stop[, step]) -> range object
#    起始位置   结束位置  步长         range()制造的列表是左闭右开的区间,注意末尾数据不能取到!!

>>> range(1,5,2) # 起始位置,结束位置,步长
[1, 3]
>>>
>>> range(1,5) # 省略步长,默认为1
[1, 2, 3, 4]

range(stop) -> range object
>>> range(5) # 省略起始位置与步长,默认起始位置为0,步长为1
[0, 1, 2, 3, 4]

二、可变与不可变类型

(一)可变类型:

值改变,id不变,说明改变的是原值,是可变类型。

可变类型的数据:list、dictionary。

(二)不可变类型:

值改变,id也改变,说明是产生了新的值,关联了新的内存空间,原值是不可变类型。

不可变类型的数据:integer、float、tuple、set、bool。

三、数字类型数据

在python3中,与数字有关的数据类型有两个,一个是整型integer,另一个是浮点型float,由于斗鱼数字相关,我们将他们归纳为数字类型来理解、记忆。

(一)基本使用

1.用途:

整型int:个数、年龄、号码、年份、月份等与整数相关的数据记录。

浮点型float:薪资、身高、体重等与小数相关的数据记录。

2.定义方式:

1) 整型
age = 18  # 本质上:age = int(18)
a) 数据类型转换:
int可以把纯数字组成的字符串转换成int类型,不可以包含小数点!
int("18")  # 18

2) 浮点型
salary = 3.3  # 本质上:salary = float(3.3)
a) 数据类型转换:
float可以将浮点型数组成的字符串转换成float类型。
float("1.8")  # 1.8

了解:十进制的整数可以转换成其他进制的数字

print(bin(11))  # 0b1011
print(oct(11))  # 0o13
print(hex(11))  # 0xb

3.常用的操作及内置方法

数字类型常用于算数运算以及比较运算。

(二)总结:

1.存一个值or存多个值

int于float都只能存一个值。

2.可变or不可变

int于float都是不可变类型。

四、string字符串类型

(一)基本使用

1.用途:

对事物性质、状态的描述,例如名字、性别、国籍等等。

2.定义方式:

(1)直接定义:在引号(’ ‘, " ", ‘’’ ‘’’, “”" “”")内包含一串字符串。

s = "hello"  # 实质上是:s = str("hello") 

(2)数据类型转换:str功能可以将任意数据类型转换成str类型。

res = str([1, 2, 3])  # "[1, 2, 3]"

3.常用的操作及其内置方法

(1)优先掌握的操作
①按照索引取值:

可以正向取、反向取,只能取。

s = "hello python!"
# 字符串s共13个元素,正向索引位置为  0   1   2   3 ... 12
#                 反向索引位置为 -13 -12 -11 -10 ... -1
1) 正向取
s[6]  # "p"

2) 反向取
s[-5]  # "t"

3) 只能取
s[0] = "H"  # 报错TypeError: 'str' object does not support item assignment
②切片:

顾头不顾尾,步长,这个与之前说的range()取值的范围类似。

切片的本质是从字符串中拷贝出一个字字符串。

注意!!!:起始位置的绝对位置必须在结束位置之前,否则无法正常取值!

a) [start:stop:step]
起始位置:可以省略,省略后默认是0
结束位置:可以省略,省略后默认是-1
步长:可以省略,省略后默认是1,也可以设置负数,逆序截取
s = "hello python!"
# 字符串s共13个元素,正向索引位置为  0   1   2   3 ... 12
#                 反向索引位置为 -13 -12 -11 -10 ... -1
1) 顾头不顾尾,省略步长时默认为1
s[0:9]  # 'hello pyt'  

2) 设置步长以及其他使用方法
s[:9:2]  # 'hlopt'

s[-2:2:1]  # ''  #  无内容,起始位置的绝对位置在结束位置之后了。

s[:]  # "hello python!"  # 完整的拷贝一个字符串

s[::]  # "hello python!"  # 完整的拷贝一个字符串,后面一个冒号可以省略

3) 逆序截取以及反向步长取值,
s[::-1]  # '!nohtyp olleh'

s[-2:-2:-1]  # 'nohtyp ol'
③长度len():

用于获取字符串的长度,注意空格也属于字符串。

s = "hello python!"
len(s)  # 13
④成员运算in和not in:

判断一个子字符串是否在目标字符串中。

s = "hello python!"
print("hell" in s)  # True
print("HELL" not in s)  # True
⑤移除字符strip():

移除字符串首尾指定的字符,默认移除的是空格,得出的结果是新的字符串,未改变原字符串。

1) 括号内不指定字符,默认移除的首尾空白字符(空格,\n换行符,\t纵向制表符)
>>> str1="    zhangsan is not lisi!  /t /n  "
>>> str1.strip()  # 默认去掉的是字符串左右两端的空白字符串
'zhangsan is not lisi!  /t /n'

>>> str1.strip("! /t/n")  # 组合去除字符串,则须将所有需去除的字符串都列出,包括\t \n
'zhangsan is not lisi'

2) 括号内指定字符,则移除首尾指定的字符(实现原理:根据指定的一个或多个字符,在字符串的左右两边开始寻找,碰到第一个不是指定的字符串的字符后,就会停下来)
>>> str2="****zhangsan****"
>>> str2.strip("*")
'zhangsan'
# 使用案例:
user = input("用户名: ").strip()  # 输入内容中误输入空格,可被纠正
password = input("密码: ").strip()
if user == "zhangsan" and password == "123":
    print("账号密码正确")
else:
    print("账号或密码错误")
⑥切分split():

注意:切分的结果是列表数据类型。

1) 括号内不指定字符,默认是以空格作为切分符号。
>>> str3="hello world"
>>> str3.split()
['hello', 'world']

2) 括号内指定分隔符号及切分次数,则按照括号内指定的字符切割字符串,默认的切分次数是全部切分。
>>> ip1="192.168.1.1"
>>> ip1.split(".",2)
['192', '168', '1.1']
⑦循环取值:

字符串可以被for循环遍历取值。

>>> str4="张三VS李四"
>>> for i in str4:
...     print(i)
...
张
三
V
S
李
四
(2)需要掌握的操作:
①strip(), lstrip(), rstrip()

移除两端指定字符,只移除左边指定字符,只移除右边指定字符。

>>> str1="****zhangsan****"

>>> str1.strip("*")
'zhangsan'
>>> str1.lstrip("*")
'zhangsan****'
>>> str1.rstrip("*")
'****zhangsan'
②lower(), upper()

将字符串全部变为小写/大写。

>>> str2="My Name Is Zhangsan!"
>>> str2.lower()
'my name is zhangsan!'
>>> str2.upper()
'MY NAME IS ZHANGSAN!'
③startswith(), endswith()

检测开头字符,检测结尾字符。

>>> str3="zhangsan lisi"

>>> str3.startswith("z")  # 判断字符串是否以指定的字符开头,结果为布尔值True or False。
True
>>> str3.startswith("i")  
False
>>> str3.endswith("i")  # 判断字符是否以指定的字符结尾,结果为布尔值True or False。
True
④格式化输出的三种方式
A.%s的方式:

格式化传的值必须与占位符%s意义对应。

>>> str4="my name is {name}, my age is {age}!"
>>> str4.format(age=99,name="zhangsan")
'my name is zhangsan, my age is 99!'

>>> str4="my name is {name}{name1}{name}, my age is {age}!"
>>> str4.format(age=99,name="zhangsan",name1="lisi")
'my name is zhangsanlisizhangsan, my age is 99!'
B.format的方式:

format可以不依赖顺序进行传值,可以按照参数进行传值。

# 类似%s的用法,传入的值会按照位置与{}一一对应
>>> str4="my name is {}, my age is {}!".format("zhangsan",99)
>>> str4
'my name is zhangsan, my age is 99!'

# 把format传入的多个值当作一个列表,然后用{索引}取值
>>> str4="my name is {0}, my age is {1}!".format("zhangsan",99)
>>> str4
'my name is zhangsan, my age is 99!'

>>> str4="my name is {1}, my age is {0}!".format("zhangsan",99)
>>> str4
'my name is 99, my age is zhangsan!'

>>> str4="my name is {1}, my name is {1}!".format("zhangsan",99)
>>> str4
'my name is 99, my name is 99!'
C.f-string的方式

python3.6的新特性,更高效简洁的传值方式。

name = "tom"
age = 2

print(f"猫的名字叫{name},今年{age}岁了")  # 猫的名字叫tom,今年2岁了

1) 格式化时可以使用函数,函数必须在{}内部
print(F"猫的名字叫{name.upper()},今年{age}岁了")  # 猫的名字叫TOM,今年2岁了

2) 格式化时可以使用字典
cat = {"name": "tom", "age": 2}

print(F"猫的名字叫{cat['name']},今年{cat['age']}岁了")  # 猫的名字叫tom,今年2岁了

3) f包含的字符串可以放到多行
print(f"猫的名字叫{name}"\
      f",今年{age}岁了")  # 猫的名字叫tom,今年2岁了

4) {}内不能有\以及#

5) 显示{}以及%需要外加相同的字符转义
print(f'my name is {{egon}}')

print('胜率是 %s%%' %70)
⑤split(), rsplit()

正向切分(左->右),rsplit() 相当于reverse split() 逆向切分(右->左)。

# split()会按照从左到右的顺序对字符串进行切分,可以指定切分的次数,切分的结果是列表类型数据
>>> str5="zhangsan/love/lisi"
>>> str5.split("/",1)
['zhangsan', 'love/lisi']

# rsplit()与split()相反,从右往左切割,可以指定切割次数,切分结果为列表类型数据
>>> str5="zhangsan/love/lisi"
>>> str5.rsplit("/",1)
['zhangsan/love', 'lisi']
⑥join():

字符串的拼接操作,从可迭代对象中取出多个字符串,然后按照指定的分隔符进行拼接,拼接的结果为字符串。

>>> "%".join("zhangsan")  # 从字符串“zhangsan”中取出多个字符串,然后按照%作为分隔符号进行拼接
'z%h%a%n%g%s%a%n'

>>> "%".join("Hello Python!")# 从字符串“Hello Python!”中取出多个字符串,然后按照%作为分隔符号进行拼接
'H%e%l%l%o% %P%y%t%h%o%n%!'

>>> "*".join(["我","秦始皇","打钱"])  # 从列表中取出多个字符串,然后按照“*”作为分隔符号进行拼接
'我*秦始皇*打钱'

>>> "秦始皇".join(["我","打钱","长生不老"])
'我秦始皇打钱秦始皇长生不老'
⑦replace():

使用新的字符串,替代旧字符串中的指定字符,可以同时指定修改个数。

>>> str7="my name is zhangsan, my age is 99"
>>> str7.replace("99","66")  #  语法:replace("原内容",“新内容”)
'my name is zhangsan, my age is 66'

>>> str7.replace("my","My",1)  #  指定修改个数,只把一个my改为My.
'My name is zhangsan, my age is 99' 
⑧isdigit():

判断字符串是否是纯数字,返回值为布尔值True或False。

>>> str8="19491001"
>>> str8.isdigit()
True

>>> str8="1949.10.01"
>>> str8.isdigit()  #  说明浮点型无法被判断,只能判断整型。
False
(3)了解的操作:
①find(), rfind(), index(), rindex(), count():

字符查找及统计操作。

1) find():在指定范围内查找子字符串的起始索引,找得到则返回数字1,找不到则就会-1;
    rfind()=> reverse find()与相当于出一个反转的find()
print("=abcdefab".find("ab")) #   1  查找一个子字符串在大字符串中出现的起始位置,找到返回数字1
print("=adcabdefab".find("ab",0,5)) #  -1  查找一个子字符串在大字符串中出现的起始位置,找不到返回数字-1
print("=adcabdefab".rfind("ab")) # 从后往前查找一个子字符串在大字符串中出现的起始位置

2) index(): 用法同find,找不到报错
	rindex():用法同rfind,找不到报错

3) count():统计字符串在大字符串中出现的次数
>>> msg = "hello everyone"
>>> msg.count('e')  # 统计字符串e出现的次数
4
②center(), ljust(), rjust(), zfill()

字符填充操作。

>>> name='tony'
>>> name.center(30,'-')  # 总宽度为30,字符串居中显示,不够用-填充
-------------tony-------------
>>> name.ljust(30,'*')  # 总宽度为30,字符串左对齐显示,不够用*填充
tony**************************
>>> name.rjust(30,'*')  # 总宽度为30,字符串右对齐显示,不够用*填充
**************************tony
>>> name.zfill(50)  # 总宽度为50,字符串右对齐显示,不够用0填充
0000000000000000000000000000000000000000000000tony
③expandtabs()

修改制表符代表的空格数。

>>> name = 'tony\thello'  # \t表示制表符(tab键)
>>> name
tony    hello
>>> name.expandtabs(1)  # 修改\t制表符代表的空格数
tony hello
④captalize(), swapcase(), title():

字符大小写转换操作。

1) captalize:首字母大写
>>> message = 'hello everyone nice to meet you!'
>>> message.capitalize()
Hello everyone nice to meet you!  
2) swapcase:大小写翻转
>>> message1 = 'Hi girl, I want make friends with you!'
>>> message1.swapcase()  
hI GIRL, i WANT MAKE FRIENDS WITH YOU!  
3) title:每个单词的首字母大写
>>> msg = 'dear my friend i miss you very much'
>>> msg.title()
Dear My Friend I Miss You Very Much 
⑤is数字系列
#在python3中
num1 = b'4' #bytes
num2 = u'4' #unicode,python3中无需加u就是unicode
num3 = '四' #中文数字
num4 = 'Ⅳ' #罗马数字

#isdigt:bytes,unicode
>>> num1.isdigit()
True
>>> num2.isdigit()
True
>>> num3.isdigit()
False
>>> num4.isdigit() 
False

#isdecimal:uncicode(bytes类型无isdecimal方法)
>>> num2.isdecimal() 
True
>>> num3.isdecimal() 
False
>>> num4.isdecimal() 
False

#isnumberic:unicode,中文数字,罗马数字(bytes类型无isnumberic方法)
>>> num2.isnumeric() 
True
>>> num3.isnumeric() 
True
>>> num4.isnumeric() 
True

# 三者不能判断浮点数
>>> num5 = '4.3'
>>> num5.isdigit()
False
>>> num5.isdecimal()
False
>>> num5.isnumeric()
False

'''
总结:
    最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
    如果要判断中文数字或罗马数字,则需要用到isnumeric。
'''
⑥is其他用法:
>>> name = 'tony123'
>>> name.isalnum() #字符串中既可以包含数字也可以包含字母
True
>>> name.isalpha() #字符串中只包含字母
False
>>> name.isidentifier()
True
>>> name.islower()  # 字符串是否是纯小写
True
>>> name.isupper()  # 字符串是否是纯大写
False
>>> name.isspace()  # 字符串是否全是空格
False
>>> name.istitle()  # 字符串中的单词首字母是否都是大写
False

(二)该类型总结

1.存值个数

字符串类型只能存一个值。

2.是否有序

字符串是有序的。

3.是否可变

字符串是不可变的。

断浮点数

num5 = ‘4.3’
num5.isdigit()
False

num5.isdecimal()
False

num5.isnumeric()
False

‘’’
总结:
最常用的是isdigit,可以判断bytes和unicode类型,这也是最常见的数字应用场景
如果要判断中文数字或罗马数字,则需要用到isnumeric。
‘’’




##### ⑥is其他用法:

```python
>>> name = 'tony123'
>>> name.isalnum() #字符串中既可以包含数字也可以包含字母
True
>>> name.isalpha() #字符串中只包含字母
False
>>> name.isidentifier()
True
>>> name.islower()  # 字符串是否是纯小写
True
>>> name.isupper()  # 字符串是否是纯大写
False
>>> name.isspace()  # 字符串是否全是空格
False
>>> name.istitle()  # 字符串中的单词首字母是否都是大写
False

(二)该类型总结

1.存值个数

字符串类型只能存一个值。

2.是否有序

字符串是有序的。

3.是否可变

字符串是不可变的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值