python代码学习——for循环和while循环

python代码学习——for循环和while循环

  • 循环
    • 1.for循环的语法及应用
      • for循环的语法——遍历字符串、列表
      • for循环遍历字典
      • 使用如何生成一个整数序列?range
      • for循环与range函数的结合使用
      • for循环的本质
      • 嵌套for循环
      • 打印菱形
        • 菱形变种题
      • range函数和for的循环结合求立方
      • for循环之立方、平方列表
      • 求100000以内的所有素数
      • 猴子摘桃
    • 2.while循环的语法及应用
      • while循环的语法及用法
      • while死循环的示例代码
      • while循环的终止
        • while循环之break
        • while循环之continue
        • while循环之限制条件
        • while循环的代码示例
  • 循环的else子句

循环

1.循环的定义:重复做某件事情
2.执行循环存在触发条件,终止循环存在终止条件,没有终止条件的话就不能停止,此时循环体就会进入死循环。具体体现在while循环,for循环不会出现死循环
3.如果想要遍历一个范围区间的的元素,可使用for循环来进行遍历。遍历的定义:访问一个范围区间的每一个元素,按照顺序进行访问

1.for循环的语法及应用

for循环的语法——遍历字符串、列表

  • for循环存在十分重要的一个作用:遍历区间范围中的每一个元素。
  • for循环的语法:
        for 变量 in 数据范围:
        	代码块
  • 备注 :for循环语法的意思是:挨个访问数据范围中的每一个元素,然后赋值给变量。数据范围可以是列表、字符串、字典、元组或者range函数等

示例代码如下:

item_list = [12, 45, 67, 'python']  # 定义列表信息
for item in item_list:  # 使用for循环遍历
    print(item)
print(" == == == == == =也可以这样, 直接将列表、字符串等放在数据范围上 == == == == == == == =")
for item in [12, 45, 67, 'python']:  # 使用for循环遍历
    print(item)
print(" == == == == == =数据范围可以是嵌套列表,使用列表读取后遍历嵌套列表中的值 == == == == == == == =")
item_list = [[12, 45, 67, 'python'], [12, 55, 66, "njfnj"]]  # 定义列表信息
for item in item_list[1]:  # 使用for循环遍历
    print(item)
print(" == == == == == =数据范围可以是字符串 == == == == == == == =")
item_list = "woaibei"  # 定义字符串信息
for item in item_list:  # 使用for循环遍历
    print(item)
===================run_result================
12
45
67
python
 == == == == == =也可以这样, 直接将列表、字符串等放在数据范围上 == == == == == == == =
12
45
67
python
 == == == == == =数据范围可以是嵌套列表,使用列表读取后遍历嵌套列表中的值 == == == == == == == =
12
55
66
njfnj
 == == == == == =数据范围可以是字符串 == == == == == == == =
w
o
a
i
b
e
i

for循环遍历字典

for循环遍历字典时:

  • 遍历字典的key,使用字典名.keys()表示区间范围
  • 遍历字典的值,使用字典名.values()表示区间范围
  • 根据字典的key,来变量value
  • 如果要遍历字典中的key和value,可使用字典名.items()表示区间范围
  • 如果一个可变类型的序列,使用for循环遍历,不能一边遍历序列,一边给该序列增加或者删除元素,否则会报错;建议使用while True和break结合
  • python3中,keys,values和items方法返回一个类似生成器的可迭代对象,不会把函数的返回结构复制到内存中,实际上是在原集合上进行迭代的
  • python2中,上面的方法会返回一个新的列表,占据内存空间,因此python2建议使用iterkeys,itervalues,iteritems,这些方法返回的是一个迭代器,而不是一个copy。

具体的示例详见以下代码块

item_dict = {"name": "yezi", "code": "100", "sex": "girl"}  # 定义字典
for key in item_dict.keys():  # 遍历字典的key并打印
    print("only print key:",key)
for value in item_dict.values():  # 遍历字典的value,并打印
    print("only print value:",value)
for item in item_dict:  # 根据key来遍历字典的值
    print("Print value based on key:",item_dict[item])
for value, key in item_dict.items():  # 遍历字典中所有的键值对
    print("print value and key:",value, key)
===========run_result================
only print key: name
only print key: code
only print key: sex
only print value: yezi
only print value: 100
only print value: girl
Print value based on key: yezi
Print value based on key: 100
Print value based on key: girl
print value and key: name yezi
print value and key: code 100
print value and key: sex girl

使用如何生成一个整数序列?range

