+关注
已关注

分类  

暂无分类

标签  

暂无标签

日期归档  

2019-07(6)

2019-08(95)

2019-09(107)

2019-10(11)

2019-11(4)

python学习日记2

发布于2020-02-10 17:38     阅读(725)     评论(0)     点赞(9)     收藏(3)


Python学习日记2

——流程控制

Python同样提供了两种基本的流程控制结构——分支结构和循环结构;Python使用if语句来提供分支支持,提供了while、for-in循环,也提供了break 和 continue来控制程序的循环结构。

2.1 几点注意

  1. 不要忘记缩进,不要随意缩进

    首先,每种语言都有其特点,Python也有其特点:Python的代码块是通过缩进来标记的,不同于C和Java需要用花括号或end来作为代码块的标记,有相同缩进的多行代码属于同一个代码块,这对于我这种半强迫症简直太好了,用C和Java时候都要把代码搞得整整齐齐的人,还省了我天天忘记加end麻烦(虽然现在的开发环境都很人性化了)。因而,Python的代码不可以忘记缩进也不可以随意缩进。

  2. 不要忘记冒号

    Python冒号精确表示代码块的开始点,这个规则所有的条件执行体、循环体、方法体、类体都要遵循。

2.2 if 分支结构

2.2.1 if表达式

if 分支采用布尔值布尔表达式作为分支控制条件。Python的if分支即可作为语句使用,也可作为表达式使用。其语法格式与其他语言并无多少差别。

if expression:
   statement...
elif expression:   
   statement1...
   statement2...
else:
   statement...
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7

if分支的条件不仅包括Bool类型的表达式,可以是任意类型,下面的值作为Bool表达式时,会被当做False处理:

