Python基础04-数据类型:数字、布尔、字符串

news/2024/7/5 4:43:08

目录

数字

布尔

字符串

字符串的常用函数

字符串的内存分析

字符串练习题


数字

判断是数字类型还是字符串类型。

# <class 'str'> 123
a = "123"
print(type(a), a)# <class 'int'> 123
b = int(a)
print(type(b), b)

十进制、二进制、八进制、十六进制,搞不懂就不要在IT圈混了。

# 各个进制表示
print("十进制11,也就是:11:", 11)
print("二进制11,也就是3:", 0b11)
print("八进制11,也就是9:", 0o11)
print("十六进制11,也就是17", 0x11)

二进制、八进制、十六进制转换为十进制,通过改变base入参实现。

# 将十六进制数转换为十进制数
num = 'b'
v = int(num, base=16)
print(v)# bit_length的用法
age = 0
while age < 0x10:print(age, ":", age.bit_length())age += 1pass

布尔

布尔就是真假。真True,假Flase。

Python中True存储为数字1,False存储为数字0。

判断真假的方法也很简单,空值None、数字0、空字符串""、空列表[]、空元组()、空字典{}都是False,其余的是True。

print(int(True))   # 1
print(int(False))  # 0print(bool(None)) # False
print(bool(0))    # False
print(bool(""))   # False
print(bool([]))   # False
print(bool(()))   # False
print(bool({}))   # False

字符串

字符串的常用函数

字符串可以获取任意位置的字符,也就是字符串索引(下标),并通过下标获取子字符串(切片)。切片都是前闭后开区间。

可以获取字符串的长度,用len。

test = "Kevin"
# i
# vi
# Kevi
v1 = test[3]
v2 = test[2:4]
v3 = test[0:-1]
print(v1, len(v1))
print(v2, len(v2))
print(v3, len(v3))

大小写转换capitalize、lower、upper、casefold、swapcase

# 首字母大写
test = "alex"
print(test.capitalize())# 英文字母的大写转换为小写
test = "aLex"
print(test.lower())
# 更牛逼的大写转换为小写,任意字母
test = "ΘΠ"
print(test.casefold())
# 转换大小写
test = "θπΘΠ"
print(test.swapcase())

居中填充center、居左填充ljust、居右填充rjust、以某字符串开头startwith、以某字符串结尾endwith、查找子字符串find等实用方法。

# 居中填充 center ***Alex**
# 居左填充 ljust  Alex*****
# 居右填充 rjust  *****Alex
test = "Alex"
vc = test.center(9, "*")
vl = test.ljust(9, "*")
vr = test.rjust(9, "*")
print(vc, vl, vr)# 从第6个开始到第8个结束(不含),计算子字符串个数
test = "aLexalexer"
print(test.count("ex", 6, 8))# 以***开头结尾
test = "aLexalexer"
print(test.endswith("ex", 6, 8))
print(test.startswith("al", 4, 6))# 查找子字符串
test = "aLexalexer"
print(test.find("ex"))
print(test.find("ex", 5, 7)) #[5, 8)
print(test.find("ex", 5, 8)) #[5, 8]

格式化字符串、输出对齐格式化。

# 格式化
# i am {name}, age {a}
# i am Alex, age 19
test = "i am {name}, age {a}"
v1 = test.format(name="Alex", a=19)
v2 = test.format_map({"a": 19, "name": "Alex"})
print(v1)
print(v2)
# 格式化
# i am {0}, age {1}
# i am Alex, age 19
test = "i am {0}, age {1}"
print(test)
v3 = test.format("Alex", 19)
print(v3)# 用expandtabs来实现对齐
# 找到\t也就是tab,将tab转换为空格
# tab前面的字符和转换的空格加起来长度一致
# username            email               password
# lingmk              lingmk@example.com  123456
# alex                alex@gamil.com      1qaz2wsx
# Kevin               kevin@qq.com        password
test = "username\temail\tpassword\nlingmk\tlingmk@example.com\t123456\nalex\talex@gamil.com\t1qaz2wsx\nKevin\tkevin@qq.com\tpassword\n"
v = test.expandtabs(20)
print(v)

字母数字的判断,这个比较复杂。

