python基础day04笔记
2018.7.5
day03回顾:
字符串 str
- ''
- ""
- ''''''
- """"""
- '''first line
- second line'''
字符串内的转义字符 '\'
- \n
- \r
- \t
- \'
- \"
- \\
- \xXX
- \uXXXX
- \UXXXXXXXX
ascii (记录128个英文字符对应的编码)
Unicode (记录65536个文字(包含英文的128个ASCII))
ASCII与UNICODE的区别:
ASCII 用8个位表示文字,最高位一定为0,低7位表示数值
UNICODE16是由16个位组成的(0~65535)0x0000~0xFFFF
原始字符串
- r''
- r""
- r''''''
- r""""""
- '\n' != r'\n'
字符串的运算
- < <= > >= == !=
- + * += *=
- in, not in
- 索引, 切片
函数:
- len(x)
- max(x) 求最大值的字符
- min(x)
- ord(单个字符)
- chr(整数)
- hex(i)
- oct(i)
- bin(i) 转为字符串
- str(obj) #将对象转为字符串
常用的字符串
S.count
S.strip()
S.center()
S.replace()
S.startswith()
S.endswith()
....详见文档
查看字符串的方法:
>>> help(str) # str是字符串的类型
day04笔记
字符串的格式化表达式
作用:
- 生成一定格式的字符串
语法格式:
- 格式字符串 % 参数值
- 格式字符串 % (参数值1, 参数值2, ...)
说明:
- 格式化字符串中以%开头的为占位符,占位符的位置将用参数值替换
示例:
fmt="name:%s, age: %d"
name = "tarena"
age = 15
s = fmt % (name, age) # s = 'name:tarena, age: 15'
print()
格式化字符串中的占位符和类型码:
- %s 字符串,使用str(obj)转为字符串
- %r 字符串,使用repr(obj) 转为字符串
- %c 整数转为字符串,使用chr(i) 函数
- %d 十进制整数
- %o 八进制整数
- %x 十六进制整数(字符a-f小写)
- %X 十六进制整数(字符A-F大写)
- %e 指数型浮点数(e小写) 如 2.9e+10
- %E 指数型浮点数(E大写) 如 2.9E+10
- %f,%F 浮点十进制形式
- %g,%G 进制进形式浮点或指数浮点自动转换
- %% 等同于一个%字符
占位符和类型码之间的格式语法:
- % [- + 0 宽度.精度] 类型码
- - 左对齐(默认是右对齐)
- + 显示正号
- 0 左侧空白位置补零
- 宽度: 整个数据输出的宽度
- 精度: 保留小数点后多少位,默认6位
示例:
- "%10d" % 123 # ' 123'
- "%+10d" % 123 # ' +123'
- "%-10d" % 123 # '123 '
- "%10s" % "ABC" # ' ABC'
- "%05d" % 123 # '00123'
- "%f" % 3.1416926535897932 # '3.141593'(保存小数点6位,四舍五入)
- "%7.2f" % 3.1416926535897932 # ' 3.14'(3前面3空格,7代表7个字符,2代表小数点2位)
练习:
输入三行文字,让这三行文字依次以20个字符的宽度右对齐输出
如:
请输入第1行: hello world
请输入第2行: aaa
请输入第3行: ABCDEFG
输出结果如下:
hello world
aaa
ABCDEFG
做完上面的题后思考:
能否以最长的字符串的长度进行右对齐显示(左侧填充空格)
a = input("请输入第1行: ")
b = input("请输入第2行: ")
c = input("请输入第3行: ")
# 方法1
print("%20s" % a)
print("%20s" % b)
print("%20s" % c)
# 方法2
# print(' ' * (20 - len(a)) + a)
# print(' ' * (20 - len(b)) + b)
# print(' ' * (20 - len(c)) + c)
print('----------以最长字符串长度进行右对齐------')
# 方法1
# max_length = len(a)
# if len(b) > max_length:
# max_length = len(b)
# if len(c) > max_length:
# max_length = len(c)
# print("最长的字符串长度为:", max_length)
# print(' ' * (max_length - len(a)) + a)
# print(' ' * (max_length - len(b)) + b)
# print(' ' * (max_length - len(c)) + c)
# 方法2
max_length = max(len(a), len(b), len(c))
# fmt = '%' + str(max_length) + 's' # "%数字s"
fmt = '%%%ds' % max_length # "%数字s"
print('=====>', fmt)
print(fmt % a)
print(fmt % b)
print(fmt % c)
循环语句:
- while 语句
- for 语句
问题:
输入一个整数n, 写程序打印如下:
这是第 1 行
这是第 2 行
这是第 3 行
...
这是第 n 行
问题:
如何让一条语句重复执行多次?
用:
print("这是第", i, '行')
能否实现
while 语句
作用:
根据一定条件,重复的执行一条语句或多条语句
语法:
- while 真值表达式:
- 语句块1
- else:
- 语句块2
说明:
- 先执行真值表达式,测试布尔值是否为True或False
- 如果真值表达式测试值为True,则执行语句块1,然后再返回到第1步,重重进行测试
- 如果真值表达式测式值为False, 则执行else子句中的语句块2,然后结束此while语句,如果没有else子句,则直接结束此while语句的执行
注:
- else 子句部分可以省略(同 if语句类似)
示例见:
i = 1 # 先定义一个变量,用于控制循环条件
while i <= 10:
print("这是1 行文字")
i += 1
print("程序结束")
练习:
1. 输入一行字符串,将字符串中Unicode编码值最大的一个字符打印出来(不允许用max函数)
(提示: while语句内可以嵌入 if 语句进行判断)
s = input('请输入字符串: ') # 'ABCD'
zuida = s[0] # 先假设第一个字符最大
i = 1 # 循环变量,用于记录字符串第二个字符起的起始位置
# i一定小于len(s) 字符串长度
while i < len(s): # 当索引超出最大索引时结束循环
next_char = s[i] # 获取下一个字符
# 如果下一个字符的编码值大于zuida的编码值,则改变zuida
if ord(next_char) > ord(zuida):
zuida = next_char
i += 1 # 下标(索引)向后移动一个
print("编码值最大的一个字符是:", zuida)
2. 打印 从零开始的浮点数,每个数增加 0.5, 打印出10以内的这样的数:
0.0
0.5
1.0
1.5
...
9.5
i = 0.0
while i < 10:
print(i)
i += 0.5
练习:
1. 打印 1 ~ 20的整数
i = 1
while i <= 20:
print(i)
i += 1
2. 打印从10开始 到 0(不包含0)之间的整数
i = 10
while i > 0:
print(i)
i -= 1
3. 打印 1 ~ 20的整数,打印在一行内
i = 1
while i <= 20:
print(i, end=' ')
i += 1
print() # 换行
4. 打印 1 ~ 20的整数,每行打印5个,打印四行如:
1 2 3 4 5
6 7 8 9 10
11 12 .....
.....
提示: while中可以嵌入if语句来换行
# 方法1
# i = 1
# while i <= 20:
# print(i, end=' ')
# if i == 5:
# print()
# if i == 10:
# print()
# if i == 15:
# print()
# if i == 20:
# print()
# i += 1
#方法2
i = 1
while i <= 20:
print(i, end=' ')
if i % 5 == 0:
print()
i += 1
5. 输入一个整数n, 打印出一个长方形
n 代表长方形的宽度的字符数和高的行数
例如:
请输入:4
打印:
####
# #
# #
####
请输入:6
打印:
######
# #
# #
# #
# #
######
n = int(input("请输入宽/高: "))
# 第一行
print('#' * n)
# 中间行(n-2行)
i = 1
while i <= n - 2:
# 打印每一行
# s = '#' + ' ' * (n -2) + '#'
# print(s)
print('#', ' ' * (n - 2), '#', sep='')
i += 1
# 最后一行
print('#' * n)
while 语句的注意事项:
要控制循环真值表达式的值来防止'死循环'
通常用真值表达式内的循环变量来控制循环条件
通常在循环语句块内改变循环变量来控制循环次数和变量走向
while 语句的嵌套
while 语句本身是语句,和其它语句一样,可以嵌套放入任何复合语句中
示意:
while 真值表达式:
...
while 真值表达式2:
...
else:
...
else:
...
示例:
打印1~20之间的整数,打印在一行
1 2 3 4 5 6 ......... 20
打印以上的十行
j = 0
while j < 10:
i = 1
while i <= 20:
print(i, end=' ')
i += 1
else:
print() # 打印换行
# print('1 2 3 4 5 6 7 8 ..... 10')
j += 1
sublime text 3 快捷键:
- ctrl + shift + 上下 # 交换行
- ctrl + ] # 向右缩进
- ctrl + [ # 向左缩进
练习:
输入一个数,打印指定宽度的正方形
如:
输入: 5
打印如下正方形:
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
1 2 3 4 5
如:
输入: 3
打印如下正方形:
1 2 3
1 2 3
1 2 3
n = int(input("请输入一个数: "))
# 先写一个循环,打印n行任意的数
i = 0 # 控制外重循环的变量
while i < n:
# 打印其中的一行:
j = 1 # 控制一行内数字的变量
while j <= n:
print(j, end=' ')
j += 1
print() # 打印一行后的换行
i += 1
# 1 2 3 4 5
# 1 2 3 4 5
# 1 2 3 4 5
# 1 2 3 4 5
# 1 2 3 4 5
练习:
1. 写程序,计算:
1 + 2 + 3 + 4 + ..... + 99 + 100的和
2. 写程序,任意输入一个数n,计算:
1 + 2 + 3 + 4 + ..... + (n-1) + n的和
# 练习:
# 1. 写程序,计算:
# 1 + 2 + 3 + 4 + ..... + 99 + 100的和
s = 0 # 先创建一个变量,用来存储所有数的和
i = 1 # 整数的起始数
while i <= 100:
s += i # 把i的值累加到s当中
i += 1
print('和是:', s)
# 2. 写程序,任意输入一个数n,计算:
# 1 + 2 + 3 + 4 + ..... + (n-1) + n的和
n = int(input("请输入结束整数: "))
s = 0 # 先创建一个变量,用来存储所有数的和
i = 1 # 整数的起始数
while i <= n:
s += i # 把i的值累加到s当中
i += 1
print('和是:', s)
break 语句
问题:
如果在循环过程中不想再继续此循环语句的执行了,怎么办?
作用:
用于循环语句(while, for)中,用来终止当前循环语句的执行
说明:
- 当break语句执行后,此循环语句break之后的语句将不再执行
- break 语句通常和 if 语句组合使用
- break语句终止循环时,循环语句else子句的语句将不会执行
- break 语句只能终止当前循环语句的执行,如果有循环嵌套时,不会跳出嵌套的外重循环
- break 语句只能在循环语句(while或for语句)内部使用
示例见:
i = 1
while i <= 6:
print("循环开始时:", i)
if i == 3:
break
print("循环结束时:", i)
i += 1
else:
print("这是else子句里的语句")
死循环
死循环是指循环条件一直成立的循环
死循环通常用break语句来终止循环
死循环的else子句永远不会执行
示例:
i = 1
while True:
n = int(input("请输入一个数: "))
if n == i:
print("跳出循环")
break
print(i, n)
i += 1
练习:
1. 任意输入一些数,当输入负数时结束输入
当输入完成后,打印您输入的这些数的和是多少?
he = 0 #
while True: # 开始循环做事情
n = int(input("请输入一个数:"))
if n < 0:
break # 结束做事情
he += n # 开始累加
print("和是:", he)
2. 写程序求:
Sn = 1 + 1/2 + 1/4 + 1/8 + .... + 1/(2**n)
求当n等同于100时,sn的值是多少?
sn = 0
n = 0
while n <= 100:
a = 1/(2**n)
sn += a
n += 1
print("和是:", sn)
3. 用while语句实现打印三角形,输入一个整数,表示三角形的宽度和高度,打印出相应的直角三角形:
如:
请输入三角形的宽度: 4
1) 打印如下:
*
**
***
****
2) 打印如下:
*
**
***
****
3) 打印如下:
****
***
**
*
4) 打印如下:
****
***
**
*
# 请输入三角形的宽度: 4
n = int(input("请输入三解形的宽度: "))
line = 1 # line 代表行数
while line <= n:
# 打印一行星
print('*' * line)
line += 1 # 行数变大
# 1) 打印如下:
# *
# **
# ***
# ****
print('-------------------')
line = 1
fmt = "%%%ds" % n
while line <= n:
print(fmt % ('*' * line))
line += 1
# 2) 打印如下:
# *
# **
# ***
# ****
print('-------------------')
stars = n # 第一行星号的个数
while stars > 0:
# 先计算空格的个数
blank = n - stars
print(' ' * blank + '*' * stars)
stars -= 1 # 下一行星号个数变少一个
# 3) 打印如下:
# ****
# ***
# **
# *
print('-------------------')
stars = n # 第一行星号的个数
while stars > 0:
# 先计算空格的个数
print('*' * stars)
stars -= 1 # 下一行星号个数变少一个
# 4) 打印如下:
# ****
# ***
# **
# *
上一篇: 十个成绩排序
下一篇: 输入输出外挂(模板)