zoukankan      html  css  js  c++  java
  • Python基础语法学习笔记

    一、内存管理

        变量在动态语言中,无须事先声明,也不需要制定类型;

        编程中一般无须关心变量的存亡,也不需要关心内存的管理;

        Python使用“引用计数”记录所有对象的引用数

            当对象引用数变为0,它就可以被“垃圾回收”GC

             计算增加:赋值给其他变量就增加引用计数,例如X=3,Y=X

             计数减少:函数运算结束时,局部变量就会被自动销毁,对象引用计数减少;

                       变量被赋值给其他对象。例如:x=3;y=x;x=4

        当“引用计数”归0,即表示该对象不再被使用,垃圾回收机制会定期对“引用计数”标记为0的对象进行释放。

        有关性能的时候,就需要考虑变量的引用问题,但是该释放内存,还是尽量不释放内存,看需求。

    ##相关问题###

    内存空洞是如何产出的;

    如何规避内存空洞;

    内存回收优化方案;

    二、程序控制

    顺序执行

        按照先后顺序一条条执行;

    分支结构

        根据不同的情况判断,条件满足执行某条件下的语句;

    循环执行

        条件满足就反复执行,不满足就不执行或不再执行;

    if语句

        if condition:

             代码块

    condition必须是一个bool类型,这个地方有一个隐式转换bool 参考“真值表”

    真值表

    对象/常量

    总结

    ""

    False等价布尔值,相当于bool(value)

    空集合

        空字符串

        空字典

        空列表

        空元组

    None对象

    0

    "string"

    0

    >=1

    <=-1

    ()空元组

    []空列表

    {}空字典

    None

     

    多分支结构

    if…elif…else语句

             if condition1:

                       代码块1

             elif condition2:

                       代码块2

             elif condition3:

                       代码块3

             ……

             else:

                       代码块

    分支嵌套举例:

             嵌套结构,可以是分支、循环的嵌套;

             可以互相嵌套多层。

    score=80
    
    if score<0:
    
        print('wrong')
    
    else:
    
        if score==0:
    
            print('egg')
    
        elif score <= 100:
    
            print('right')
    
        else:
    
            print('too big')

    使用input函数

             input函数获取键盘输入input([prompt])

    查看帮助文档方法一:

     

    查看帮助方法二:

    注:Python中,下划线“_”是一个合法的标识符

    同时也是一个特殊标识符,它指的是上一次output的结果

    练习:

    1.输入2个数字,输出最大数

    a = int(input('input a number:'))
    b = int(input('input a number:'))
    if a > b:
        print(a)
    else:
        print(b)

    代码等效(使用三元表达式:真值 if 条件 else 假值):

    a = int(input('input a number:'))
    b = int(input('input a number:'))
    print(a) if a > b else print(b)

    2.给定一个不超过5位的正整数,判断其有几位

    #使用if…elif…else…

    a = int(input('input a number:') )
    if a<10:
        print(1)
    elif a<100:
        print(2)
    elif a<1000:
        print(3)
    elif a<10000:
        print(4)
    elif a<100000:
        print(5)

    代码优化方案——折半

    newnumber = int(input('number:'))
    if newnumber >= 100:
        if newnumber >= 10000:
            print(5)
        elif newnumber >= 1000:
            print(4)
        else:
            print(3)
    else:
        if newnumber >= 10:
            print(2)
        else:
            print(1)

    代码优化——使用len内置函数:

    newnumber = input('number:')
    length = len(newnumber)
    print(length)

    循环结构——while循环和for循环

    while语法:

             while condition:

                       block

             注:当条件满足condition为True,进入循环体,执行block

    while举例:

    flag = 10
    while flag:
        print(flag)
        flag -= 1

    注意边界,Python整型没有边界。

    如果将上面代码改为“flag += 1”便进入死循环。

    for语法:

             for element in iteratable:

                       block

             注:当可迭代对象中有元素可以迭代,进入循环体,执行block

    range函数

    for range函数举例:打印1~10

    for i in range(10):
        print(i+1)

    Range函数简介:前包后不包,range(起,止,步长)

    例:

    range(5) ==> range(0,5)==>[0,5] ==> [0,1,2,3,4]

    list(range(0,5,2))>>>[0,2,4]

     

    循环中的 continue 语句

             中断当前循环的当次执行,继续下一次循环;

    举例:计算10以内的偶数(for循环)

    for i in range(10):
        if not i%2:
            print(i)

    #引用range函数的步长

    for i in range(0,10,2):
    print(i)

    #引用continue

    for i in range(10):
        if i%2:
            continue
    print(i)

    #引用位与运算

    for i in range(10):
        if not i&0x01:
            print(i)

    for i in range(10):
        if i&0x01:
            continue
        print(i)

    循环中的 break语句

             终止当前循环

    举例:计算1000以内的被7整除的前10个数(for循环)

    count = 0
    for i in range (7,1000,7):
        print(i)
        count += 1
        if count >= 10:
            break

    循环continue、break语句总结

             continue和break是循环的控制语句,只影响当前循环,包括while、for循环;

             如果出现循环嵌套,continue和break也只影响语句所在的那一层循环;

             continue和break不是跳出语句块,所以if cond:break 不是跳出if,而是终止if外的break所在的循环

    for i in range(5):

        for j in range(5):

            if i>j:

                print(666)

                continue

        if i>=j:

            print(555)

            break

    练习:给定一个不超过5位的正整数,判断该数的位数,依次打印出个位,十位、百位、千位、万位的数字

    number = int(input('>>>'))
    number *= 10
    while(number//10)!=0:
            number//=10
            print(number%10)

    number = int(input('>>>'))
    numberV = len(str(number))
    for i in range(numberV):
        print(number%10)
    number=number//10

    将上面的结果反过来打印:

    number = int(input('>>>'))
    numberV = len(str(number))
    c=number
    for i in range(numberV):
        v=10**(numberV-i-1)
        m = c //v
        print(m)
        c -= v*m

    循环else子句语法

    while condition:

             block

    else:

             block

    for element in iteratable:

             block

    else:

             block

    ##如果循环正常的执行结束,就执行else子句;

    ##如果使用break终止,else子句不会执行。

    for i in range(5):
        print(i)
       # if i > 3:
        #    break
        #    continue
    else:
    print('OK')

    练习:

    一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?

    程序分析:

    假设该数为 x。

    1、则:x + 100 = n2, x + 100 + 168 = m2

    2、计算等式:m2 - n2 = (m + n)(m - n) = 168

    3、设置: m + n = i,m - n = j,i * j =168,i 和 j 至少一个是偶数

    4、可得: m = (i + j) / 2, n = (i - j) / 2,i 和 j 要么都是偶数,要么都是奇数。

    5、从 3 和 4 推导可知道,i 与 j 均是大于等于 2 的偶数。

    6、由于 i * j = 168, j>=2,则 1 < i < 168 / 2 + 1

    7、接下来将 i 的所有数字循环计算即可。

    for i in range(1,85):
        if 168 % i == 0:
            j = 168 / i;
            if  i > j and (i + j) % 2 == 0 and (i - j) % 2 == 0 :
                m = (i + j) / 2
                n = (i - j) / 2
                x = n * n - 100
                print(x)

    练习:打印斐波那契数列

    程序分析:斐波那契数列(Fibonacci sequence),又称黄金分割数列。

    指的是这样一个数列如:0、1、1、2、3、5、8、13、21、34、……

    程序分析:

    F0 = 0    (n=0)
    F1 = 1    (n=1)
    Fn = F[n-1]+ F[n-2](n=>2)

    方法一:

    def fib(n):
        a,b = 1,1
        for i in range(n-1):
            a,b = b,a+b
        return a
     
    # 输出了第10个斐波那契数列
    print(fib(10))

    方法二:使用递归

    # 使用递归
    def fib(n):
        if n==1 or n==2:
            return 1
        return fib(n-1)+fib(n-2)
     
    # 输出了第10个斐波那契数列
    print(fib(10))

    练习:打印一个边长为N的正方形

    n = 5
    print('*'*n)
    for i in range(n-2):
        print('*'+' '*(n-2)+'*')
    print('*'*n)

    #边长=3,则-1 0 -1 =>range(-1,2)
    #边长=4,则-2 -1 0 1 =>range(-2,2)
    #边长=5,则-2 -1 0 1 2 =>range(-2,3)
    n = 5
    e = -n//2
    for i in range(e,n+e):
        if i == e or i == n+e-1:
            print('*'*n)
        else:
            print('*' + ' '*(n-2) + '*')

    练习:求100以内所有奇数的和

    b = 0
    for i in range(1,100,2):
        b += i
    print(b)

    练习:打印九九乘法口诀表

    for i in range(1,10):
        for o in range(1,i+1):
            print('{}*{}={}	'.format(i,o,i*o),end='')
        print()

  • 相关阅读:
    Vue 开发常见问题集锦
    java lambda 所有列求和
    如何解决Bat脚本中包含中文,运行乱码
    Failed to parse multipart servlet request; nested exception is java.io.IOException: The temporary upload location [/tmp/tomcat.1428942566812653608
    mysql的时区错误问题,The server time zone value 'Öйú±ê׼ʱ¼ä' is unrecognized or represents more than one
    Error:Execution failed for task ':app:compileDebugJavaWithJavac'
    com.android.ddmlib.adbcommandrejectedexception:未经授权的设备。
    jar包编译成 dex
    apk 查看sha1签名
    Mybatis invalid comparison: java.util.Date and java.lang.String
  • 原文地址:https://www.cnblogs.com/an-baobao/p/12501299.html
Copyright © 2011-2022 走看看