# is判断
# isalpha 字符串全是字母,不含阿拉伯数字,不包含罗马数字,不含符号
# isnumeric 字符串全是表示顺序的数字字符,比如阿拉伯数字2、汉字二贰、符号②、罗马数字Ⅱ
# islanum  isalpha或isnumeric
# isdigit 字符串全是包含阿拉伯数字的字符,比如2、②
# isdecimal 字符串全是字符表示的数,比如2
#
# string    isalpha   isnumeric isalnum   isdigit   isdecimal
# 2         False     True      True      True      True
# 二         True      True      True      False     False
# 贰         True      True      True      False     False
# ②         False     True      True      True      False
# two       True      False     True      False     False
# Ⅱ         False     True      True      False     False
# +2        False     False     False     False     False
# θπ        True      False     True      False     False
twos = ["2", "二", "贰", "②", "two", "Ⅱ", "+2", "θπ"]
v = "string\tisalpha\tisnumeric\tisalnum\tisdigit\tisdecimal\n"
for s in twos:v += s + "\t"v += str(s.isalpha()) + "\t"v += str(s.isnumeric()) + "\t"v += str(s.isalnum()) + "\t"v += str(s.isdigit()) + "\t"v += str(s.isdecimal()) + "\n"pass
print(v.expandtabs(10))

 检验字符串是不是可用的变量名,是不是关键字。

import keyword
# isidentifier用来检验是否是可用的变量名
# 如果是关键字那么需要用keyword.iskeyword(s)
# name            isidentifier    iskeyword
# π               True            False
# 变量              True            False
# _123            True            False
# val             True            False
# def             True            True
# class           True            True
names = ["π", "变量", "_123", "val", "def", "class"]
val = "name\tisidentifier\tiskeyword\n"
for s in names:val += s + "\t"val += str(s.isidentifier()) + "\t"val += str(keyword.iskeyword(s)) + "\n"pass
print(val.expandtabs(16))

检验字符串中的字符是不是可以显示输出的。

# 检验字符串中的字符是不是可以显示输出的
test = "abdl\tdjf\aso"
print(test)
v = test.isprintable()
print(v)

判断是否都是空白符

# 判断是否都是空白符
test = " \t"
v = test.isspace()
print(v)

英文标题title

# title() 将字符串每个单词首字母大写
# istitle判断时候不是title
#
# this is a title line. False
# This Is A Title Line. True
# 中文标题不是首字母大写规则 False
test = "this is a title line."
en_title = test.title()
cn_title = "中文标题不是首字母大写规则"
vtest = test.istitle()
ven_title = en_title.istitle()
vcn_title = cn_title.istitle()
print(test, vtest)
print(en_title, ven_title)
print(cn_title, vcn_title)

join用当前字符串将另一个字符串test的每个字符间隔开来。

# join用当前字符串将另一个字符串test的每个字符间隔开来
#
# 你是风儿我是沙
# 你 是 风 儿 我 是 沙
# 你__是__风__儿__我__是__沙
test = "你是风儿我是沙"
print(test)
t1 = " "
v1 = t1.join(test)
print(v1)
t2 = "__"
v2 = t2.join(test)
print(v2)

strip去除空白符空格、\t、\n。

# strip去除空白符
# 
#  	left alex right		  20
# left alex right		  18
#  	left alex right 17
# left alex right 15
test = " \tleft alex right\t\t "
vl = test.lstrip()
vr = test.rstrip()
v = test.strip()
print(test, len(test))
print(vl, len(vl))
print(vr, len(vr))
print(v, len(v))# strip去除指定字符串最多匹配的部分
#
# xalex 5
# lex 3   匹配左边xa
# xale 4  匹配右边x
# le 2    匹配左边xa和右边x
test = "xalex"
s = "9axa"
vl = test.lstrip(s)
vr = test.rstrip(s)
v = test.strip(s)
print(test, len(test))
print(vl, len(vl))
print(vr, len(vr))
print(v, len(v))

maketrans和translate一起使用做字符串的对应替换。

# maketrans和translate一起使用做字符串对应替换
#
# this is the test claus.
# 37i3 i3 37e 3e33 8l4u3.
t1 = "thawsc"
t2 = "374638"
m = str.maketrans(t1, t2)
v1 = "this is the test claus."
v2 = v1.translate(m)
print(v1)
print(v2)

partition和split分割字符串。

partition固定分成3份,左一份,匹配一份,右边一份。

split默认分割,匹配的去掉,剩下的各自成一份。可以指定分成几份的。

# partition and split
#
# ('spli', 't', 'partition')
# ('splitparti', 't', 'ion')
# ['spli', 'par', 'i', 'ion']
# ['spli', 'partition']
# ['spli', 'par', 'ition']
# ['spli', 'par', 'i', 'ion']
# ['splitparti', 'ion']
# ['splitpar', 'i', 'ion']
test = "splitpartition"
v1 = test.partition("t")
v2 = test.rpartition("t")
v3 = test.split("t")
v4 = test.split("t", 1)
v5 = test.split("t", 2)
v6 = test.rsplit("t")
v7 = test.rsplit("t", 1)
v8 = test.rsplit("t",2)print(v1)
print(v2)
print(v3)
print(v4)
print(v5)
print(v6)
print(v7)
print(v8)# 只能分割换行符
#
# ['asd', 'sdf', 'dsdf']
# ['asd\n', 'sdf\n', 'dsdf\n']
test = "asd\nsdf\ndsdf\n"
v1 = test.splitlines()
v2 = test.splitlines(True)
print(v1)
print(v2)

