Python变量与字符串


1. 变量


1.1 变量介绍

程序的作用就是用来 处理数据
编程语言中数据使用 变量 的形式保存
为变量设置值的过程,称为 赋值

  • \color{grey}{语法格式:}

单变量赋值:变量名 = 值
多变量赋值:变量名1,变量名2,变量名3 = 值1,值2,值3
一值赋多名:变量2 = 变量1 = 值

等号左边是变量的名称,等号右边是变量要保存的数据

  • \color{blue}{示例:}
>>> message = "hello,world!"
>>> print(message)
hello,world!
 
# 在程序中可以随时修改变量的值,Python始终记录变量的最新值
>>> message = "hello,Python world!"
>>> print(message)
hello,Python world!

# 多变量赋值
>>> a,b,c = 1,2,3
>>> print(a)
1
>>> print(b)
2
>>> print(c)
3

# 多变量赋同一个值
>>> name1 = name2 = "xiaoming"
>>> print(name1)
xiaoming
>>> print(name2)
xiaoming
  • \color{red}{变量规则:}
  • 变量名只能包含 字母数字下划线
  • 变量名可以 字母下划线 开头,不能以数字开头
  • 变量名不能包含空格,可以使用 下划线 来分隔其中的单词
  • 不要将Python关键字和函数名用作变量名
  • 变量名应该 简短且具有描述性,见名知其义

1.2 变量的数据类型

变量在赋值时会自动判断数据的类型

  • \color{green}{常用的数据类型:}

字符串 :str(string)
整数:int(integer)
浮点数:float
布尔型:bool(boolean)

其中,布尔型数据的结果只能为 TrueFalse

  • \color{blue}{示例:}
>>> name = "xiaoming"    # str
>>> age = 21    # int
>>> height = 172.5    # float
>>> marital_status = False    # bool
  • \color{grey}{获取变量的数据类型:}

函数:type()
用法:type(变量名)

  • \color{blue}{示例:}
# 接上示例
>>> type(name)
<class 'str'>
>>> type(age)
<class 'int'>
>>> type(height)
<class 'float'>
>>> type(marital_status)
<class 'bool'>

1.3 类型错误

在字符串中使用整数时,需要显式地指出你希望Python将这个整数用作字符串,否则就会出现如下错误:


演示.png

age = "23"age = 23 是两种不同类型的值,前者用引号括起来的表示为 str ,后者为 int 类型,可调用函数 str() ,它让python将非字符串值表示为字符串

  • \color{blue}{示例:}
# 函数str()将非字符串值表示为字符串
>>> age = 23
>>> message = "Happy " + str(age) + "rd birthday!"
>>> print(message)
Happy 23rd birthday!

大多数情况下,在Python中使用数字都非常简单,如果结果出乎意料,请检查Python是否按你期望的方式将数字解读为了数值或字符串


1.4 接收用户输入

  • \color{green}{方法:}

函数:input()
用法:变量 = input("提示信息")

input() 函数接受一个标准输入数据,获取输入后,将其存储在变量中,供后续使用

  • \color{blue}{示例1:}
# 输入字符串
>>> message =  input("Please input: ")
Please input: hello
>>> print(message)    # 简化排版,后面省略打印这一步
hello
>>> type(message)
<class 'str'>

# 输入整数
>>> message =  input("Please input: ")
Please input: 20
>>> type(message)
<class 'str'>

# 输入浮点数
>>> message =  input("Please input: ")
Please input: 3.14
>>> type(message)
<class 'str'>

注意,变量返回的是 string 类型

  • \color{blue}{示例2:}
# 转换为整数
>>> message =  input("Please input: ")
Please input: 20
>>> message = int(message)
>>> type(message)
<class 'int'>

# 转换为浮点数
>>> message = float(message)    # 简化排版,后面省略input这一步
>>> type(message)
<class 'float'>

# 或者输入时就进行转换
>>> message =  int(input("Please input: "))
Please input: 20
>>> type(message)
<class 'int'>
--snip--

可以使用 int()float() 函数将其转为对应的数据类型



2.字符串


2.1 字符串介绍

  • 在Python中,用引号引起来的都是字符串
  • 引号可以是单引号,也可以是双引号

有时字符串里已含有引号(如英文撇号等),此时再使用与之相同的引号打印该字符串就会出错


演示.png
  • \color{grey}{解析单引号为字符串:}

