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('{}*{}={}\t'.format(i,o,i*o),end='')
    print()

 

posted @ 2020-03-16 09:05  黑白键灬  阅读(285)  评论(0编辑  收藏  举报