在pyhon中,如何自动生成一个整数序列?答:可使用range函数

  • range函数存在三个参数,可生成一个指定范围的整数序列
  • range(m,n,k)m=开头,n=结束,k=步长,遵循取头不去尾的规则,类似与字符串的切片
  • 步长:可理解为等差数列
  • 如果没有步长,则默认长度为1;如果没有开头,则默认从0开始
  • range函数的值直接看不到,如果想看到这个函数的值,可将range函数的结果强制转换成列表即可

其示例代码块如下:

x = list(range(1,10,2)) # 生成1-10的数字序列,其间隔为2,转换数据类型为列表
y = list(range(2,5))#生成2-5的数字序列,间隔默认为1.转换数据类型为列表
z = list(range(5))#生成5个数的数字序列,默认从0开始,间隔为1,转换数据类型为列表
print(x,y,z)

python代码学习——for循环和while循环_第1张图片

for循环与range函数的结合使用

使用以下示范,来具体显示下for循环与range函数的使用
例:求1-100的和
思路:第一,想办法拿到1-100的整数,使用range函数。
第二,想办法把他取出来,使用for循环遍历后相加

sum = 0  #定义一个求和的变量
for item in range(1,101): #遍历1-101的整数序列(1,2,3^100)
    sum+=item #循环体,sum = sum + item
print(sum)#打印sum

python代码学习——for循环和while循环_第2张图片

for循环的本质

在使用for循环的时候,其循环次数是由数据区间范围中的元素个数决定的
python代码学习——for循环和while循环_第3张图片

嵌套for循环

for循环中,如果存在在遍历一个区间范围的基础上,再去遍历另外一个区间,可使用嵌套for循环,例如:遍历一个excel表中单元格的元素或者九九乘法表,可使用以下例子来查看以下嵌套for循环:遍历嵌套列表中的每一个值
做嵌套循环的时候,最重要的是:找两者之间的关系之后,使用代码表达出来

item_list = [
    [1, 2],  # 列表
    {"name": "yezi", "code": "100"},  # 字典
    "hdv"  # 字符串
]
for item in item_list:  # 变量列表中的值后并打印
    for value in item:  # 遍历列表中嵌套区间的值并打印
        print(value)
    print(item)

python代码学习——for循环和while循环_第4张图片
例题:使用for循环实现九九乘法表

count = 0
for x in range(1,10):#外循环,for循环取x的值
    for y in range(1,x+1):#内循环,for循环取y的值,根据range函数的性质,取值到x+1
        count = x * y
        print("{0} * {1} ={2}".format(x,y,count),end = " ")#end = “” 叫做每次循环之后不换行输出
    print()#一个print语句,表示自动换行

python代码学习——for循环和while循环_第5张图片

打印菱形

例题:打印以下菱形:
   *
  ***
 *****
*******
 *****
  ***
   *

【思路】

行号 元素个数 前空格 总空格
1 1 3 6
2 3 2 4
3 5 1 2
4 7 0 0
5 5 1 2
6 3 2 4
7 1 3 6

从上面标表格总可以看到,前空格数是对称的,总空格数是前空格数的两倍,因此在使用range函数的时候可以考虑对称,即以0为分界点向两边延伸,具体代码如下:

for i in range(-3,4):
    if i<0:
        count= -i
    else:
        count=i
    print(" "*count + "*"*(7-count*2))

菱形变种题

打印以下图形
   *
  **
 ***
*******
   ***
   **
   *

【思路】

行号 元素个数 前空格 后空格 总空格
1 1 3 3 6
2 2 2 3 5
3 3 1 3 4
4 7 0 0 0
5 3 3 1 4
6 2 3 2 5
7 1 3 3 6

从以上表格中可以看到,前空格的前三行每次递减,只0之后,固定为3,因此可使用if判断,前三行取绝对值之后乘空格,后三行乘3,中间直接使用*乘7,元素为每一行的中心值(4)减去后空格数即可,具体代码如下:

for i in range(-3,4):
    if i < 0:
        count = -i
        print(" " * count + "*" *(4-count) )
    elif i== 0:
        print("*" * 7)
    else:
        count = i
        print(" "* 3 + "*" * (4-count))
 
方法二:
for i in range(-3,4):
    if i < 0:
        count = -i
        print(" " * count + "*" *(i+4) )
    elif i== 0:
        print("*" * 7)
    else:
        count = 3
        print(" "* 3 + "*" * (7-(count+i)))

range函数和for的循环结合求立方

例如:计算1-10的立方和

item_list = [] #定义一个空列表
sum = 0 #定义sum初始值为0
for value in range(1,11): #for循环遍历1-10的数值
    item_list.append(value ** 3) #得出1-10的立方值后添加进空列表\