"'string'"
'\\'string\\''

  • \color{grey}{解析双引号为字符串:}

'"string"'
"\\"string\\""

  • \color{blue}{示例:}
# 让字符串包含单引号:
>>> print("这是一个用双引号显示'单引号'的示例")
>>> print('这是一个用转义符显示\'单引号\'的示例')
这是一个用双引号显示'单引号'的示例
这是一个用转义符显示'单引号'的示例


# 让字符串包含双引号:
>>> print('这是一个用单引号显示"双引号"的示例')
>>> print("这是一个用转义符显示\"双引号\"的示例")
这是一个用单引号显示"双引号"的示例
这是一个用转义符显示"双引号"的示例

2.2 修改大小写

  • \color{grey}{方法:}

全部小写:lower()
全部大写:upper()
单词首字母大写:title()
字符串首字母大写:capitalize()
大小写互换:swapcase()

  • \color{blue}{示例:}
# 全部小写
>>> name = "Ada Lovelace"
>>> print(name.lower())
ada lovelace

# 全部大写
>>> name = "Ada Lovelace"
>>> print(name.upper())
ADA LOVELACE

# 所有单词首字母大写
>>> name = "ada lovelace"
>>> print(name.title())
Ada Lovelace

# 字符串首字母大写
>>> print("ada lovelace".capitalize())
Ada lovelace

# 大小写互换
>>> print("Ada Lovelace".swapcase())
aDA lOVELACE

存储数据时,方法 lower() 很有用,很多时候无法依靠用户来提供正确的大小写,因此需要将字符串先转换为小写,再存储它们,以后需要显示这些信息时,再将其转换为正确的大小写


2.3 合并(拼接)

  • \color{gley}{语法格式:}

string1 + 变量名1 + string2

  • \color{blue}{示例:}
>>> first_name = "xiao"
>>> last_name = "ming"
>>> full_name = first_name + " " + last_name
 
>>> message = "Hello," + full_name.title() + "!"
>>> print(message)
HELLO,Xiao Ming!

可以使用拼接来创建消息,再把整条消息都存储在一个变量中


2.4 添加空白

在编程中,空白泛指任何非打印字符,如空格、制表符和换行符

制表符:\t
换行符:\n
换行符加制表符:\n\t

  • \color{blue}{示例:}
# 缩进
>>> print("\tPython")
    Python
# 换行
>>> print("Languages:\nPython\nC\nJava")
Languages:
Python
C
Java
# 换行并缩进
>>> print("Languages:\n\tPython\n\tC\n\tJava")
Languages:
    Python
    C
    Java

2.5 删除空白

  • \color{grey}{方法:}

删除开头空白:lstrip()
删除末尾空白:rstrip()
删除两端空白:strip()

  • \color{blue}{示例:}
>>> favorite_language = ' Python '
# 删除开头
>>> favorite_language.lstrip()
'Python '
# 删除末尾
>>> favorite_language.rstrip()
' Python'
# 删除两边
>>> favorite_language.strip()
'Python'

# 方法删除空白只是暂时的,想要永久删除,必须将删除操作的结果存回变量中
>>> favorite_language
' Python '
>>> favorite_language = favorite_language.strip()
>>> favorite_language
'Python'

2.6 格式化字符串

  • \color{green}{方法:}

函数:format()

  • \color{green}{参数为变量或字符串::}

{[参数索引]}{[参数索引]}.format(变量1, "string1")
{name1}{name2}.format(name1=变量1, name2="string1")

  • \color{green}{参数为列表:}

{参数索引[列表索引]}{参数索引[列表索引]}.format(列表1, 列表2)

  • \color{green}{参数为字典:}

{key1}{key2}.format(**字典名)

语法格式有些类似于正则表达式中的后向引用,默认函数前面的第一个花括号对应函数的第一个参数,也可以用参数的索引值 注意索引是从0开始 或参数的二次赋值名来更改顺序

  • \color{blue}{示例1:}
# 默认第一个花括号对应format()的第一个参数
>>> "{},{}!".format("hello", "world")
'hello,world!'
>>>
>>> name = "小明"
>>> age = 21
>>> height = 172
>>> str1 = "我叫{},今年{}岁,身高{}".format(name, age, height)
>>> print(str1)
我叫小明,今年21岁,身高172

