1.字符串编码
在内存中的编码是unicode的,虽然写入文件时可能是gbk或utf-8的
"""对于单个字符的编码,Python提供了ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符"""
print(ord("a")) #>>97
print(ord("好")) #>>22920
print(chr(22900)) #>>奴
print(chr(97)) #>>a
2.字符串格式化str.format()
通过{ }和 : 来代替以前的 %
两种写法:1)如x = "Hello {0} {1:>10},yo get ${2:0.4f}".format("Mr.","Jack",3.2)
字符串.format() --字符串里面包括索引和具体要求,后面的()里面是变量名
2)如print(str.format("{0:<5}",i),end="")
s += str.format("{0:1} * {1:1} = {2:<3}",i,j,i * j)
str.format() --()里面包括索引和具体要求,用" "括起来,然后“,”,写变量名
x = "Hello {0} {1:10},you get ${2:0.4f}".format("Mr.","Jack",3.2)
"""第一个{0}表示.format函数中第0项;{1:10}表示第一项,长度为10个字符,宽度不足时空格补齐;
$原模原样打出来;{2:0.4f}表示第2项,宽度为0(即没有)“.4f”表示小数保留小数点后4位"""
print(x) #>> Hello Mr. Jack ,you get $3.2000
x = "Hello {0} {1:>10},yo get ${2:0.4f}".format("Mr.","Jack",3.2)
#{1:>10} 表示第1项,">"表示右对齐(宽度不足时空格补在左边)
print(x) #Hello Mr. Jack,you get $3.2000
{序号:宽度.精度 类型} 宽度可以是0
类型:%f (%F):浮点数 ; %d / %i: 十进制整数 ;%s :字符串(str); %b : 二进制整数
%o: 八进制整数 ; %x : 十六进制整数 (b、d、o、x分别为二、十、八、十六)
> : 右对齐
< : 左对齐
^ : 中对齐
>>>"{} {}".format("hello","world") #不设置指定位置,按默认顺序,注意{}中没有空格
输出结果 hello world
print("网站名:{name}, 地址 {url}".format(name="菜鸟教程", url="www.runoob.com"))
# 通过字典设置参数
site = {"name": "菜鸟教程", "url": "www.runoob.com"}
print("网站名:{name}, 地址 {url}".format(**site))
# 通过列表索引设置参数
my_list = ['菜鸟教程', 'www.runoob.com']
print("网站名:{0[0]}, 地址 {0[1]}".format(my_list))
# "0" 是必须的,(索引)表示format()中的my_list
数字格式化
{:+.2f} :3.1415926 --> +3.14带符号保留小数后2位
{:x<4d} : 10 --> 10xx 左对齐,x补在右边,宽度为4,十进制整数
{:,} : 1000000 --> 1,000,000 以逗号分隔的数字格式
{:.2%} : 0.25 --> 25.00% 百分比格式
{:.2e} : 1000000000 --> 1.00e+09 指数记法
如:{0:>10.4f} 表示第0项是小数,以宽度至少是10字符,右对齐(宽度不足时空格补在左边),保留小数点后4位的方式输出。
3.函数的变量
- 一个函数内部定义(赋值)的变量,在函数外部不能使用
- 不同函数中的同名变量不会互相影响
- 函数中的变量和全局变量(在函数外部定义的变量)同名的情况(假设都叫x):
1)如果没有对 x 赋值,函数中的 x 就是全局的 x
2)如果对 x 赋值,且没有特别声明,则在函数中全局的 x 不起作用,函数中的 x 就是只在函数内部起作用的 x。
3)函数内部可以用 global x 声明函数里的 x 就是全局变量 x
x = 4 #全局变量 x
def f0():
print("x in f0:",x) #这个 x 是全局的 x >>x in f0: 4
def f1():
x = 8 #这个 x 是局部的 x,不会改变全局的 x
print("x in f1:",x) #>>x in f1: 8
def f2():
global x #说明本函数中的 x 是全局的 x
print("x in f2:",x) #>>x in f2: 4
x = 5
print("x in f2:",x) #>>x in f2: 5
def f3():
print("x in f3:",x) #会出错。因为后面有赋值而被当作局部的x,此处没赋值就先使用了,不行
x = 9
f0() #>>x in f0: 4
f1() #>>x in f1: 8
print(x) #>>4
f2()
#>>x in f2: 4
#>>x in f2: 5
print(x) #>>5
f3() #调用f3会出错
4.递归
例1:n的阶层
def Factorial(n):
if n < 2:
return 1 #终止条件
else:
return n * Factorial(n-1)
n = int(input("请输入一个整数:"))
a = Factorial(n)
print("n的阶乘为:",a)
例2:求斐波那契数列第n项的函数
def Fib(n):
if n == 1 or n == 2:
return 1
else:
return Fib(n-1)+Fib(n-2)
n = int(input("请输入n:"))
a = Fib(n)
print("第n项值为:",a)
例3:上台阶问题:有n级台阶,每步可以走一级或两级,问有多少种不同
def way(n):
if n == 1:
return 1
if n == 2:
return 2
else:
return way(n-1) + way(n-2)
#第一步走一级的走法(即way(n-1))+第一步走2级的走法(即way(n-2)) 经过计算得出结论
print(way(4)) #>>5