for item in item_list:#遍历空列表中的值
    sum += item #求和
    item += 1 #遍历一次后,列表中的下标+1
print(item_list) #打印立方列表
print(sum)#打印和

python代码学习——for循环和while循环_第6张图片

for循环之立方、平方列表

平方/立方的列表可通过一句话来进行获得,格式如下:
[变量名 ** x for 变量名 in range(m,n,k)]
【备注】x代表几次方,m代表整数序列的初始值,n代表整数序列的结束值,k代表步长
如1-10的立方获得方式:

item = [ value ** 3 for value in range(1,11)]
print(item)

python代码学习——for循环和while循环_第7张图片
所以以上1-10的立方和代码可以优化为:

item_list = [ value ** 3 for value in range(1,11)]
sum = 0
for item in item_list:
    sum +=item
    item +=1
print(item_list)
print(sum)

python代码学习——for循环和while循环_第8张图片

求100000以内的所有素数

【思路】

  • 素数只能被1和自己整除,因此要排除2之外的所有偶数,因此在最外层for循环时,步长为2,
  • 求100000以内的,因为100000不是素数,因此边界可以直接赋值10万
  • 10以内的奇数,除了9和10之外,都是素数,因此直接打印即可,因为已经打印,最外层for循环从11开始
  • int((key0.5))+1 ,表示循环到这个数的(根号2+1)处,原因:假设一个数值为15,他的计算公式为:1X15 3X5 5X3 15X1,根号15的结果是3.87,那么直接计算1-3.87之间是否有整除的即可,3.87的int型为3,如果写在边界值会减1,因此直接使用int((key0.5))+1
  • 因为分子全部是奇数,分母为偶数的话肯定不会整除,因此内循环的步长也为2
  • 分子除以坟墓,如果可以整除,说明这个数不是素数,如果不能整除,说明这个数是素数,直接打印即可
#求100000以内所有的素数
print(1,2,3,5,7)
for key in range(11,100000,2):
    for value in range(3,int((key**0.5))+1,2):
        if key%value==0:
            break
    else:
        print(key,end=" ")

猴子摘桃

问:猴子吃桃子:猴子摘了n个桃子,第一天吃了一半多一个,第二天吃剩下的一半多一个,以此类推,到了第10天就剩下一个,请问,猴子最初摘了多少个桃子?
【思路】
total = n 每天剩余:
1:n/2-1
2:(n/2-1)/2-1
3:((n/2-1)/2-1)/2-1

9.(((((((((n/2-1)/2-1)/2-1)/2-1)/2-1)/2-1)/2-1)/2-1)/2-1)=1
第9天已经剩下1个,第10天发现,因此一共迭代9次
因为计算剩余的时候,用的是:n/2-1,因此倒推时,计算公式为:(n+1)*2,推导公式:(n/2)-1 = n n+1 = n/2 n=(n+1)*2
代码如下:

n=1#第9天剩余的桃子数
for i in range(1,10):
    n=(n+1)*2
print(n)

2.while循环的语法及应用

如何去记while循环?——答:记语法

  • while 关键字 不能做标识符
  • while 条件表达式 后面可以加条件表达式(比较运算,逻辑运算,成员运算,数据非空和空的情况考虑),其后可以加的表达式与if是一致的

while循环的语法及用法

while循环的格式及用法:

  • 格式:
while  条件表达式:(冒号,下面的语句要放子代码,注意缩进)
      你要循环的代码/循环体/执行语句  
  • 备注:while后面跟的可以理解为是布尔值(True或False)

  • 用法:while 后面的条件成立就执行下面的代码,不成立就不执行

  • 重点:每次执行完while下的子代码,后会重新判断while后面的条件,再决定是否执行

  • 死循环的定义 死循环:只存在触发条件,没有终止条件的循环,一旦出现就会无休止的循环下去

  • 如何来破解死循环? ——设置终止条件(break)或者加一个终止条件,一旦触发了终止条件,即可跳出循环

  • 技巧:尽量不要让while后面一直是True,就是要比较的运算结果是可变的——>推荐使用

while死循环的示例代码

1.while死循环的代码:

while True:
    print("这是一个死循环")

python代码学习——for循环和while循环_第9张图片

while循环的终止

while循环之break

while后面加break为终止条件的代码,while中,见break即跳出循环。出现break就直接跳出循环,不再执行循环体的任何代码

while True:
    print("这是一个死循环")
    break

python代码学习——for循环和while循环_第10张图片
备注:若以上代码是这样的,break在print之前,则print语句不会被执行