字符串的内存分析

在Python中,字符串是不可以改变的,这一点与Java类似。如果字符串加法拼接或者调用函数,那么返回的是一个新的字符串,也就是内存中的一块新区域。

我们以replace函数为例。

# 字符串替换
#
# kevinkevinkevinkevin
# kaxeinkaxeinkevinkevin
s1 = "kevinkevinkevinkevin"
s2 = s1.replace("ev", "axe", 2)
print(s1)
print(s2)

字符串练习题

 写代码实现功能

# 写代码实现功能
name = "aleX"
print("name:", name)
# a.移除name变量对应的值两边的空格,并输出移除后的结果
a = name.strip(" ")
print("a.移除name变量对应的值两边的空格,并输出移除后的结果:", a)
# b.判断name变量对应的值是否以"al"开头,并输出结果
b = name.startswith("al")
print("b.判断name变量对应的值是否以\"al\"开头,并输出结果:", b)
# c.判断name变量对应的值是否以"X"结尾,并输出结果
c = name.endswith("X")
print("c.判断name变量对应的值是否以\"X\"结尾,并输出结果:", c)
# d.将name对应的值中的"l"替换成"P",并输出结果
d = name.replace("l", "P")
print("d.将name中的\"l\"替换成\"P\",并输出结果:", d)
# e.将name对应的值根据"l"分割,并输出结果
e = name.split("l")
print("e.将name对应的值根据\"l\"分割,并输出结果:", e)
# f.将name对应的值根据"l"分割,包括"l",并输出结果
f = name.partition("l")
print("f.将name对应的值根据\"l\"分割,包括\"l\",并输出结果:", f)
# g.将name对应的值变大写,并输出结果
g = name.casefold().upper()
print("g.将name对应的值变大写,并输出结果:", g)
# h.将name对应的值变小写,并输出结果
h = name.casefold()
print("h.将name对应的值变小写,并输出结果:", h)
# i.输出name对应值的第2个字符
print("i.输出name对应值的第2个字符:", name[2])
# j.输出name对应值的前3个字符
print("j.输出name对应值的前3个字符:")
j = name[0:3]
for item in j:print(item)pass
# k.输出name对应值的后2个字符
print("k.输出name对应值的后2个字符:")
k = name[-2:len(name)]
for item in k:print(item)pass
# l.输出name对应值中"e"所在的索引位置
l = name.find("e")
print("l.输出name对应值中\"e\"所在的索引位置", l)
# m.获取子序列,仅不包含最后一个字符。比如oldboy,oldbo;root,roo
m = name[0:-1]
print("m.获取子序列,仅不包含最后一个字符。比如oldboy,oldbo;root,roo:", m)

用代码实现功能

# 用代码实现以下功能
# a.用下划线将列表中的每个元素拼接成字符串,li1 = "alexerictrain"
li1 = "alexerictrain"
a = "_".join(li1)
print(a)
# b.用下划线将列表中的每个元素拼接成字符串,li2 = ["alex", "eric", "train"]
li2 = ["alex", "eric", "train"]
b = "_".join(li2)
print(b)

实现一个整数加法计算器

# 实现一个整数加法计算器
# content = input("请输入内容:"),比如5+9, 9+ 5, 5 + 9等
content = input("请输入内容:")
nums = content.split("+")
val = 0
for num in nums:val += int(num.strip())pass
print(val)

计算用户输入多少个十进制小数,多少个字母

# 计算用户输入多少个十进制小数,多少个字母
# content = input("请输入内容:"),比如asduiaf878123jkjsfd-213928
content = input("请输入内容:")
count_decimal = 0
count_alpha = 0
for item in content:if item.isdecimal():count_decimal += 1passif item.isalpha():count_alpha += 1passpass
print("十进制小数:", count_decimal)
print("字母:", count_alpha)

制作模板程序,等待用户输入名字、地点、爱好。输出:敬爱可亲的xxx,最喜欢在xxx干xxx。

# 制作模板程序,等待用户输入名字、地点、爱好
# 输出:敬爱可亲的xxx,最喜欢在xxx干xxx。
template = "敬爱可亲的{who},最喜欢在{where}干{what}。"
who = input("请输入名字:")
where = input("请输入地点:")
what = input("请输入爱好:")
val = template.format(who=who, where=where, what=what)
print(val)

制作随机验证码程序

# 制作随机验证码程序,不区分大小写
# 过程
# 用户执行程序
# 程序显示验证码
# 用户输入验证码
# 用户输入值域验证码一致显示正确,否则继续生成验证码等待输入def check_code():import randomcheckcode = ""for i in range(4):current = random.randrange(0, 4)if current != i:temp = chr(random.randint(65, 90))else:temp = random.randint(0, 9)checkcode += str(temp)return checkcodewhile True:code = check_code()print("验证码:", code)input_code = input("请输入验证码:")if code.casefold() == input_code.strip().casefold():print("验证码正确!")breakpass

