循环
python的两种循环 for...in...& while
for i in ... 遍历列表list、元组tuple、字符串str
依次把list或tuple中的每个元素迭代出来,看例子
>>> s=['a',2,3,4,5,6]
>>> type(s)
<class 'list'>
>>> for in in s:
File "<stdin>", line 1
for in in s:
^
SyntaxError: invalid syntax
>>> for i in s:
... print(i)
...
a
2
3
4
5
6>>> s=('miki','lili','tom')
>>> for i in s:
... print(i)
...
miki
lili
tom
range()函数
>>> for i in range(10):
... print(i)
...
0
1
2
3
4
5
6
7
8
9
>>> for i in range(1,10,2):
... print(i)
...
1
3
5
7
9
>>> s="abcdefg"
>>> type(s)
<class 'str'>
>>> for i in s:
... print(i)
...
a
b
c
d
e
f
g>>> for i in range(len(s)):
... print("当前位置是:%s,当前值是:%s" %(i,s[i]))
...
当前位置是:0,当前值是:a
当前位置是:1,当前值是:b
当前位置是:2,当前值是:c
当前位置是:3,当前值是:d
当前位置是:4,当前值是:e
当前位置是:5,当前值是:f
当前位置是:6,当前值是:g练习:找出字符串s="abcclonhcjjsxccsdc"中字母为C的位置
#算法 1、用for基于坐标位置遍历s字符串的每一个字母
2、在循环的时候,用if判断当前的字母是否为C,如果是,我们就打印一下坐标位置
>>> s="abcclonhcjjsxccsdc"
>>> for i in range(len(s)):
... if s[i]=='c':
... print(i)
...
2
3
8
13
14
17
编程思想:
遍历一个对象,然后在循环的时候对取出来的值进行判断,然后做一些事情
for ... in ... :
if ... :
do something
break & continue
break 会将循环体结束掉
continue 会将本次循环结束掉,循环体内部的代码会被短路掉,剩余的循环还会依旧执行
实例:
>>> for i in range(10):
... if i==5: #i=0,不执行break,执行print(0),知道i=5的时候,执行break,结束掉循环,不执行print(5)
... break
... print(i)
...
0
1
2
3
4>>> for i in range(10):
... if i==2 or i==8: #当i等于2或8的时候,执行continue,print(i)被短路,继续执行下一次循环
... continue
... print(i) #被短路掉
...
0
1
3
4
5
6
7
9
while
#用for能实现,就不用while,因为while容易发生死循环
死循环,实例:
a=1
while a>0:
print(i)正常使用,实例:
>>> a=0
>>> while a<=5:
... print(a)
... a=a+1
...
0
1
2
3
4
5练习:求10以内奇数的和
#算法:1、用for循环遍历range(1,11,2)奇数
2、在循环的时候,把奇数进行累加
>>> sum=0
>>> for i in range(1,11,2):
... sum=sum+i
...
>>> print(sum)
25增加调试语句
>>> sum=0
>>> for i in range(1,11,2):
... print("当前值是:%s" %i)
... sum=sum+i
... print("当前的sum是:%s" %sum)
...
当前值是:1
当前的sum是:1
当前值是:3
当前的sum是:4
当前值是:5
当前的sum是:9
当前值是:7
当前的sum是:16
当前值是:9
当前的sum是:25
函数
>>> def count_odd_sum(num):
... sum=0
... for i in range(1,num,2):
... sum=sum+i
... return sum
...
>>> count_odd_sum(10)
25
>>> count_odd_sum(100)
2500
>>> count_odd_sum(1000)
250000#同样的代码需要重复编写时,就要考虑把代码封装成函数
list&tuple&dict
容器:装多个元素
list:列表----多个元素,里面的元素可以修改
tuple:元组----多个元素,里面的元素不可以修改
dict:字典---多个元素,但是结构不一样,key:value的形式
list #支持增删改查
>>> li=[1,2,3,'a','b','c']
>>> type(li)
<class 'list'>
>>> li.append('d') #增
>>> li
[1, 2, 3, 'a', 'b', 'c', 'd']
>>> li.insert(1,'pop') #增,指定位置插入
>>> li
[1, 'pop', 2, 3, 'a', 'b', 'c', 'd']
>>> del li[1] #删
>>> li
[1, 2, 3, 'a', 'b', 'c', 'd']
>>> li[0]='hello' #改
>>> li #查
['hello', 2, 3, 'a', 'b', 'c', 'd']
>>> li[1] #查
2
>>> for i in li: #查
... print(i)
...
hello
2
3
a
b
c
d
>>> for i in range(len(li)): #查
... print(li[i])
...
hello
2
3
a
b
c
d>>> li.remove('hello') #移除
>>> li
[2, 3, 'a', 'b', 'c', 'd']
tuple #不支持增删改,可以查
>>> def fun():
... return 1,2
...
>>> fun()
(1, 2)
>>> type(fun())
<class 'tuple'>#你不希望别人随便修改你的代码,就是用元组!
>>> t=('a','b',2,3,)
>>> type(t)
<class 'tuple'>
>>> t[0]=3
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment #元组内的元素不能修改>>> for i in t:
... print(i)
...
a
b
2
3
>>> for i in range(len(t)):
... print(t[i])
...
a
b
2
3
dict #增删改查,都是基于key,不是基于坐标位置
>>> d={}
>>> type(d)
<class 'dict'>
>>> d[1]='hello' #增
>>> d
{1: 'hello'}
>>> d[2]=2 #增
>>> d
{1: 'hello', 2: 2}
>>> del d[2] #删
>>> d
{1: 'hello'}
>>> d[1]='sunny' #改
>>> d
{1: 'sunny'}
>>> d[0] #查,不能基于坐标位置查询
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
KeyError: 0
>>> d[1]
'sunny'
>>> d[2]='today'
>>> d[3]='I'
>>> d[4]='like'
>>> d
{1: 'sunny', 2: 'today', 3: 'I', 4: 'like'}
>>> for i in d.keys(): #查,查所有的key
... print(i)
...
1
2
3
4
>>> for i in d.values(): #查,查所有的value
... print(i)
...
sunny
today
I
like
>>> for k,v in d.items(): #查,查所有的key &value
... print("%s=%s" %(k,v))
...
1=sunny
2=today
3=I
4=like
练习题
#反转整数的数字
'''
是一个数字
正数:123---》321
0---》0
负数 -123--->-321
反转:切片可以通过字符串反转,但是现在类型是数字,问题:数字可以变成字符串?
str(123)
'''
def reverse_number(n):
if not isinstance(n,int):#如果不是整数,则返回一个None
return None
if n>0: #判断是正数的情况
s=str(n) #转换为字符串
s=s[::-1]#实现数字的反转
result = int(s) #将字符串类型转换为整数
elif n==0:
return 0
else:
s=abs(n)
s=str(s) #转换为字符串
s=s[::-1]#实现数字的反转
result =-1* int(s) #将字符串类型转换为整数
return result
#经验分享:写一部分代码,就执行一次,方便定位问题。
a=reverse_number(123)
print(a)
print(type(a))
a=reverse_number(0)
print(a)
print(type(a))
a=reverse_number(-123)
print(a)
print(type(a))
#统计一句话中单词的数量
'''
#统计一句话中单词的个数
I am a girl,I hope my family is happy!
遇到一个空格,就是一个单词
但是这里还有符号,无空格的情况,所以就需要把非单词的符号转换成空格
split 遇到空白就切割
'''def count_words(s):
new_s=' '
for i in s:
if (i>='a' and i<='z') or (i>='A' and i<='Z'):
new_s+=i
else:
new_s+=' '
return new_s.split()s='I am a girl,I hope my family is happy!'
word_list=count_words(s)
print(len(word_list))
sentence = "I am a good boy!You too!"
print(count_words(sentence))