python基础(4)——字符串格式化 & while
一、字符串格式化表达式
作用:
生成一定格式的字符串
运算符:
%
语法格式:
格式字符串 % 参数值
或
格式字符串 % (参数值1, 参数值2, ...)
说明:
% 左侧为格式字符串
% 右侧为参数值,当有多个参数值是用括号() 括起来,并用逗号(,)分隔
格式化字符串中以%开头的为占位符,占位符的位置将用参数值替换
示例:
fmt = "name: %s, age: %d"
s = fmt % ('weimingze', 35)
print(s) # name: weimingze, age: 35
"温度:__%d__" % 32
1、格式化字符串中的占位符和类型码
%s 字符串,使用 str(x) 将x转换为字符串
%r 字符串,使用 repr(x) 将x转换为字符串
%c 整数转为单个字符
%d 转为十进制整数
%o 转为八进制整数
%x 十六制进整数(字符a-f小写)
%X 十六制进整数(字符A-F大写)
%e 指数型浮点数(e小写), 如2.9e+10
%E 指数型浮点数(E大写), 如2.9E+10
%f, %F 浮点数(小数形式)
%g, %G 十进制浮点数或指数浮点自动转换
%% 等同于一个%字符
2、占位符和类型码之间的格式化语法:
% [- + 0 宽度.精度] 类型码
- : 左对齐
+ : 显示正号
0 : 左侧空白位置补零
宽度 : 整个字符串的字符个数
精度 : 保留小数点后多少位(默认6位)
示例:
"%10d" % 123 # ' 123'
"%+10d" % 123 # ' +123'
"%-10d" % 123 # '123 '
"%10s" % 'abc' # ' abc'
"%-5s" % 'abc' # 'abc '
"%010d" % 123 # '0000000123'
"%7.3f" % 3.141592535897932 # ' 3.141'
"%07.2f" % 3.141592535897932 # '0003.14'
练习:
1. 任意输入三行文字,让这三行文字依次以20个字符的宽度右对齐显示输出
如:
请输入第1行: hello world
请输入第2行: abcd
请输入第3行: a
输出结果为:
hello world
abcd
a
做完上面的题后再思考:
能否以最长字符串的长度进行右对齐显示(左侧填充空格)?
#方法1 a = input("请输入第1行: ") b = input("请输入第2行: ") c = input("请输入第3行: ") print("%20s" % a) print("%20s" % b) print("%20s" % c) # 做完上面的题后再思考: # 能否以最长字符串的长度进行右对齐 # 显示(左侧填充空格)? # 求最长的一个字符串的字符数 max_len = len(a) if len(b) > max_len: max_len = len(b) if len(c) > max_len: max_len = len(c) print(" " * (max_len - len(a)) + a) print(" " * (max_len - len(b)) + b) print(" " * (max_len - len(c)) + c) #方法2 a = input("请输入第1行: ") b = input("请输入第2行: ") c = input("请输入第3行: ") # print("%20s" % a) # print("%20s" % b) # print("%20s" % c) # 求最长的一个字符串的字符数 max_len = max(len(a), len(b), len(c)) # 29 print("最长的字符串长度是:", max_len) fmt = "%" + str(max_len) + 's' # "%29s" print(fmt % a) print(fmt % b) print(fmt % c)
二、循环语句:
有两条循环语句:
while 语句
for 语句
问题:
输入一个整数n,写程序打印如下n行字符串
这是第1行
这是第2行
这是第3行
这是第4行
...
这是第n行
如何让一条语句重复执行多次?
如果i是一个变量,
print("这是第", i, '行')
1、while 语句:
作用:
根据一定条件,重复的执行一条语句或多条语句
语法:
while 真值表达式:
语句块1
else:
语句块2
说明:
1.先判断真值表达式,为True或False
2. 如果为True,则执行语句块1,再回到第一步
3. 如果为False,则执行语句块2,然后结束此while的执行
4. else 子句部可以省略(同if类似)
# 打印20行hello! i = 1 # i变量用于控制循环条件 while i <= 3: # 如果条件为True print("hello!") i += 1 # 改变循环条件以便让循环终止 else: print("这是else子句,此时将离开while语句") print("此时i的值是:", i) # 4
# 打印 1 ~ 20的整数 i = 1 while i <= 20: print(i) i += 1
练习:
1. 打印 1 ~ 20 的整数,打印在一行内
1 2 3 4 5 6 .... 18 19 20
print(i, end=' ')
i = 1 while i <= 20: print(i, end=' ') i += 1 else: print() # 换行 # print(end='\n') # 换行
2. 打印 1 ~ 20 的整数,每行打印5个,打印四行,
如:
1 2 3 4 5
6 7 8 9 10
....
提示:
可以将if语句嵌入到while语句中来实现换行
# 方法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 else: print() # 换行 # print(end='\n') # 换行 # 方法2: i = 1 while i <= 20: print(i, end=' ') if i % 5 == 0: print() # 换行 i += 1 else: print() # 换行 # print(end='\n') # 换行
3. 用while语句,打印 10 ~ 1的整数
10 9 8 7 6 5 4 3 2 1
i = 10 while i > 0: print(i) i -= 1 print("程序退出,此时i的值是:", i)
4. 打印从零开始,的浮点数,每个数增加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 + 2 + 3 + 4 + ......+ 100 的和
s = 0 # 此变量用来记录累加的个数(和) i = 1 while i <= 100: # 此时的i 1 2 3 4 5 6 7 8 s += i # 把i放在s内进行累加 i += 1 print("和是:", s)
2. 写一个程序
输入一个开始的整数,用变量begin绑定
输入一个结束的整数,用变量end绑定
打印 从begin到end(不包含end) 的每个整数, 打印在一行内.
如:
请输入开始值: 8
请输入结束值: 100
打印:
8 9 10 11 ..... 99
思考:
如何实现每5个数打印在一行内,打印多行
#方法1 begin = int(input("请输入开始整数: ")) end = int(input("请输入结束整数: ")) i = begin while i < end: print(i, end=' ') i += 1 else: print() #方法2 begin = int(input("请输入开始整数: ")) end = int(input("请输入结束整数: ")) i = begin while i < end: print(i, end=' ') if (i - begin + 1) % 5 == 0: print() # print(end='\n') i += 1 else: print() #方法3 begin = int(input("请输入开始整数: ")) end = int(input("请输入结束整数: ")) count = 0 # 此变量用来记录已经在一行内打印多少个数字 i = begin while i < end: print(i, end=' ') count += 1 # 打印个数+1 if count == 5: print() # 换行后 count = 0 # 本行的个数为0 i += 1 else: print()
1、while 语句注意事项:
要控制循环真值表达式的值来防止死循环
通常用真值表达式内的循环变量来控制循环条件
通常在循环语句块内改变循环变量来控制循环次数和变量走向
2、while 语句的嵌套
while 语句本身是语句,和其它语句一样,可以嵌套到任何复合语句中
示意:
while 真值表达式:
...
while 真值表达式2:
...
else:
...
else:
...
示例:
# 打印 1 ~ 20 的整数,打印在一行内
# 此示例示意while语句的嵌套 # 打印 1 ~ 20 的整数,打印在一行内 j = 1 while j <= 10: # print('1 2 3 4 ..... 20') i = 1 while i <= 20: print(i, end=' ') i += 1 else: print() j += 1
练习:
输入一个整数代表正方形的宽度,用变量n绑定,
打印指定宽度的正方形
如:
请输入: 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("请输入: ")) line = 1 # 代表当前行 while line <= n: # print('打印第%d行' % line) i = 1 while i <= n: print(i, end=' ') i += 1 print() # 一行打印完,换行 line += 1
2、break 语句
作用:
用于循环语句(while, for语句)中,用来终止当前循环语句的执行
语法:
break
说明:
1. 当break语句执行后,此循环语句break之后的语句将不再执行
2. break语句通常和if语句组合使用
3. break语句终止循环时else子句的语句将不会执行
4. break语句只能终止当前循环语句的执行,如果有循环嵌套时,不会跳出嵌套的外重循环
示例:
i = 1 while i <= 6: print('循环开始时:', i) if i == 3: break print('循环结束时:', i) i += 1 print("i 的值是", i) print("----------程序退出--------")
i = 1 while i <= 6: print('循环开始时:', i) if i == 3: break print('循环结束时:', i) i += 1 else: print('这是while语句的else子句') print('else子句会在 i<=6为False时执行') print("i 的值是", i) print("----------程序退出--------")
i = 1 while i <= 10: j = 1 while j <= 20: print(j, end=' ') if j == 15: break j += 1 print() i += 1 print("程序结束")
3、死循环
死循环是指条件一直成立的循环
死循环通常用break语句来终止循环
死循环的else子句永远不会执行
# 此示例来示意死循环的用法 # 循环输入字符串,当输入'quit()' 结束输入 # 将每次输入的内容打印在屏幕上 while True: s = input("请输入:>>> ") if s == 'quit()': break print("您刚才输入的是:", s) else: print("我是while语句的 else子句,我永远不会被执行") print("程序结束")
练习:
1、任意输入一些正整数,当输入负数时结束输入
当输入完成后,打印您输入的这些数的和
如:
请输入: 1
请输入: 2
请输入: 3
请输入: 4
请输入: -1
打印:
您刚才输入的这些数的和是: 10
s = 0 # 用来累加数据 while True: x = int(input('请输入正整数: ')) if x < 0: break s += x # print("s += x后的s的值是:", s) print(s)
2、输入一个整数n,打印宽度为n个字符的正方形
如:
请输入: 4
打印:
####
# #
# #
####
如:
请输入: 6
打印:
######
# #
# #
# #
# #
######
n = int(input("请输入长方形宽度: ")) print("#" * n) # 打印第一行 line = 1 # 打印中间的n-2行 while line <= (n - 2): # 此处打印中间的一行 print('#' + ' ' * (n - 2) + '#') line += 1 if n != 1: print("#" * n) # 打印最后一行
练习:
1. 求下列多项式的和
1 + 1/2 + 1/4 + 1/8 + ..... + 1/2**1000 的和
s = 0 # 用于累加和 i = 0 while i <= 1000: s += 1 / 2 ** i i += 1 print(s) # 2
2. 写程序求:
1 - 1/3 + 1/5 - 1/7 + 1/9 + .... + 1/(2*n-1)的和
1) 求当n等于10000时,此公式的和
2) 将上述结果乘以4后打印出来(看看这个数是什么?)
# 1 = +1/(2*1-1) s = 0 # 用于累加 n = 1 sign = 1 # 正负号(符号) while n <= 10000: s += sign * 1 / (2 * n - 1) n += 1 sign *= -1 # 变换符号 print("和是:", s) print('乘4之后的和是:', s * 4)
3. 用while语句实现打印三角形,输入一个整数,表示三角形的宽度和高度,打印出相应的直角三角形
如:
请输入三角形的宽度: 4
1) 打印如下三角形:
*
**
***
****
2) 打印如下三角形:
*
**
***
****
3) 打印如下三角形:
****
***
**
*
4) 打印如下三角形:
****
***
**
*
w = int(input("请输入三角形的宽度: ")) # 1) 打印如下三角形: # * # ** # *** # **** line = 1 while line <= w: # 根据行号来打印每行星号 print('*' * line) line += 1 print('------------------------') # 2) 打印如下三角形: # * # ** # *** # **** line = 1 while line <= w: # 先算空格的个数 blanks = w - line print(' ' * blanks + '*' * line) line += 1 # 3) 打印如下三角形: # **** # *** # ** # * print('================================') stars = w # 星号个数 while stars > 0: # 先算空格个数 blanks = w - stars print(' ' * blanks + '*' * stars) stars -= 1 # 4) 打印如下三角形: # **** # *** # ** # * print('+++++++++++++++++++++++++++++') stars = w # 星号个数 while stars > 0: print('*' * stars) stars -= 1
posted on 2018-10-12 17:12 破天荒的谎言、谈敷衍 阅读(233) 评论(0) 收藏 举报
浙公网安备 33010602011771号