学习python打卡day2
此次学习的内容链接
链接: https://zhuanlan.zhihu.com/p/32501786
https://zhuanlan.zhihu.com/p/31844987
循环迭代:for循环、while循环、字典和文件的迭代
解析式:用列表构造列表,用字典构造字典,用列表构造字典
while循环
例子:输出[0,10]中所有比10小的整数,并以空格将他们分开
a=0
b=10
while a<b:
print(a,end=' ') #打印a并且以空格结尾
a=a+1
0 1 2 3 4 5 6 7 8 9
while循环中的三个关键字continue,break,else
①continue指跳出本轮循环,重新开始循环
#计算1-10中的偶数
a=0
b=10
while a<b:
a = a + 1
if a % 2 != 0: #a不能被2整除
continue
print(a, end=' ')
2 4 6 8 10
②break直接跳出循环
#输出比5小,比0大的整数
a=0
b=10
while a<b:
a = a + 1
if a **==** 5: #注意此时if语句中等于某个值要用2个等号
break #若a等于5则终止循环
print(a, end=' ')
1 2 3 4
③else无法执行循环主体后执行的命令
#判断某个数是不是质数,倘若不是质数,请写出它的一个因子
y = 33
x = y / / 2 #是取y被2除的商的向下取整
while x > 1:
if y % x == 0: #y被x整除,没有余数
print('{} has a factor {}' .format(y,x))
break
x = x - 1
else:
print('{} is a prime'.format(y))
33 has a factor 11
'''y = 29时,输出结果为29 is prime;y = -3,x=y//2,输出结果为-2
for循环
for循环是一个通用的序列迭代工具,可以遍历任何有序的序列对象内的元素。如字符串、列表、元组等,以及其他一些内置的可用来迭代的对象。
遍历列表、字符串、元组
遍历列表
for x in [1,2,3,4]:
print(x)
1
2
3
L= [1,2,3,4]
for x in L:
print(x, end=' ')
1 2 3 4
遍历字符串
for x in 'hello':
print(x, end=' ')
h e l l o
for x in ('I', 'am', 'a', 'teacher'):
print(x,end=' ')
I am a teacher
遍历元组
T = [(1, 2), (3, 4), (5, 6)]
for (a, b) in T:
print(a,b)
1 2
3 4
5 6
②遍历字典和文件这两种特殊的内置类型对象
☆遍历字典
字典不同于列表、字符串、元组的是其内部的对象不是有序的。
for循环可以遍历所有有序的序列对象内的元素,常见可通过键、键值对的元组来遍历。
#通过键遍历字典
D = {'a':1, 'c':2, 'b':3}
for k in D:
print('{}--->{}'.format(k,D[k]))
c--->2
a--->1
b--->3
D = {'a':1, 'b':2, 'c':3}
for key in D:
print(key, '--->', D[key])
b ---> 2
c ---> 3
a ---> 1
#通过键对值的元组遍历字典
D = {'a': 1, 'b': 2, 'c': 3}
for (key, value) in D.items():
print(key, '--->', value)
a ---> 1
c ---> 3
b ---> 2
遍历文件
①极其原始——调用文件对象的read方法,把文件内容一次性加载至字符串对象
file = open('myfile.txt', 'r')
print(file.read())
233
2333
23333
②用for循环逐行读取文本文件
法一通过readlines方法,首先一次性把文件载入到行字符串列表中,然后再对这个字符串列表进行迭代。容易内存压力过大。
for line in open ('myfile.txt','r').readlines():
print(line, end=' ')
233
2333
23333
☆法二——文本文件读取的**最佳选择**
(简单、且对任意大小的文件都有效)
并非一次性将全部的文件内容载入到内存中,而是在迭代的时候,循环到了哪一行才将哪一行读入到内存。-迭代器(open函数返回的那个就是文件迭代器)
for line in open ('myfile.txt','r'):
print(line, end=' ')
233
2333
23333
解析式
列表解析式
本质上是用列表来构建列表。通过对已有列表中的每一项应用一个指定的表达式来构建出一个新的列表。编码简单,运行速度快。
列表解析式的三个核心要素:
1.作用于输入序列的运算表达式;
2.对输入序列的循环表达式;
3.对输入序列的过滤条件,其中过滤条件是可选的,可有可无。
例如想要用列表a生成列表b,其中列表b中的每个元素都是a中对应元素的二次方。
a = [1,2,3,4,5,6,7,8,9,10]
b = [x**2 for x in a]#x**5是x的5次方,x**n是x的n次方
print(b)
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
注:输入序列是a,运算表达式是x**2,循环表达式是for x in a。没有使用过滤条件,使用了列表a中的所有元素来构造列表b。
若只想用列表a中能被3整除的元素来构造列表b,就用上过滤条件。
a = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
b = [x**2 for x in a if x % 3 == 0]
print(b)
[9, 36, 81]
注:输入序列是a,运算表达式是x**2,循环表达式是for x in a,过滤条件是if x % 3 == 0,即x能被3整除。
字典解析式
用字典构造字典
D1 = {'a': 1, 'b': 2, 'c': 3}
D2 = {k: v*2 for (k, v) in D1.items()}
print(D2)
{'b': 4, 'a': 2, 'c': 6}
用列表构造字典
D = {c:c*4 for c in ['a', 'b', 'c', 'd']}
print(D)
{'d': 'dddd', 'a': 'aaaa', 'c': 'cccc', 'b': 'bbbb'}
总结
for比while循环更易编写,执行时也比较快,适合遍历序列。
Day2的【作业】
1.输入一个正整数n,对其进行因式分解并输出。
例如:输入18,输出18=233
答:
from sys import stdout
print("请输入一个正整数,我们将对它进行因式分解,例如18=2*3*3")
a=int(input())
if a<1 or isinstance(a,float):
print("你输入的不是正整数,请重新输入,例如9")
if a==1:
print("1无法进行因式分解,1=1")
else:
stdout.write(str(a)+"=")
i=2
while a>2:
if a%i==0:
a=a/i
if a==1:
a=a*i
break
stdout.write(str(i))
stdout.write("*")
else:
i=i+1 #or i+=1
print ("%d" % a)
请输入一个正整数,我们将对它进行因式分解,例如18=2*3*3
144
144=2*2*2*2*3*3
sys.stout可以不换行,print就需要换行
2.计算1到100的和
答:
i=1
a=0
while i<=100:
a=a+i
i=i+1
else:
print('1+2+3+...+100 =',a)
5050
3.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
答:
s =input("请输入一行字符串:")
letters = 0
space = 0
digit = 0
other = 0
for i in s:
#判断是否为字母
if i.isalpha():
letters += 1
#判断是否为空格
elif i.isspace():
space += 1
#判断是否为数字
elif i.isdigit():
digit += 1
else:
other += 1
print ('字母数量为%d, 空格数量为%d, 数字数量为%d, 其他数量为%d' % (letters, space, digit, other))
请输入一行字符串:233zlt jijxbasnxabb78778876
字母数量为15, 空格数量为4, 数字数量为11, 其他数量为0
4.打印10000以内的完全平方数
答:
from sys import stdout
for x in range(1,101):
y= x*x
if y<= 10000:
stdout.write(str(x)+":"+str(y)+" ")
else:
break
1:1 2:4 3:9 4:16 5:25 6:36 7:49 8:64 9:81 10:100 11:121 12:144 13:169 14:196 15:225 16:256 17:289 18:324 19:361 20:400 21:441 22:484 23:529 24:576 25:625 26:676 27:729 28:784 29:841 30:900 31:961 32:1024 33:1089 34:1156 35:1225 36:1296 37:1369 38:1444 39:1521 40:1600 41:1681 42:1764 43:1849 44:1936 45:2025 46:2116 47:2209 48:2304 49:2401 50:2500 51:2601 52:2704 53:2809 54:2916 55:3025 56:3136 57:3249 58:3364 59:3481 60:3600 61:3721 62:3844 63:3969 64:4096 65:4225 66:4356 67:4489 68:4624 69:4761 70:4900 71:5041 72:5184 73:5329 74:5476 75:5625 76:5776 77:5929 78:6084 79:6241 80:6400 81:6561 82:6724 83:6889 84:7056 85:7225 86:7396 87:7569 88:7744 89:7921 90:8100 91:8281 92:8464 93:8649 94:8836 95:9025 96:9216 97:9409 98:9604 99:9801 100:10000