# 指定索引值或二次赋值名
>>> "{1}: {0},{1}!".format("hello", "world")
'world: hello,world!'
>>>
>>> str2 = "我叫{0},身高{2},今年{1}岁".format(name, age, height)
>>> print(str2)
我叫小明,身高172,今年21岁
>>> str3 = "我叫{p1},身高{p3},今年{p4}岁.我在{p2}班".format(p1=name, p2="3-2", p3=height, p4=age)
>>> print(str3)
我叫小明,身高172,今年21岁.我在3-2班

format() 函数可以接受不限个参数,位置可以不按顺序

  • \color{blue}{示例2:}
# 通过列表设置参数,{参数索引[列表索引]}.format(列表1, 列表2...)
>>> my_list = ['简书', 'www.greatytc.com']
>>> print("网站名: {0[0]}\n地址: {0[1]}".format(my_list))  # 参数索引不能省略
网站名: 简书
地址: www.greatytc.com

# 通过字典设置参数
>>> site = {"name": "简书", "url": "www.greatytc.com"}
>>> print("网站名: {name}\n地址: {url}".format(**site))
网站名: 简书
地址: www.greatytc.com

使用列表参数时参数索引不能省略


2.7 格式化数字

format() 函数同样支持数字格式化,在字符串格式化输出时,如遇要格式化输出的数字,则需在 {} 内增加 : 前缀,之后写上数字格式化语句

  • \color{green}{小数位保留\#位:}

format(浮点数, '0.#f')
"{:0.#f}".format(浮点数)

  • \color{green}{千分位分隔符:}

format(数字, ',')

  • \color{green}{数字左边补\#个0:}

"{:0>#d}".format(数字)

  • \color{green}{数字右边补\#个x:}

"{:x<#d}".format(数字)

参考自菜鸟教程

  • \color{blue}{示例1:}
# 小数保留3位(会四舍五入)
>>> format(3.1415, '0.3f')
'3.142'
# 千分位分隔
>>> format(1234.567, ',')
'1,234.567'
# 整数位千分,小数位保留3位
>>> format(123456789, '0,.3f')
'123,456,789.000'
  • \color{blue}{示例2:}
>>> account = "88888888"
>>> amt = 123456789
# 整数位千分,小数保留3位
>>> str1 = format(amt, "0,.3f")
>>> print(str1)
123,456,789.000
# 示例
>>> str2 = "请你向" + account + "账户转账¥" + str1 + "元"
>>> print(str2)
请你向88888888账户转账¥123,456,789.000元
# 示例优化
>>> str3 = "请你向{}账户转账¥{:0,.3f}元".format(account, amt)
>>> print(str3)
请你向88888888账户转账¥123,456,789.000元

注意,format() 函数格式化后的数字是 str() 类型


2.8 早期的格式化输出

  • \color{green}{语法:}

字符串:%s
整数:%d
浮点数:%f

  • \color{blue}{示例:}
>>> print("He is %d years old" %(21))
He is 21 years old
>>> print("我叫%s,今年%d岁,体重%.2f公斤"%("小明", 21, 65.5))
我叫小明,今年21岁,体重65.50公斤


3. 字符串查找与替换


3.1 字符串查找

  • \color{grey}{方法:}

函数:find()
用法:string.find(目标串, [开始位置], [结束位置])

用于获取子字符串出现的位置
注意 索引值是从0开始

  • \color{blue}{示例:}
>>> "Nice to meet you".find("ee") 
9
>>> "Nice to meet you".find("e")
3
>>> "Nice to meet you".find("e", 4)
9
>>> "Nice to meet you".find("e", 10)
10
>>> "Nice to meet you".find("e", 10, 15)
10
# 未找到返回-1
>>> "Nice to meet you".find("e", 11)
-1
>>> "Nice to meet you".find("too")
-1

当要查找的子字符串不在指定的索引范围内,或者不存在时,查找结果会返回-1


3.2 字符串替换

  • \color{grey}{方法:}

函数:replace()
用法:string.replace(原始值, 目标值, [替换次数])

不填次数则默认全部替换

  • \color{blue}{示例:}
# 替换2次
>>> "aaabbbccc".replace("b", "d", 2)
'aaaddbccc'
# 全部替换
>>> "aaabbbccc".replace("b", "d")
'aaadddccc'
# 替换的值不存在时返回原字符串
>>> "aaabbbccc".replace("d", "a")
'aaabbbccc'


4. 注释

  • 在大多数编程语言中,注释都是一项很有用的功能
  • 随着程序越来越大,越来越复杂,就应在其中添加说明,对解决问题的方法进行大致的阐述
  • 注释让你能够使用自然语言在程序中添加说明
  • 编写注释的主要目的是阐述代码要做什么,以及是如何做的

4.1 单行注释

\color{gray}{方法:}

  • 以# 开头
  • 以三个双引号或三个单引号开头和收尾
  • \color{blue}{示例:}
# 这是一个单行注释
"""这也是一个单行注释"""
'''大家都是单行注释'''
print("单行注释")

  -- run --
单行注释

4.2 多行注释

\color{gray}{方法:}

以三个双引号或三个单引号开头和收尾

  • \color{blue}{示例:}
'''
这是多行注释,用三个单引号
这是多行注释,用三个单引号
这是多行注释,用三个单引号
'''
print("Hello,World!")

"""
这是多行注释,用三个双引号
这是多行注释,用三个双引号
这是多行注释,用三个双引号
"""
print("Hello,Python!")

  -- run --
Hello,World!
Hello,Python!

  • \color{red}{总结:}

  1. 多行注释 """/'''也可用于单行注释,注释符首尾呼应即可
  2. 单行注释 # 不可用于多行注释,除非每行开头都加上#


5. Python之禅

  • Python社区的 理念 都包含在Tim Peters撰写的Python之禅中
  • 在Python解释器中输入 import this 查看Python之禅
  • \color{red}{Python之禅:}
>>> import this
The Zen of Python, by Tim Peters

Beautiful is better than ugly.
Explicit is better than implicit.
Simple is better than complex.
Complex is better than complicated.
Flat is better than nested.
Sparse is better than dense.
Readability counts.
Special cases aren't special enough to break the rules.
Although practicality beats purity.
Errors should never pass silently.
Unless explicitly silenced.
In the face of ambiguity, refuse the temptation to guess.
There should be one-- and preferably only one --obvious way to do it.
Although that way may not be obvious at first unless you're Dutch.
Now is better than never.
Although never is often better than *right* now.
If the implementation is hard to explain, it's a bad idea.
If the implementation is easy to explain, it may be a good idea.
Namespaces are one honking great idea -- let's do more of those!
  • \color{green}{释义:}
  • Beautiful is better than ugly.
    优美胜于丑陋(Python 以编写优美的代码为目标)
  • Explicit is better than implicit.
    明了胜于晦涩(优美的代码应当是明了的,命名规范,风格相似)
  • Simple is better than complex.
    简洁胜于复杂(优美的代码应当是简洁的,不要有复杂的内部实现)
  • Complex is better than complicated.
    复杂胜于凌乱(如果复杂不可避免,那代码间也不能有难懂的关系,要保持接口简洁)
  • Flat is better than nested.
    扁平胜于嵌套(优美的代码应当是扁平的,不能有太多的嵌套)
  • Sparse is better than dense.
    间隔胜于紧凑(优美的代码有适当的间隔,不要奢望一行代码解决问题)
  • Readability counts.
    可读性很重要(优美的代码是可读的)
  • Special cases aren't special enough to break the rules.
  • Although practicality beats purity.
    即便假借特例的实用性之名,也不可违背这些规则(这些规则至高无上)
  • Errors should never pass silently.
  • Unless explicitly silenced.
    不要包容所有错误,除非你确定需要这样做(精准地捕获异常,不写 except:pass 风格的代码)
  • In the face of ambiguity, refuse the temptation to guess.
  • There should be one-- and preferably only one --obvious way to do it.
  • Although that way may not be obvious at first unless you're Dutch.
    当存在多种可能,不要尝试去猜测,而是尽量找一种,最好是唯一一种明显的解决方案(如果不确定,就用穷举法),虽然这并不容易,因为你不是 Python 之父(这里的 Dutch 是指 Guido)
  • Now is better than never.
  • Although never is often better than right now.
    做也许好过不做,但不假思索就动手还不如不做(动手之前要细思量)
  • If the implementation is hard to explain, it's a bad idea.
  • If the implementation is easy to explain, it may be a good idea.
    如果你无法向人描述你的方案,那肯定不是一个好方案;反之亦然(方案测评标准)
  • Namespaces are one honking great idea -- let's do more of those!
    命名空间是一种绝妙的理念,我们应当多加利用(倡导与号召)

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