False,None,0," ",(),[],{}

    各种代表“空”的 str类型、list类型、dict类型的条件都会被当做False来处理。

    2.2.2 if分支结构的逻辑错误

    在使用if-else语句时,有一个基本规则:总是有先把范围小的条件放在前面处理。

    age =45
    if age>20:
        print("Younger")
    elif age>40:
        print("Middle age")
    elif age>60
        print('older')
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    运行以上程序输出的反而是 Youger,理由很简单,第一个if为true就不用再elif了,所以范围小的应该放前面处理。正确应为:

    age =45
    if age>60:
        print("Older")
    elif age>40:     #等同于if age>40 and not(age>60)
        print("Midage")
    elif age>20
        print('Younger')
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    2.2.3 Pass语句和断言

    • Python也提供了Pass语句,也就是空语句,在某些时候希望某处有一个语句占位但又不想他做什么事或时暂时还没想好要让他做什么事时,就可以使用Pass语句。
    s=int(input("please input an int:"))
    if s>5:
        print("大于5")
    elif s<5:
        pass
    else:
        print("等于5")
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 断言语句(assert)与If 分支类似,它用于对一个Bool表达式进行断言,相当于竞答,如果表达式为true,程序继续进行,如果为False则会引发AssertionError错误,终止程序,出局。
    s=int(input("please input an int:"))
    assert 5<s<10
    print("s在5和10之间")
    ``
    
    ```python
    please input an int:1
    Traceback (most recent call last):
      File "C:/Users/WD/PycharmProjects/li4.6/li.py", line 2, in <module>
        assert 5<s<10
    AssertionError
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11

    2.3 循环结构

    2.3.1 While 循环结构

    While循环的语法格式如下:

    count=0			#init_statements
    while count<5:		#test_expression
        print("count:",count)  #body_statements
        count+=1		#iteration
    print("Recycle finished")
    • 1
    • 2
    • 3
    • 4
    count: 0
    count: 1
    count: 2
    count: 3
    count: 4
    Recycle finished
    • 1
    • 2
    • 3
    • 4
    • 5

    那么想要取出列表或元组中的值时,除了pop()方法以弹栈的形式取出,就还可以用循环遍历取出其中的元素。

    2.3.2 for-in 循环

    用while循环去遍历序列显然要麻烦得多,那么用专门的for-in循环来遍历这些可迭代对象就会更加简洁。
    for-in循环的语法格如下:

    for 变量 in 可迭代对象
        statements
    
    • 1
    • 2

    可迭代对象即指该对象中包含一个_iter_方法,且该方法的返回值对象有next()方法。
    另外还有一点说明,for-in循环中的变量的值受for-in循环控制。他会在每次循环开始时自动被赋值,因此不应该在循环中对该变量赋值。
    如用for_in循环来求阶乘:

    integer=int(input("please input the target:"))
    result=1
    for i in range(1,integer+1):
        result*=i
    print(result)
    • 1
    • 2
    • 3
    • 4
    please input the target:3
    6
    • 1

    用for-in循环遍历列表、元组和字典:

    • 计算列表中所有数值的和与平均值:
    a_list=[3.3,5.9,100,102.33,12,56,78,'python']
    sum=0
    count=0
    for ele in a_list:
        if isinstance(ele,int) or isinstance(ele,float):
            sum+=ele
            count+=1
    print("求和:",sum)
    print("平均:",sum/count)
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 遍历字典时使用了items()、keys()、values()这三个方法:
    my_dict={'BMW':100,'Bens':300,'Ford':20}
    for key,value in my_dict.items():
        print("key:",key)
        print("value:",value)
    
    for key in my_dict.keys():
        print("key:",key)
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6

    for表达式

    for表达式最终返回的是列表,因此可利用列表、元组等可迭代对象来创建新的列表。表达式如下:

    [表达式 for 循环计数器 in 可迭代对象]
    
    • 1

    for表达式与for循环看似无区别,实则不然:

    • 在for表达式之前定义一个表达式,该表达式通常会包含循环计数器
    • 没有循环体,因此不需要冒号
    a_range=range(10)
    a_list=[x*x for x in a_range if x%2==0]
    print(a_list)
    
    output:
    [0, 4, 16, 36, 64]
    • 1
    • 2
    • 3
    • 4
    • 5

    2.3.3 嵌套循环

    easy,不说了。

    2.4 控制循环结构

    Python没有提供go to 来控制程序的跳转,据说时提高可可读性降低了灵活性。但Python也提供了break 和 continue来控制循环结构,用return来结束整个方法。

    1. 使用break结束循环
      某些时候需要强行终止循环而不是等待出现False才终止,此时即可采用break来终止循环跳出循环体。
      但值得注意的是,break只可以结束它所在的循环而不可以结束他外部嵌套的循环。

    2. 使用continue来忽略本次循环剩下的语句
      看似它和break一样中止了循环,但continue并不会跳出循环,只是结束了本次循环,下次循环依旧进行。

    3. 使用return 结束方法
      return用于从包围它的最直接方法、函数或匿名函数返回,当函数或方法执行到return语句时,这个函数或方法将被结束。
      和break 和 continue 不同的是,不论return 处于多少层循环之内,都将直接结束整个函数或方法。

    练习:打印一个近似圆,只要给定不同的半径,圆的大小就会随之改变。

    r = int(input("请输入半径: "))
    for i in range(2 * r + 1):
        half = round((r ** 2 - (r - i) ** 2) ** 0.5)
        print("  " * (r - half), end="")
        print("*", end="")
        print("  " * half * 2, end="")
        print("*")
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    请输入半径: 3
          **
      *        *
    *            *
    *            *
    *            *
      *        *
          **
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7

    该程序也体现了顺序结构执行的方法,逐条语句执行
    可见Python语言的简洁。虽然已经在课堂上学过一个学期C,可能现在让我来用C来输出这个东西,用循环跳指针还是会让我头大。。。

    此处有几点注意:
    Python每次输出都会 自动换行,因此如果不想让结果输出自动换行,就可以加上一个end= ,还可以设置间隔符。

    发布了2 篇原创文章 · 获赞 0 · 访问量 62


    所属网站分类: 技术文章 > 博客

    作者:3434erer

    链接: https://www.pythonheidong.com/blog/article/231027/

    来源: python黑洞网

    任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任

    9 0
    收藏该文
    已收藏

    评论内容:(最多支持255个字符)