Week 1:Python的基础知识及编程技巧

本文介绍了冯诺依曼体系结构的计算机组成原理、计算机语言发展史、Python语言特性及其解释器,探讨了位运算符、内存管理机制等知识点,并提供了编程实践中的技巧与思考。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

一、基础知识

1、冯诺依曼体系的计算机五大部件
I / O 设备,内存,CPU的运算器和控制器;
其中CPU中还有与其同频的寄存器,以及为避免重新从内存加载而设置的多级缓存cache,一般是频率逐级递减的三级,但频率都高于内存;寄存器和内存都是掉电即失,寄存器就像CPU和内存进行数据传输的中间站、搬运工;

2、计算机语言的发展
关于转换工具Interpreter:编译器和解释器
C,C++ 用编译器进行本地编译,将源代码转换成本机的CPU指令;
Java,Python,C# 用解释器将源代码编译成中间代码Bytecode,再在虚拟机VM上运行;

3、Python的解释器
官方CPython:最广泛;
IPython:更强交互能力的CPython;
PyPy:Python编写,采用动态编译JIT技术进行内存动态优化,效率及性能优于CPython,劣势是支持的库不多;
JPython:把Python源代码编译成Java字节码,在JVM上运行,一般用在对VM有高性能要求时;

4、Python语言特点
动态编译型语言,强类型语言;
不用事先声明变量类型,缺点是可能在运行时才发现问题;不同类型间操作必须先强制类型转换为同一类型,而不像有的弱类型语言会进行隐式类型转换;

5、位运算符
位与&:全1为1,有0则0,类似于按位相乘;例 若x&1=1,则x为奇数;
位或 | :有1则1,全0则0;
异或 ^:相异为1,相同为0;
取反~:按位取反;
左移<<:按位左移,高位舍弃低位补0,多用来乘除2的倍数,在C语言中更常用,很高效;
右移>>:按位右移,例 32 // 8 相当于32>>3;

6、运算符优先级
从高到低:算术运算符,比较运算符,逻辑运算符(not and or),赋值运算符;

7、Python内存管理
垃圾回收机制GC和引用计数;
引用计数可用import sys及sys.getrefcount(x)查询;

8、列表list,链表link,队列queue,栈stack
list:有顺序的线性结构,可变、可索引、可迭代;便于查询不便于修改;
link:有顺序的非线性结构;便于修改不便于查询;
queue:先进先出;类似于一个一个走;
stack:后进先出;类似于摆盘子;

9、可迭代对象iterable
是一个对象,一个可遍历集合;
例:range(stop)- > range object
返回值为一个range对象,range(start,stop),是一个可迭代对象,不是集合内部的可迭代元素。

二、做题思考

1、折半思想
做有些判断题时,可先将总范围预估一下、一分为二,写成一个if-else语句,再分别在if和else的代码块中嵌套新的if-else语句,这样效率会比if-elif-else层层下来效率更高;

2、对称思想
遇到有对称性问题时,可考虑将区间范围变为[-n,n),辅以三元表达式 或绝对值函数abs(),让代码更加简洁;

3、设置flag开关
例:从高位到低位打印一个五位数,输入值可能只是个三位数

#立flag = False控制,以防最高位是0

n=int(input("pls input five number:"))
flag=False
for i in range(5):
    x=10**(4-i)
    a=n//x
    if a or flag:
        print(a)
        flag=True
    n%=x

若输入00501,分母、取整和取余每次都正常循环着,if 后的 condition 后加了取整值a和flag开关两个条件,flag开始时为False,两个条件用or连接,使得开始时condition主要由a决定,只有a为真,即高位a不为0时,才打印a,并开启开关,然后condition再跟a无关,即使再遇到a==0也不影响print的执行,遇到非零的高位之后的所有低位都能顺利打印;

flag在用于某些需要一键开启、关闭的场景中,可灵活使用;

4、一些新思路
例:打印边长为n的正方形

n=int(input("n=:"))
for i in range(n):
    for j in range(n):
        if i==0 or i==n-1 or j==0 or j==n-1:
            print("*",end=" ")
        else:
            print(" ",end=" ")
    print()

两层边界用两层循环控制,要点在于找出边界的规律,及print函数的换行控制。

5、写代码的小技巧
1)while多用在不知循环次数、用break打断才退出的情况,其中while True最常用;for循环多用于已知循环次数时;

#打印若干数算术平均数,初始代码

s=float(input("pls input number:"))
a=input("pls input new number:")
c=1
while a:
    s+=float(a)
    c+=1
    print("average:",s/c)
    a=input("pls input another number:")


#打印若干数算术平均数,while True形式

s=float(input("pls input number:"))
c=1
while True:
    a=input("pls input another number:")
    if a=="":
        break
    else:
        s+=float(a)
        c+=1
        print("average:",s/c)

用while True可省略部分重复代码;

2)写Python程序时,擅用while-else和for-else循环;

3)方法中参数为value时慎用,多考虑效率问题,因用value索引大多需遍历、比较慢;

4)对输入值做判断时,可考虑先不做int类型转换,对字符串做非空判断有时更便利。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值