while True:
    break
    print("这是一个循环") 

python代码学习——for循环和while循环_第11张图片

while循环之continue

在while语句中使用continue,可与break语句对比使用

  • continue的意思结束本次循环,不执行continue下面的语句,返回执行下一次循环。
  • 在while循环中,可添加一个变量(一般为比较运算)+终止条件(break、continue)来控制次数,推荐使用break
  • 如果while与else结合使用,break语句在结束循环,else下面语句也不执行,但是continue语句在执行完while的循环后,执行else 后的语句
  • 例如以下代码可对break和continue进行对比

代码如下:

a = 0
while a < 10:#判断a的值是否小于10
    a += 1
    if a % 2 == 0:#判断奇偶数,如果是偶数,跳过,是奇数,就打印
        continue#返回至循环初始的地方继续执行,不执行循环体后面的语句
    print("奇数:",a)
else:
    print("偶数:",a)
print("=================分界线=================")
a = 0
while a < 10:
    a += 1
    if a % 2 == 0:
        break #break  直接跳出循环,不再执行
    print("奇数:",a)
else:
    print("偶数:",a)

python代码学习——for循环和while循环_第12张图片

while循环之限制条件

while后面添加限制条件,一旦触发即可跳出循环,一般限制条件为比较运算,逻辑运算,成员运算等,例如让print语句打印10次
方式一:

count =1  #给count变量赋一个值
while 1: # while 后面跟while 后面跟所有非空的数据、非0的数据,都相当于True,和if一致
    print("这是一个循环") #打印语句
    count += 1 #打印之后,count值+1
    if count > 10:#如果count=10
        break#跳出循环

python代码学习——for循环和while循环_第13张图片
方式二:写代码的时候,进行不要让while后面的布尔值为True,例如,使用比较运算符使while后面的布尔值可变

i=1
while i <=10:#限制条件,i大于10即可跳出循环
    i += 1 
    print("这是一个循环")

python代码学习——for循环和while循环_第14张图片

while循环的代码示例

例题1:使用while来编写求1-100的和

i=1  #定义变量i
sum = 0  #定义求和变量
while i <= 100: #使用for循环,计算循环次数
    sum+=i #求和
    i+=1 #求和一次,i+1
print(sum) #打印和

python代码学习——for循环和while循环_第15张图片
例题2:有一个字典: {“广东”:[“深圳”,“广州”,“阳江”], “湖南”:[“长沙”,“益阳”,“怀化”], “湖北”:[“武汉”,“襄阳”,“黄冈”]},
1.若你从控制台输入一个省份,根据你的省份判断 你可以选择哪些城市。
2.当你选择完毕后,就打印一个信息到控制台,告诉你,你选择了XX省份XX城市 。
3.如果省份不存在 或者是城市不存在 那么就告诉你 省份/城市输入错误,重新输入
4.如果不想在输入,输入值为q时,退出输入状态,结束循环
使用while循环的答案如下:

x = 0#给x赋值
y = 0#给y赋值
dict_province = {"广东":["深圳","广州","阳江"], "湖南":["长沙","益阳","怀化"], "湖北":["武汉","襄阳","黄冈"]}#字典变量
while x< 1:#while循环,因为0<1,所以结果必定为True
    province = input("请输入省份:")
    if province in dict_province.keys():#判断输入的省份
        city_list = dict_province[province]#如果正确,将省份的列表赋值给变量
        while y < 1:#判断y的值,因为0<1,所以结果必定为True
            city = input("请输入城市:")
            if city in city_list:#判断输入的城市是否在所选省份的列表中
                print("您选择的是{0}省{1}市".format(province, city))#如果是,打印省份城市
                break#城市输入正确后,执行break语句,直接跳出第二重循环
            else:
                print("城市错误,请重新输入")#如果不在,打印输出错误,重新开始循环
        break#省份输入正确后,执行break语句,直接跳出第一重循环,判断城市
    elif province == "q":#判断输入的是否为q
        print("省份输入错误,直接退出")#是的话,打印语句
        break#直接跳出第一重循环
    else:
        print("省份输入错误,请重新输入")

例题3:一个足球队在寻找年龄在10岁到12岁的小女孩(包括10岁和12岁)加入。编写一个程序,询问用户的性别(m表示男性,f表示女性)和年龄,然后显示一条消息指出这个人是否可以加入球队,询问10次后,输出满足条件的总人数。
注意:写代码的时候,需要注意一件事:思考这个功能我们会用到什么样的技术,然后再去理清逻辑写程序
思路:读题干,看到是否,会用到的技术是:if条件判断,询问用到的技术是input函数,询问10次,则使用循环,for与range结合 或者while与判断语句控制

