python基础

常见数据类型

数据类型 例子
整型 -2,-1,0,1,2,3,4,5
浮点型 -1.25,-1.0,- -0.5,0.0,1.0
字符串 ‘a’,’aa’,’Hello!’,’11cats’


如果看到错误信息

SyntaxError:EOL while scanning string literal

可能是忘记了字符串末尾的单引号,就像下面例子↓

>>>'Hello world!
SyntaxError:EOL while scanning string literal

字符串的连接和复制

在python中,根据操作符之后的值的数据类型,操作符的含义可能改变。

+运算符

在用于两个整型或浮点型值时,+是相加操作符

在用于两个字符串时,+是“字符串连接”操作符

看看效果

1
print('Alice'+'Bob')

运行↓

AliceBob


+不能用于一个字符串和一个整型值相加,否则会报错

*运算符

当用于两个整型或浮点型值时,*表示乘法操作符

当用于一个字符串和一个整型值时,*表示“字符串复制”操作符

看看效果

1
print('Alice'*5)

运行↓

AliceAliceAliceAliceAlice

赋值语句

python的赋值语句包含一个变量名、一个等号(赋值操作符),以及要存储的值

1
spam=42        #spam变量被赋整型值42(就这么简单)

有效和无效的变量名

有效的变量名 无效的变量名
balance current-balance(不允许中划线)
currentBalance current balance(不允许空格)
current_balance 4account(不允许数字开头)
_spam 51(不允许数字开头)
SPAM total_$sum(不允许这样的特殊字符)
account4 ‘hello’(不允许 ‘ 这样的特殊字符)

常用基础函数

print()函数将括号内的内容显示到屏幕上

1
print('Hello,world!') # '#'后面是一行注释,也能用于临时删除一行代码

运行↓

Hello,world!

print()函数与变量名的结合:使用+运算符触发链接两字符串功能即可

1
print('Nice to meet you, '+myName+'!') #myName是一个变量名

加入myName中存储字符串’Seth’,运行后↓

Nice to meet you, Seth!

input()函数

函数等待用户再见哦按上输入一些文本,并按下回车键

使用↓

1
myName=input()  #变量名=input()

input函数求值为一个字符串,也就是说总是返回一个字符串(即使用户输入51返回的也是’51’)

len()函数

可以向len函数传递一个字符串(或包含字符串的变量),然后该函数求职为一个整型值

1
2
print(len('Hello '))
print(len(' '))

运行↓

5
0

str()、int()和float()函数

str()函数求值为传入值的字符串形式

int()函数求值为传入值的整数形式

float()函数求值为传入值的浮点数形式

1
2
3
4
5
print(str(3.14))       #浮点型转化为字符串型
print(int('1')) #字符串转化为整型
print(int(1.25)) #对浮点数的取整运算
print(float('3.14')) #字符串转化为整型
print(float(3)) #整型转化为浮点型

输出↓

'3.14'
1
1
3.14
3.0


将一个不能求值为整数的值传递给int(),将会报错

1
2
print(int('3.14'))  #错误
print(int(float('3,14'))) #正确

文本和数字相等判断

整型和浮点型的值永远也不会与字符串相等
整型值可与浮点型值相等

1
2
3
42=='42'       #False
42==42.00 #True
42.0==0042.000 #True

python控制流

布尔值

“布尔”数据类型只有两种值:True,False(首字母必须大写)
布尔值可用在表达式中,也可保存在变量中

1
2
spam=True
print(spam)

运行↓

True

比较操作符

“比较操作符”比较两个值,求值为一个布尔值

操作符 含义
== 等于
!= 不等于
< 小于
> 大于
<= 小于等于
>= 大于等于

布尔操作符

and:一否则否

表达式 求值为
True and True True
True and False Fasle
False and True False
False and False False

or:一真则真

表达式 求值为
True or True True
True or False True
False or True True
False or False False

not:相反

表达式 求值为
not True False
not False True

控制流语句

if语句

若条件为真,则执行子句中的代码

包含以下部分;

  • if关键字
  • 条件
  • 冒号:
  • 在下一行开始,缩进的代码块(成为if子句)

一个小栗子↓

1
2
if name=='SYolin':
print('Hi!,SYolin!')

else语句

跟在if语句之后,若if条件为False,则执行else子句

包含以下部分:

  • else关键字
  • 冒号:
  • 在下一行开始,缩进的代码块(称为if子句)

再来个小栗子↓

1
2
3
4
if name=='SYolin':
print('Hi!,SYolin!')
else:
print('Hi,stranger!')

elif语句

表达“否则如果”的含义,提供另一个条件,尽在前面的条件为False时才检查该条件

