Python学习—day2

学习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循环中的三个关键字continuebreakelse
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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值