Python3基础语法

发布时间:2023年12月20日

Python 是一种解释型、面向对象、动态数据类型(弱类型)的高级程序设计语言。
Python 由 Guido van Rossum 于 1989 年底发明,第一个公开发行版发行于 1991 年。
像 Perl 语言一样, Python 源代码同样遵循 GPL(GNU General Public License) 协议。
官方宣布,2020 年 1 月 1 日, 停止 Python 2 的更新。
Python 2.7 被确定为最后一个 Python 2.x 版本。
Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。
开发工具:Visual Studio Code
1.查询是否安装python3
在Visual Studio Code终端的运行结果

apple@192 python % python3        
Python 3.12.1 (v3.12.1:2305ca5144, Dec  7 2023, 17:23:38) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 

2.cnotrol加Z字退出命令编译状态
在Visual Studio Code终端的运行结果

apple@192 python % python3        
Python 3.12.1 (v3.12.1:2305ca5144, Dec  7 2023, 17:23:38) [Clang 13.0.0 (clang-1300.0.29.30)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
zsh: suspended  python3
apple@192 python % 

clear命令可以在命令行清除屏幕信息,但是在python3命令编译状态下执行clear无效。

3.直接运行.py文件
在在Visual Studio Code终端的命令行执行:python3 test.py

apple@192 python % python3 test.py

Python 在代码编写时,没有大括号约定代码块的边界,而是用缩进来组织,默认为 4 个空格,比如以下 object c 语言的代码:
int a = 1;
if(a>0) {
print(“a>0”);
}else{
print(“a<=0”);
}
而在 Python 里面,是没有大括号的,但需要前面缩进 4 个空格表示代码块:

a =  1 # float(input("输入一个数字: "))
if a>0:
    print('a>0')
else:
    print('a<=0')

打印结果:

a>0
  1. Python数据类型

4.1 整数、浮点数

Python 的整数和浮点数与其它语言比较类似,都是通过正常数字表达。

但 Python 允许我们在数字中加下划线 _ 分隔很大的数,比如:十进制 10_000_000_000,十六进制也可以 0xa5b3_c3d。

并且,Python 的整数和浮点数都没有大小限制,但是超过一定范围后(比如:计算机的位数不足以表示这个数)就直接表示为 inf(无限大)。

print(float("inf") > 20000)

打印结果:

True

4.2 字符串

Python 中的字符串用两个单引号 ‘’ 表示,比如 ‘Hello World’。

当字符串内部既包含 ’ 又包含 " 时,可以用转义字符 \ 来标识引号,比如:

‘I’m"OK"!’, 即:I’m “OK”!
Python 还用了 r’’ 表示 ‘’ 内部的字符串默认不转义:

print('\\t\\') #转义时

打印结果:

\t\
 print(r'\\\t\\') #不转义时

打印结果:

\\\t\\

如果字符串内部有很多换行,可以用 ‘’‘’‘’ 的格式表示多行内容:

print('''line1
line2
line3''')

打印结果:

line1
line2
line3

多行字符串 ‘’‘’‘’ 还可以在前面加上 r 使用,转义符会失效:

print(r'''hello,\n
...world''')

打印结果:

hello,\n
...world

4.3 布尔值与空值

布尔值

Python 用 True/False 来表示布尔:

print(True)
print(False)
print(3 > 1)
print(3 >  5)

打印结果:

True
False
True
False

布尔值可以用与、或和非(and、or和not表示)运算:

print(True and False)
print(True or False)
print(not False)
print(not 1 > 2)

打印结果:

False
True
True
True

空值

和 Java 中的 null、Go 语言中的 nil 一样,Python 用 None 来表示空值。空值没有数据类型,判断空值:

print(False==None)
print(None==None)
print(1==None)

打印结果:

False
True
False

4.4 变量与常量

变量不仅可以是数字,还可以是任意数据类型。变量在程序中用变量名表示,变量名必须是大小写英文、数字和 _ 的组合,且不能用数字开头,比如:

a = 1
t_007 = ‘T007’
Ans = True
注意:和其它固定类型不同,Python 中的变量名可以反复赋值,而且可以是不同数据类型的变量:

a = 123
print(a)
a = ‘ABC’
像 Python 这种变量本身类型不固定的语言称之为动态语言,与之对应的是静态语言。静态语言在定义变量时必须指定变量类型,如果赋值的时候类型不匹配,就会报错。例如 Go 就是静态语言,赋值语句如下(// 表示注释):

a := 100 // a被定义为整数类型变量
a = “abc” // 报错:不能把字符串赋给整型变量
与 Go、Java 等静态语言相比,Python 作为动态语言更灵活,就是这个原因。

4.5 list 和 tuple

list

和大多数语言一样,list 作为一个列表,表示多个元素组合:

books = ['Chinese', 'Math', 'English']
print(books)

打印结果:

['Chinese', 'Math', 'English']

Python 作为动态语言,一个 list 中的元素可以是不同类型,比如:

l2 = ['Chinese', True, 123]
print(l2)

打印结果:

['Chinese', True, 123]

Python 提供了很多数组相关的函数,可以直接使用,如:

len(),获取列表的元素个数;

print(len(l2))

打印结果:

3

append,插入元素到列表的尾端;

l2.append(123456)
print(l2)

打印结果:

['Chinese', True, 123, 123456]

insert,插入元素到数组指定位置;由于insert是动态的,当插入的下标超过list的总长度时页能插入到list的尾部

books.insert(2, 12334)
print(books)
books.insert(10, 1233456)
print(books)

打印结果:

['Chinese', 'Math', 12334, 'English']
['Chinese', 'Math', 12334, 'English', 1233456]

pop,删除指定下标的元素,默认删除尾端元素。若下标大于等于list的总长度就报错

books.pop(4)
print(books)

打印结果:

['Chinese', 'Math', 12334, 'English']

tuple

tuple 元组是 Python 中独有的数据结构,表示一组不可变的元素:

classmate = (‘zhangs’, ‘lis’, ‘wangw’)
tuple 没有 append、insert、pop 这样的方法,也没有赋值操作。

不可变的元组 tuple 的意义是:代码更安全。

Python官方说明:如果可能,能用 tuple 代替 list 就尽量用 tuple。

classmate = ('zhangs', 'lis', 'wangw')
print(classmate)

打印结果:

('zhangs', 'lis', 'wangw')

4.6 dict 和 set

dict

字典(dict)也叫 map,是存储键值对(key-value,简称 k-v)的数据结构,采用 hash 算法存储数据,具有极快的查找速度。

定义一个 dict,赋值:

d = {} # 存储名字和年龄的映射
d["zhangsan"] = 18
d["lisi"] = 19
print(d)

打印结果

{'zhangsan': 18, 'lisi': 19}

或者:

d = {"zhangsan": 18, "lisi": 19}
print(d)

打印结果

{'zhangsan': 18, 'lisi': 19}

当获取 dict 中的 value 值时,可以用 get() 方法:

print(d.get("zhangsan"))
print(d['zhangsan'])

打印结果:

18

或者直接用:

print(d['zhangsan'])

打印结果:

18

删除 key 时,用 pop(key) 方法。

d.pop("zhangsan")
print(d)

打印结果:

{'lisi': 19}

Python 中使用 dict 需要注意的两点:

如果 key 不存在,d[key] 会报错;
dict 中的 key 必须是不可变对象,如字符串、整型数等等,list 是可变的,所以不能作为 dict 的 key;

d[1] = 20
print(d)

打印结果:

{'lisi': 19, 1: 20}

set集合

set 和 dict 类似,也是无序的数据结构,且重复元素会被自动过滤。

s = set([1, 2, 3, 1, 2])
print(s) # {1,2,3

打印结果:

{'lisi': 19, 1: 20}
{1, 2, 3}

set 可以理解为 dict 中的 value 为空的数据结构,在其它语言里,比如 Go 语言里是不存在 set 类型的,要定义一组不重复的元素,只能用 dict 来做。

set 提供了很多操作元素的方法:

add(key),添加元素;

s.add(4)
print(s)
s.add(3)
print(s)

打印结果:

{1, 2, 3, 4}
{1, 2, 3, 4}

remove(key),删除元素;
和 dict 一样,set 内部不允许放入可变对象,如 list。若删除的元素不存在会报错

s.remove(3)
print(s)
s.remove(5)
print(s)

打印结果:

{1, 2, 4}
Traceback (most recent call last):
  File "/Users/apple/小鸡科技/工作/python/test.py", line 70, in <module>
    s.remove(5)
KeyError: 5
  1. 基本操作

5.1 条件判断

和大多数编程语言一样,在Python 中,采用 if-else 来作为条件控制:

age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')
    names = ['b', 'a', 'c']

打印结果:

kid

和其它语言相比,Python 需要注意三点:

判断语句的冒号不能省略;
Python 的条件判断代码块不用大括号 {} 装起来,而是以缩进代码块来判断(VsCode 中可以采用 tab 键和 shift+tab 键调节缩进);
新增 elif 代替 else if 语句。

5.2 循环

Python 有两种循环 for 和 while。

for 循环

循环打印列表里的元素:

sum = 0
for x in range(101):
    sum = sum+x
print(sum) #5050

打印结果:

5050

Python 中自带的 range(n) 方法,可以生成列表 [1, 2, …, n-1]

s1 = range(30)
print(s1)
print(len(s1))

打印结果:

range(0, 30)
30

while 循环

只有条件满足,就不断循环,只到不满足条件时退出。比如计算 100 以内的所有奇数之和:

sum = 0
num = 99
while num>0:
    sum = sum+num
    num = num-2
print(sum)

打印结果:

2500

break 和 continue

和其它语言的循环类似,Python 也提供了 break 和 continue 关键字用来控制循环:

d = ["zhangsan", "lisi", "wangwu"]
for name in d:
    if name == "lisi":
        print(name)
        break # 找到对应的元素就退出循环

打印结果:

lisi

lisi
和 break 不同,continue 只是跳过当前循环:

d = ["zhangsan", "lisi", "wangwu"]
for name in d:
    if name == "lisi":
        continue
    print(name)

打印结果:

zhangsan
wangwu

利用循环开发一个猜数字游戏

游戏说明:随机生成一个 0-100 的数,参与者最多可以猜 5 次,看能否猜出随机数是多少。

参考代码:

import random
num = random.randint(0,100)
x = 0
n1 = 0 #记录猜的最近数
n2 = 100 #记录猜的最近数的距离
flag = False

while x<5:
    x = x+1
    n = int(input('随机输入一个数:'))
    if n == num:
        flag = True
        print('你真聪明,只用了%d次就猜对了,答案是%d'%(x, num))
        break
    elif n>num:
        print('太大了!')
        if n-num<n2:
            n2 = n-num
            n1 = n
    else:
        print('太小了!')
        if num-n<n2:
            n2 = num-n
            n1 = n  
if  not flag:
    print('都猜错了!答案是%d,你猜的数%d很接近了,下次努力!'%(num,n1))

打印结果:

随机输入一个数:5
太大了!
随机输入一个数:3
太大了!
随机输入一个数:2
你真聪明,只用了3次就猜对了,答案是2
  1. 小结

?Python 为我们提供了非常完善的系统库,我们写程序时可以随取随用,让代码十分精简。比如,完成一个简单的定时任务,C 语言要写 1000 行代码,Go 需要 100 行,而 Python 可能只用 20 行就能实现。

所以 Python 是一种相当高级的语言。理论上来说,越高级的语言,我们入门的成本越低,上手也比较快。

这时,聪明的同学可能就开始问了:那既然 Python 这么好,为什么还需要其它语言呢?

是的,Python 也有它不会的地方,也有它的局限性。比如写操作系统,这个只能用低级语言写;写手机 App,只能用 Swift/Objective-C(iPhone)或 Java(Android);写终端控制器,最好用 C 或 C++。

而且 Python 的运行时间比 C/C++ 等语言都要慢,在性能敏感的程序上,Python 显然不是一个很好的选择。

代码汇总:

print(100+200)
a =  1 # float(input("输入一个数字: "))
if a>0:
    print('a>0')
else:
    print('a<=0')
print('I\'m \"OK\"!')
print('\\t\\') #转义时
print(r'\\\t\\') #不转义时
print('''line1
...line2
...line3''')
print('''line1\n
line2\n
line3''')
print('''line1
line2
line3''')
print(r'''hello,\n
...world''')
print(r'''hello,\n
world''')
print(True)
print(False)
print(3 > 1)
print(3 >  5)
print(True and False)
print(True or False)
print(not False)
print(not 1 > 2)
print(float("inf") > 20000)
print(False==None)
print(None==None)
print(1==None)
books = ['Chinese', 'Math', 'English']
print(books)
l2 = ['Chinese', True, 123]
print(l2)
print(len(l2))
l2.append(123456)
print(l2)
books.insert(2, 12334)
print(books)
books.insert(10, 1233456)
print(books)
books.pop(4)
print(books)
classmate = ('zhangs', 'lis', 'wangw')
print(classmate)
d = {} # 存储名字和年龄的映射
d["zhangsan"] = 18
d["lisi"] = 19
print(d)
d = {"zhangsan": 18, "lisi": 19}
print(d)
print(d.get("zhangsan"))
print(d['zhangsan'])
d.pop("zhangsan")
print(d)
d[1] = 20
print(d)
s = set([1, 2, 3, 1, 2])
print(s) # {1,2,3
s.add(4)
print(s)
s.add(3)
print(s)
s.remove(3)
print(s)
age = 3
if age >= 18:
    print('adult')
elif age >= 6:
    print('teenager')
else:
    print('kid')
    names = ['b', 'a', 'c']
for name in names:
    print(name)
sum = 0
for x in range(101):
    sum = sum+x
print(sum) #5050
s1 = range(30)
print(s1)
print(len(s1))
sum = 0
num = 99
while num>0:
    sum = sum+num
    num = num-2
print(sum)
d = ["zhangsan", "lisi", "wangwu"]
for name in d:
    if name == "lisi":
        print(name)
        break # 找到对应的元素就退出循环

d = ["zhangsan", "lisi", "wangwu"]
for name in d:
    if name == "lisi":
        continue
    print(name)

import random
num = random.randint(0,10)
x = 0
n1 = 0 #记录猜的最近数
n2 = 100 #记录猜的最近数的距离
flag = False

while x<5:
    x = x+1
    n = int(input('随机输入一个数:'))
    if n == num:
        flag = True
        print('你真聪明,只用了%d次就猜对了,答案是%d'%(x, num))
        break
    elif n>num:
        print('太大了!')
        if n-num<n2:
            n2 = n-num
            n1 = n
    else:
        print('太小了!')
        if num-n<n2:
            n2 = num-n
            n1 = n  
if  not flag:
    print('都猜错了!答案是%d,你猜的数%d很接近了,下次努力!'%(num,n1))

打印结果:

apple@192 python % python3 test.py
300
a>0
I'm "OK"!
\t\
\\\t\\
line1
...line2
...line3
line1

line2

line3
line1
line2
line3
hello,\n
...world
hello,\n
world
True
False
True
False
False
True
True
True
True
False
True
False
['Chinese', 'Math', 'English']
['Chinese', True, 123]
3
['Chinese', True, 123, 123456]
['Chinese', 'Math', 12334, 'English']
['Chinese', 'Math', 12334, 'English', 1233456]
['Chinese', 'Math', 12334, 'English']
('zhangs', 'lis', 'wangw')
{'zhangsan': 18, 'lisi': 19}
{'zhangsan': 18, 'lisi': 19}
18
18
{'lisi': 19}
{'lisi': 19, 1: 20}
{1, 2, 3}
{1, 2, 3, 4}
{1, 2, 3, 4}
{1, 2, 4}
kid
b
a
c
5050
range(0, 30)
30
2500
lisi
zhangsan
wangwu
随机输入一个数:5
太大了!
随机输入一个数:3
太大了!
随机输入一个数:2
你真聪明,只用了3次就猜对了,答案是2
apple@192 python % 
文章来源:https://blog.csdn.net/jia12216/article/details/135109684
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。