包含以下部分:

  • elif关键字
  • 条件
  • 冒号:
  • 在下一行开始,缩进的代码块(称为elif子句)

elif语句的次序很重要,一旦找到一个True的条件,剩余的子句就会自动跳过
所以应使使下面的elif条件是上面的范围更小的条件

while循环语句

可以让一个代码块在条件的为True前提下,一遍又一遍地执行

包含以下部分:

  • 关键字
  • 条件
  • 冒号:
  • 在下一行开始,缩进的代码块(称为while子句)

break语句

跳出当前循环

for循环和range函数

用于让一个代码块执行固定的次数

附:“类真”和“类假”
在用于条件时,0、0.0和’ ‘(空字符串)被认为是False,其他值被认为是True。

先来个for语句栗子

1
2
for i in range(5):
print('Hello,world')

运行↓

Hello,world
Hello,world
Hello,world
Hello,world
Hello,world

像for i in range(5)这样,总是包含以下部分:

  • for关键字
  • 一个变量名
  • in 关键字
  • 调用range()的方法,最多传入3个参数
  • 冒号
  • 从下一行开始,缩进的代码块(称为for子句)

等价的while循环

1
2
3
while i<5:
print('Hello,world!')
i+=1

range函数

可最多传三个参数
range(开始,停止,步长参数)

举个栗子↓

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

运行↓

0
2
4
6
8

导入模块

python程序可以调用一组基本的函数,称为“内建函数”
python也包括一组模块,称为“标准库”每个模块都是一个python程序,包含一组相关的函数。
例如:
math模块有数学相关的函数
random模块有随机数相关的函数

在开始使用一个模块函数之前,必须用import语句导入该模块
import语句包含以下部分:

  • import关键字
  • 模块的名称
  • 可选的更多模块名称,之间用逗号隔开
    在导入一个函数后,可以使用该模块中所有函数

格式

模块名.函数名()   # 表示在模块中寻找该函数

举个栗子↓

1
2
3
import random
for i in range(5)
print(random.randint(1,10))

运行↓

4
1
8
4
1

用sys.exit()提前结束程序

必须先导入sys模块

import sys

通过调用

sys.exit()

使程序提前终止

函数

函数

1
2
3
4
5
def fun():
print('Hello,world!')
fun()
fun()
fun()

运行↓

Hello,world!
Hello,world!
Hello,world!

一个自定义函数包含以下部分:

  • def语句和参数(定义函数)
  • 冒号
  • 下一行缩进的函数体
  • 可能有return关键字+表达式
  • 函数调用

注:

表达式是值和操作符的组合。函数调用可以用在表达式中,因为他求值为它的返回值

全局变量可以在局部作用域中读取

先举个栗子↓

1
2
3
4
5
def fun():
print(eggs)
eggs=42
fun()
print(eggs)

运行↓

42
42

在fun函数中没有变量名eggs,也没有代码为eggs赋值
因此调用fun函数时,默认对全局变量eggs的引用

global语句

如果需要在一个函数内修改全局变量,就使用global语句

global eggs 

异常处理

考虑下面一种情况

1
2
3
4
5
6
def fun(num):
return 42/num
print(fun(2))
print(fun(10))
print(fun(0))
print(fun(1))

运行结果是这样的

21.0
3.5
*报错balabalabala*

原因显而易见,当函数试图除以0时,就会触发ZeroDivisionError

错误可以由tryexcept语句来处理。
把那些可能出错的语句放在try子句中,如果错误发生,程序执行就转到下面的except子句开始处,可以提醒用户。
(和if、else条件句原理有点像)

改善上面的代码

1
2
3
4
5
6
7
8
9
def fun(num):
try:
return 42/num
except:
print('Error:Invalid argument')
print(fun(2))
print(fun(10))
print(fun(0))
print(fun(1))

运行如下

21.0
3.5
Error:Invalid argument
None 
42.0

关于None的输出:
  先执行fun(0)时,触发了except子句,打印出Error:Invalid argument,而后执行print(fun(0))时就等价于print(print(‘Error:Invalid argument’)),而print函数的返回值是None,因此主函数打印出None。


  在函数调用的try语句块中,发生的所有错误都会被捕捉,而一旦跳到except子句的代码,就不会回到try子句中,它会照常继续向下进行

来个栗子↓

1
2
3
4
5
6
7
8
9
10
def fun(num):
return 42/num
print('Error:Invalid argument')
try:
print(fun(2))
print(fun(10))
print(fun(0))
print(fun(1))
except:
print('Error:Invalid argument')

运行就是这样了↓

21.0
3.5
Error:Invalid argument #print函数内部的的函数错误也能被try捕捉到