2018.7.6
day04回顾:
字符串
字符串格式化表达式
生成一定格式字符串
占位符和类型码之间的 格式化语句
循环语句
while 语句
语法:
while 语句的嵌套
break 语句
作用:
跳出循环(结束包含此break语句的循环语句)
死循环:
while True:
day05笔记:
for 语句
作用:
用来遍历可迭代对象的数据元素
可迭代对象是指能依次获取数据元素的对象
可迭代对象包括:
字符串 str
----以下后面会讲----
列表 list
元组 tuple
字典 dict
...
for 语法
说明:
当循环内部用break语句终止循环时,else子句部分的语句不会执行
示例见:
s = "ABCDE"
for ch in s:
print('ch====>', ch)
print("当 for语句结束后,ch绑定的是:", ch)
s = "ABC"
for ch in s:
print('ch====>', ch)
print("当 for语句结束后,ch绑定的是:", ch)
s = 'ABCDE'
for c in s:
print(c)
if c == 'D':
break
else:
print('for语句因为可迭代对象不能提供数据而结束')
练习:
任意输入一段字符串
1) 计算您输入的字符'A' 的个数,并打印出来
2) 计算出空格的个数,并打印出来
(要求用for语句,不允许使用, S.count方法)
思考用while语句能否实现上述功能
# 练习:
# 任意输入一段字符串
# 1) 计算您输入的字符'A' 的个数,并打印出来
# 2) 计算出空格的个数,并打印出来
# (要求用for语句,不允许使用, S.count方法)
# 思考用while语句能否实现上述功能
# 任意输入一段字符串
s = input("请输入: ") # "ABCABA"
# 1) 计算您输入的字符'A' 的个数,并打印出来
count_A = 0 # 准备用来记录个数的变量
for ch in s:
if ch == 'A':
count_A += 1
print("'A' 这个字符的个数是:", count_A)
# 2) 计算入空格的个数,并打印出来
count_space = 0 # 准备用来记录个数的变量
for ch in s:
if ch == ' ':
count_space += 1
print("空格 这个字符的个数是:", count_space)
# 思考用while语句能否实现上述功能
count_A = 0
count_space = 0
i = 0 # 获取字符串数据的索引
while i < len(s):
ch = s[i] # 取出字符
# 先算判断ch是否是'A'
if ch == 'A':
count_A += 1
if ch == ' ':
count_space += 1
i += 1
print("'A' 这个字符的个数是:", count_A)
print("空格 这个字符的个数是:", count_space)
range() 函数:
格式:
详见:
>>> help(range)
作用:
说明:
示例:
见:
for x in range(4):
print(x) # 0 1 2 3
print('-------------------')
for x in range(3, 6):
print(x)
print('==============')
for x in range(5, 0, -2):
print(x)
练习:
用for 语句打印1~20 打印在一行内
for i in range(1, 21):
print(i, end=' ')
print()
练习:
求 100以内有哪儿些整数与自身+1的乘积再对11求余的结果等于8?
x * (x+1) % 11 == 8 x附合条件
for x in range(100):
if x * (x + 1) % 11 == 8:
print(x)
1. 写程序计算 1 + 3 + 5 + 7 + ...+ 99的和
(要求用for语句和while语句两种方式实现).
s = 0
for x in range(1, 100, 2):
s += x
print("1 + 3 + 5 + ....+ 99=", s)
print('----以下用while语句实现-----')
s = 0
i = 1
while i < 100:
x = i
s += x
i += 2
print("1 + 3 + 5 + ....+ 99=", s)
2. 用while语句实现打印:
1 3 5 7 9. .... 19
打印在一行内
3. 将上题用for语句来实现
i = 1
while i <= 19:
print(i, end=' ')
i += 2
else:
print() # 换行
# 3. 将上题用for语句来实现
for i in range(1, 20, 2):
print(i, end=' ')
else:
print() # 换行
for 语句嵌套:
示例:
for x in "ABC":
for y in "123":
print(x + y)
思考:
for x in range(5):
for y in range(10):
print(x, y, 'ABC') # 请问这条语句执行多少次?
练习:
用for 语句实现下题 :
1. 输入一个数w代表正方形的宽度,打印如下正方形:
如输入: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
w = int(input("请输入: "))
for line in range(1, w + 1):
for x in range(1, w + 1):
print(x, end=' ')
print() # 打印完毕后换行
2. 写程序来改写上题:
如输入: 5
打印如下:
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
4 5 6 7 8
5 6 7 8 9
如输入: 3
打印如下:
1 2 3
2 3 4
3 4 5
w = int(input("请输入: "))
for line in range(1, w + 1):
for x in range(line, line + w):
print('%2d' % x, end=' ')
print() # 打印完毕后换行
continue 语句:
问题:
如何让程序不再向下执行,重新开始一次新的循环
continue语句的作用:
用于循环语句中(while, for语句),不再执行本次循环内 continue之后的语句,重新开始一次新的循环
说明:
示例见:
# 此示例示意continue语句的用法
for x in range(5):
if x == 2:
continue
print(x)
练习:
1. 输入一个整数用begin绑定,
再输入一个整数用end绑定
打印从begin开始,到end结束内的全部奇数(不包含end)
begin = int(input("请输入开始整数: "))
end = int(input("请输入结束整数: "))
for x in range(begin, end):
if x % 2 == 0:
continue
print(x)
2. 将上述练习改写为 用while语句实现
begin = int(input("请输入开始整数: "))
end = int(input("请输入结束整数: "))
# 方法1
# i = begin
# while i < end:
# if i % 2 == 0:
# i += 1
# continue
# print(i)
# i += 1
# 方法:
i = begin
while i < end:
i += 1
if (i - 1) % 2 == 0:
continue
print(i - 1)
3. 求 1~100 之间所有不被 5, 7, 11 整除的数的和
(可以考虑用continue实现)
s = 0 # 用于累加
for x in range(1, 101):
if x % 5 == 0 or x % 7 == 0 or x % 11 == 0:
continue
# if x % 5 == 0:
# continue
# if x % 7 == 0:
# continue
# if x % 11 == 0:
# continue
s += x
print("和是:", s)
循环总结
语句:
列表 list
列表的定义 :
创建空列表的字面值方式
创建非空列表的字面值方式
列表的构造(创建)函数list
示例:
列表的运算:
运算符:
+ += * *=
+ 用于拼接列表
+= 用于将右侧的可迭代对象的数据追加到原列表中
* 用于生成重复的列表
列表的比较运算:
运算符:
< <= > >= == !=
比较规则:
同字符串比较规则完全相同
列表是可迭代对象:
L = [2, 3, 5, 7, 11]
for x in L:
print(x)
列表的in / not in 运算符:
判断一个元素是否存在于列表中,如果存在返回True,否则返回 False
in 和 not in 的返回值相反
示例:
练习:
1 输入三行文字,将这三行文字, 保存于一个列表L中,并打印
如:
请输入: abc<回车>
请输入: 123<回车>
请输入: 你好<回车>
生成列表如下:
L = ['abc', '123', '你好']
print(L) 打印
a = input("请输入:")
b = input("请输入:")
c = input("请输入:")
L = [a, b, c]
print(L)
练习:
1. 输入任意行文字,存于列表L中,当不输入任何内容直接回车后结束输入
1) 打印L列表中的内容
2) 计算您共输入了几行内容
3) 计算您共输入了多少个字符
1. 输入任意行文字,存于列表L中,当不输入任何内容直接回车后结束输入
1) 打印L列表中的内容
2) 计算您共输入了几行内容
3) 计算您共输入了多少个字符
L=[]
where True:
n = input('输入任意文字: ')
if n == '':
braek
L+=[n]
print(L)
print(len(L))
count = 0
for line in L:
count += len(line) # 把字符个数累加到count中
print(' 您共输入了%d个字符' % count)
2. 输入一个整数(代表树干的高度)
打印出如下一棵树
输入: 2
打印:
*
***
*
*
输入:3
*
***
*****
*
*
*
n = int(input("请输入一个树干的高度: "))
# 打印树叶部分
for i in range(1, n + 1): # i 代表层数
stars = i * 2 - 1 # 算出星号的个数
blank = n - i # 算出左侧空格的个数
print(' ' * blank + '*' * stars)
# 打印树干部分
for _ in range(n):
print(' ' * (n - 1) + '*')
3. 写一个程序,任意输入一个整数,判断这个数是否是素数(prime)
素数(也叫质数), 是只能被1和自身整除的正整数:
如: 2 3 5 7 11 等
提示:
用排除法: 当判断x是否是素数是,只要让x分别除以:
2, 3, 4, 5, .... x-1, 只要整除了,那x不是素数,否则x是素数
x = int(input("请输入一个整数: "))
if x < 2:
print(x, '不是素数')
else: # x肯定是大于等于2
# 用排除法
for i in range(2, x):
if x % i == 0: # 整除了
print(x, '不是素数')
break
else:
print(x, '是素数')
4.算出100~1000以内的水仙化数(Naricissistic Number)
水仙花数是指百位的3次方 加上 十位的3次方 加上 个位的3次方等于原数的数
如:
153 = 1**3 + 5**3 + 3**3
答案:
153, 370, ....
# 方法1
# for i in range(100, 1000):
# s = str(i) # 转为字符串
# bai = int(s[0]) # 百位
# shi = int(s[1]) # 十位
# ge = int(s[2]) # 个位
# if i == bai ** 3 + shi ** 3 + ge ** 3:
# print(i)
# 方法2
# for i in range(100, 1000):
# bai = i // 100 # 百位
# shi = i % 100 // 10 # 十位
# ge = i % 10 # 个位
# if i == bai ** 3 + shi ** 3 + ge ** 3:
# print(i)
# 方法3
for bai in range(1, 10):
for shi in range(10):
for ge in range(10):
i = bai * 100 + shi * 10 + ge
if i == bai ** 3 + shi ** 3 + ge ** 3:
print(i)