敏感词过滤程序

# 敏感词过滤程序,提示用户输入,将输入的"苍井空","东京热"替换为"***"
# 测试用的字符串可能包含苍井空,波多野结衣,樱心美,冲田杏梨,西条琉璃,樱井莉亚,初音实等词汇,她们有一部分出演了东京热的片子
content = input("请输入内容:")
process1 = content.replace("苍井空", "***")
process2 = process1.replace("东京热", "***")
print(process2)

表格显示

# 表格显示
# 提示用户输入姓名、邮箱、密码,都不得超过20字符,超过则截取前20个字符
# 如果用户输入q或者Q则表示输入结束,以表格形式打印输入
content = "姓名\t邮箱\t密码\n"
while True:name = input("请输入姓名(不得超过20字符):")if name.casefold() == "q":breakpassif len(name) > 20:content += name[0:20] + "\t"else:content += name + "\t"passemail = input("请输入邮箱(不得超过20字符):")if email.casefold() == "q":breakpassif len(email) > 20:content += email[0:20] + "\t"else:content += email + "\t"passpassword = input("请输入密码(不得超过20字符):")if password.casefold() == "q":breakpassif len(password) > 20:content += password[0:20] + "\n"else:content += password + "\n"passpass
val = content.expandtabs(30)
print(val)

 


http://lihuaxi.xjx100.cn/news/236122.html

相关文章

人工智能承诺就业革命,但仍需传统的体力劳动

在北京郊区的一栋五层苏式工厂大楼里&#xff0c;一群年轻女性整齐的坐在工位前&#xff0c;每天盯着电脑&#xff0c;进行着重复性的工作。她们需要观察日常生活中的图像&#xff0c;然后汇总成图表。人工智能的到来被称为第四次工业革命&#xff0c;它承诺将人类从大量重复性…

java基础(十三)-----详解内部类——Java高级开发必须懂的

java基础(十三)-----详解内部类——Java高级开发必须懂的 目录 为什么要使用内部类内部类基础静态内部类 成员内部类 成员内部类的对象创建继承成员内部类局部内部类推荐博客匿名内部类正文 可以将一个类的定义放在另一个类的定义内部&#xff0c;这就是内部类。 回到顶部为什么…

Python基础05-数据类型:列表list

目录 列表 列表的一般用法 列表的方法 列表 列表的一般用法 列表用[]括起来&#xff0c;用逗号分隔元素。元素可以是任意的类型。 可以用len获取列表的长度&#xff0c;也就是元素的个数。 # 列表是个大杂烩&#xff0c;什么类型都可以往里面装 li [2019, 12, "存储…

分享:用promise封装ajax

用promise封装ajaxvar ajaxOptions {url: url,method: GET,async: true,data: null,dataType: text, } function ajax(protoOptions) {var options {};for(var i in ajaxOptions){options[i] protoOptions[i] || ajaxOptions[i];}return new Promise(function(resolve, reje…

其他进制的数字

JS中如果需要表示16进制的数字,则需要以0X开头 0X10 八进制数字以0开头 070 070有些浏览器会以8进制解析,但是有些则用10进制解析,10进制为70,8进制为56 所以parseint() 第二个参数可以设定进制,比如 parseint(“070”,10)代表以10进制解析070 2进制以0b开头,但是不是所有浏览…

Python基础06-数据类型:元组tuple

目录 元组 元组的一般用法 元组的方法 元组 元组的一般用法 元组用()括起来&#xff0c;用逗号分隔元素&#xff0c;元素类型是任意的。因为函数、方法的调用也是用()括起来&#xff0c;为了避免混淆&#xff0c;写元组的时候&#xff0c;在最后一个元素后面多写一个逗号。…

一招:裂变方法论3点核心要素

我写过一次海报裂变的操作流程&#xff0c;当时看完文章并且去操作的人还不少。但事后给我的反馈是&#xff0c;有相当一部分人还是不知道怎么做。这其实也验证了一个观点&#xff0c;方法如果没有方法论做指导&#xff0c;长久来看&#xff0c;也只是杂乱无章的动作。这是因为…

埃森哲、亚马逊和万事达卡抱团推出的区块链项目有何神通?

据外媒报道&#xff0c;今日埃森哲宣布了一项新的区块链项目&#xff0c;该项目为基于区块链的循环供应链&#xff0c;将与万事达卡和亚马逊共同合作。据官方介绍&#xff0c;这个基于区块链的循环供应链能够让客户识别供应链上的小规模供应商和种植者&#xff0c;例如&#xf…