if 女生 10-12:
可以加入
else :
不可加入

  #以下是使用while来进行的代码    
    i = 0
    x=1
    while x<= 10:#while判断次数
        sex = input("请输入您的性别:")#询问,获取性别信息
        if sex == "f":#判断性别
            age = int(input("请输入您的年龄:"))#询问,获取年龄信息,input获取为字符串,强制转换为int
            if 10 <= age <= 12:#判断年龄
                print("您可以参加球队")
                i+=1#一个符合条件,i+1,用于统计最后符合的结果
            else:
                print("您不可以参加球队")#内判断,不符合条件,不可以参加
        else:
            print("您不可以参加球队")#外判断,不符合条件,不可以参加
        x+=1#只要循环一次,变量+1,控制次数
        print(x)
     print("符合球队的人数为:{}人".format(i))

#以for和range函数来写的代码
count = 0
for i in range(0,10):#for循环判断次数
    sex = input("请输入您的性别")
    age = int(input("请输入您的年龄"))
    if sex == "f" and 10<= age <=12: #上面代码使用的嵌套判断,也可以写成一个,使用and链接
        print("您可以参加球队")
        count += 1
    else:
        print("您不可以参加球队")
print("符合条件的人数为{}".format(count))

例题4:利用for循环,完成a=[1,7,4,89,34,2]的冒泡排序: 冒泡排序:小的排前面,大的排后面。

#冒泡排序
a=[1,7,4,89,34,2]
for x in range(1,len(a)):
    for y in range(0,len(a)-x):
        if a[y] > a[y+1]:
            a[y],a[y+1] = a[y+1],a[y]
print(a)

例题5:万科笔试题:
有一组用户的登录信息存储在字典 login_ifno 里面,字典格式如下:login_info={“admin”:“root”,“user_1”:“123456”}。key表示用户名,value表示密码,请编写函数满足如下条件:
1)设计1个登陆的程序, 不同的用户名和对成密码存在个字典里面, 输入正确的用户名和密码去登陆,
2)首先输入用户名,如果用户名不存在或者为空,则一直提示输入正 确的用户名
3)当用户名正确的时候,提示去输入密码,如果密码跟用户名不对应, 则提示密码错误请重新输入。
4)如果密码输入错误超过三次,中断程序运行。
5)当输入密码错误时,提示还有几次机会
6)用户名和密码都输入正确的时候,提示登陆成功!‘’’
[备注]
1.“用户名不正确就一直提示请输入正确的用户名”意味着死循环,可使用while来实现
2.使用if来判断用户名是否正确,如果正确需输入密码,使用break跳出循环,错误时出现提示信息并重新输入用户名(while)
3.使用if来判断密码是否正确,如果正确则提示登录成功,如果错误,使用while判断密码疏忽如错误的次数,循环一次+1
4.当密码输入错误的次数等于3时,出现密码输入超过3次,没有机会登录,自动退出的提示,并使用break跳出循环
5.因为密码和用户名需要一一对应。所以使用==而不是用 in

login_info={"admin":"root","user_1":"123456"}
a = 0
active = True#判断开关
while active:
    user = input("请输入用户名:")
    if user  in login_info.keys():
        while a<3:#判断密码可输入错误次数
            a+=1
            pwd = input("请输入密码:")
            if pwd ==login_info[user] :
                print("登陆成功")
                active= False#登录成功,终止循环
                break
            elif a == 3:
                print("您已经没有登录机会,自动退出")
                active =False#密码输入三次,终止循环
                break
            else:
                print("密码错误,请重新输入,您还有{}次机会".format(3-a))
    else:
        print("请输入正确的用户名")

循环的else子句

  • 在for和while循环中,都可以使用else子句
  • 在下面语法中,如果循环正常结束,就执行else语句,如果遇到break或者异常处理终止,else不会执行;详见下方截图
  • 语法:
while中使用else子语句的用法:
while buer:
	语句块
else:
	语句块
============================
for 元素 in iteratable:
	语句块
else:
	语句块
  • 代码示例:
data = [1,2,3,4,5]
for i in data:
    print(i)
else:
    print("i不在列表中,进入while循环")
    while i<10:
        i+=1
        print(i)
    else:
        print("i大于10")
  • 执行结果:
1
2
3
4
5
i不在列表中,进入while循环
6
7
8
9
10
i大于10

python代码学习——for循环和while循环_第16张图片

你可能感兴趣的:(自学python,python,学习,开发语言)