Python学习笔记-基础知识

1、Python

1>简介

在程序中,为了更好的区分变量的功能和更有效的管理内存,变量也分为不同的类型。

Python是**==强类型====动态==**解释型语言。

强类型: 不允许不同类型相加。如整型+字符串会报错。

动态:不用显示声明数据类型,确定一个变量的类型是在第一次给它赋值的时候,也就是说: ==变量的数据类型是由值决定的==

2>环境

  1. Linux下
    1. 安装解释器-python3.7.3(目前最新版)
安装包获取
# wget https://www.python.org/ftp/python/3.6.6/Python-3.6.6.tar.xz

依赖包
# yum install zlib-devel openssl openssl-devel
  1. 安装IDE-pycharm
社区版安装包获取
# wget https://download.jetbrains.com/python/pycharm-community-2019.1.3.tar.gz

  1. Windows下
    1. 安装解释器-python3.7.3(目前最新版)
    2. 安装IDE-pycharm
  2. Mac下

2、变量

1>赋值

基本规则
1,赋值符号为:= ,符号两侧要有空格
2,调用时,直接调用即可
name = "zhangsan"		# str类型
age = 25				# 25没有加引号,则为int类型;加了引号,则为str类型;
height = 1.8			# float类型
marry = True			# bool类型

print(type(name))			# 通过type()内置函数得知变量的类型
print(type(age))
print(type(height))
print(type(marry))

2>调用

调用
1,结构调用
	1.>print(num)
	2.>if (i == 0):
2,拼接调用
	num = 123
    name = adc
	
	1>print("{}的号码是{}".format(name,num))
	2>print("%s的号码是%d"%(name, num))
	3>print(name+"的号码是"+num)

3、基本数据类型简介

1>类型分类

  1. ==数字==
    • int 整型(1, 2, -1, -2)
    • float 浮点型(34.678)
    • bool 布尔型(True/False)
    • complex 复数(4+3J, 不应用于常规编程,这种仅了解一下就好
  2. ==字符串==
    • str 按目前所学单引号双引号三引号内表示的内容为字符串
    • 栗子:“hello world" "12345"
  3. ==列表==
    • list 使用中括号表示 [1, 2, 3, 4]
  4. ==元组==
    • tuple 使用小括号表示 (1, 2, 3, 4)
  5. ==字典==
    • dict 使用大括号表示,存放key-value键值对 {"a":1, "b":2, "c":3}
  6. ==集合==
    • set 也使用大括号表示,但与字典有所不同 {1, 2, 3, 4}

2>类型的转换

转换函数说明
int(xxx)将xxx转换为整数
float(xxx)将xxx转换为浮点型
str(xxx)将xxx转换为字符串
list(xxx)将xxx转换为列表
tuple(xxx)将xxx转换为元组
dict(xxx)将xxx转换为字典
set(xxx)将xxx转换为集合
chr(xxx)把整数[0-255]转成对应的ASCII码
ord(xxx)把ASCII码转成对应的整数[0-255]

示例:

age = 25					
print(type(age))	# int类型
age = str(25)
print(type(age))	# str类型

示例:

name = "zhangsan"
age = 25				

print(name, "你" + age + "岁了")    # str+int,字符串拼接报错;age=str(25),这一句就可以成功。

4、交互输入、输出(重点)

1>交互输入

python3中使用input()函数等待用户的输入(python2中为raw_input()函数)

示例:

name = input("what is your name: ")
age = input("what is your age: ")		# input输入的直接就为str类型,不需要再str()转换了

print(name, "你" + age + "岁了")

小结: 用单引号,双引号,三引号, str()函数转换的和input()函数输入的都为字符串类型。

输出

2>普通输出

输出用print()

示例:

print("="*10)				 # 表示连续打印10个=符号
print("1-系统")
print("2-数据库")
print("3-quit")
print("="*10)
或者
print("="*10)
print('''1-系统				# 使用'''  '''符号来换行
2-数据库
3-quit''')
print("="*10)
结果一样,如下:

3>格式化输出

很多语言里使用printf来进行格式化打印

python里不用printf,但也可以用 % 表示格式化操作符

操作符说明
%s字符串
%d整数
%f浮点数
%%输出 %

示例:

name = "daniel"
age = str(20)

# 字符串拼接的写法
print(name+",你有"+age+"岁了")

# 两种格式化输出的写法
print("%s,你有%s岁了" % (name, age))
print("{},你有{}岁了".format(name, age))

小结:

  • %s或%d相当于是一个占位符,按顺序一一对应后面()里的变量(需要类型对应)
  • {}也相当于是一个占位符,按顺序--对应后面format()里的变量。这种写法的好处是不用对应类型

5、运算符

1>算术运算符(常用)

算术运算符描述实例
+加法1+2=3
-减法5-1=4
*乘法3*5=15
/除法10/2=5
//整除10//3=3 不能整除的只保留整数部分
**求幂2**3=8
%取余(取模)10%3=1 得到除法的余数

2>赋值运算符(常用)

赋值运算符描述实例
=简单的赋值运算符,下面的全部为复合运算符c =a + b 将a + b的运算结果赋值给c
+=加法赋值运算符a += b 等同于 a = a + b
-=减法赋值运算符a -= b 等同于 a = a - b
*=乘法赋值运算符a *= b 等同于 a = a * b
/=除法赋值运算符a /= b 等同于 a = a / b
//=整除赋值运算符a //= b 等同于 a = a // b
**=求幂赋值运算符a ** = b 等同于 a = a ** b
%=取余(取模)赋值运算符a %= b 等同于 a = a % b

3>比较运算符(常用)

比较运算符描述实例
==等于(注意与=赋值运算符区分开),类似shell里的-eqprint(1==1) 返回True
!=不等于,类似shell里的-neprint(2!=1) 返回True
<>不等于(同 != )print(2<>1) 返回True
>大于, 类似shell里的-gtprint(2>1) 返回True
<小于, 类似shell里的-ltprint(2<1) 返回False
>=大于等于 类似shell里的-geprint(2>=1) 返回True
<=小于等于 类似shell里的-leprint(2<=1) 返回False
print(type(2<=1)) 		# 结果为bool类型,所以返回值要么为True,要么为False.

4>逻辑运算符(常用)

逻辑运算符逻辑表达式描述
andx and yx与y都为True,则返回True;x与y任一个或两个都为False,则返回False
orx or yx与y任一个条件为True,则返回True
notnot xx为True,返回False; x为False,返回True

5>成员运算符

在后面讲解和使用序列(str,list,tuple) 时,还会用到以下的运算符。

成员运算符描述
inx 在 y 序列中 , 如果 x 在 y 序列中返回 True; 反之,返回False
not inx 不在 y 序列中 , 如果 x 不在 y 序列中返回 True; 反之,返回False
在SQL语句里也有in和not in运算符;如(没有学习mysql的话,后面会学习了就知道了)
mysql > select * from xxx where name in ('tom','john');

6>身份运算符

身份运算符描述实例
isis 是判断两个标识符是不是引用自一个对象x is y, 类似 id(x) == id(y) , 如果是同一个对象则返回 True,否则返回 False
is notis not 是判断两个标识符是不是引用自不同对象x is not y ,类似 id(a) != id(b)。如果不是同一个对象则返回结果 True,否则返回 False。

is 与 == 区别

is 用于判断两个变量引用对象是否为同一个(同一个内存空间), == 用于判断引用变量的值是否相等。

a = [1,2,3]			# 后面会学到,这是列表
b = a[:]			# 后面会学到,这是列表的切片
c = a
print(b is a)		# False
print(b == a)		# True

print(c is a)		# True
print(c == a)		# True

7>位运算符

大家还记得IP地址与子网掩码的二进制算法吗?

这里的python位运算符也是用于操作二进制的。

位运算符说明
&对应二进制位两个都为1,结果为1
|对应二进制位两个有一个1, 结果为1, 两个都为0才为0
^对应二进制位两个不一样才为1,否则为0
>>去除二进制位最右边的位,正数上面补0, 负数上面补1
<<去除二进制位最左边的位,右边补0
~二进制位,原为1的变成0, 原为0变成1

8>运算符的优先级

常用的运算符中: 算术 > 比较 > 逻辑 > 赋值

示例: 请问下面的结果是什么?

result = 3-4 >= 0 and 4 * (6 - 2) > 15
print(result)

result = -1 >= 0 and 16 > 15     # 算术运算后
result = False and True			 # 比较运算后
result = False  				 # 逻辑运算后

6、判断语句(重点)

1>shell里的判断语句格式

shell单分支判断语句:

if 条件;then
	执行动作一
fi

shell双分支判断语句:

if 条件;then
	执行动作一
else
	执行动作二
fi

shell多分支判断语句:

if 条件一;then
	执行动作一
elif 条件二;then
	执行动作二
elif 条件三;then
	执行动作三
else
	执行动作四
fi

shell里的case语句

case "变量" in 
	值1 )
		  执行动作一
		  ;;
	值2 )
		 执行动作二
		  ;;
	值3 )
		 执行动作三
		  ;;
	* )
		 执行动作四
esac

2>python里的判断语句格式

1<单分支判断语句

if 条件:					# 条件结束要加:号(不是;号)
	执行动作一			  # 这里一定要缩进(tab键或四个空格),否则报错
    					 # 没有fi结束符了,就是看缩进

2<双分支判断语句

if 条件:
	执行动作一			
else:					# else后面也要加:
	执行动作二

3<多分支判断语句

if 条件一:
	执行动作一
elif 条件二:			  # elif 条件后面都要记得加:
	执行动作二
elif 条件三:
	执行动作三
else:
	执行动作四

3>if嵌套

if嵌套也就是if里还有if,你可以无限嵌套下去,但层次不宜过多

1<格式:

if 条件一:
    if 条件二:
		执行动作一		# 条件一,二都为True,则执行动作一
    else:
        执行动作二		# 条件一True,条件二False,则执行动作二
    执行动作三			# 条件一True,条件二无所谓,则执行动作三
else:
    if 条件三:
        执行动作四		# 条件一False,条件三True,则执行动作四
    else:
        执行动作五		# 条件一False,条件三False,则执行动作五
	执行动作六			# 条件一False,条件二,三无所谓,则执行动作六
执行动作七				# 与if里的条件无关,执行动作七

2<示例:

name = input("what is your name: ")
age = int(input("how old are you: "))
sex = input("what is your sex: ")

if sex == "male":
    if age >= 18:
        print(name, "sir")
    else:
        print(name, "boy")
else:
    if age >= 18:
        print(name, "lady")
    else:
        print(name, "girl")

4>实例

示例1:

基本格式示例

# 单分支判断
if True:
    print("真")				# 前面一定要缩进(tab键或4个空格)

# 双分支判断
if True:
    print("真")				# 前面一定要缩进(tab键或4个空格)
else:
    print("假")				# 前面一定要缩进(tab键或4个空格)

# 多分支判断
num = 34
gnum = int(input("你猜:"))
if gnum > num:
    print("大了")				# 前面一定要缩进(tab键或4个空格)
elif gnum < num:
    print("小了")				# 前面一定要缩进(tab键或4个空格)
else:
    print("对了")				# 前面一定要缩进(tab键或4个空格)
示例2:

看看下面语句有什么错误

if 1 > 0:
    print("yes")
else:
    print("no")
print("haha")
    print("hehe")
示例3:

通过年龄是否成年与性别来判断对一个人的称呼

name = input("what is your name: ")
age = int(input("how old are you: "))
sex = input("what is your sex: ")

if age >= 18 and sex == "male":
    print(name, "sir")
elif age >= 18 and sex == "female":
    print(name, "lady")
elif age < 18 and sex == "male":
    print(name, "boy")
elif age < 18 and sex == "female":
    print(name, "girl")
示例4:

input输入一个年份,判断是否为闰年(能被4整除但不能被100整除的是闰年,或者能被400整除的也是闰年)

year = int(input("输入一个年份:"))

if year % 4 == 0 and year % 100 != 0:
    print("{}是闰年".format(year))
elif year % 400 == 0:
    print("{}是闰年".format(year))
else:
    print("{}是平年".format(year))

7、循环语句(重点)

  • 一般情况下,需要多次重复执行的代码,都可以用循环的方式来完成

1 while循环

  • 只要满足while指定的条件,就循环。

1 while 循环的基本格式

while 条件:
      条件满足时候:执行动作一
	  条件满足时候:执行动作二
      ......

注意: 没有像shell里的do..done来界定循环体,所以要看缩进。

示例: 打印1-10

i = 1
while i <= 10:
    print(i, end=" ")
    i += 1

2 for循环

for循环遍历一个对象(比如数据序列,字符串,列表,元组等),根据遍历的个数来确定循环次数。

for循环可以看作为定循环,while循环可以看作为不定循环

1 for循环的基本格式

for 变量  in  数据:
    重复执行的代码

示例:

for i in 1, 2, 3, 4, 5:
    print(i, end=" ")
print()

for i in range(1, 6):	# range()函数,这里是表示1,2,3,4,5(不包括6)
    print(i)
    
for i in range(6):		# range()函数,这里是表示0,1,2,3,4,5(不包括6,默认从0开始)
    print(i)    

for i in range(1, 100, 2):
    print(i, end=" ")
print()

for i in range(100, 1, -2):
    print(i, end=" ")

示例: 用for循环来实现 1-100之间能被5整除,同时为奇数的和

sum = 0
for i in range(1, 101):
    if i % 5 == 0 and i % 2 == 1:
        sum += i
print(sum)

3>循环控制语句

continue		跳出本次循环,直接执行下一次循环    
break			退出循环,执行循环外的代码 
exit()			退出python程序,可以指定返回值

示例: 猜数字小游戏

import random				# 导入随机数模块(后面会专门讲模块的使用,这里先拿来用用)

num = random.randint(1, 100)	# 取1-100的随机数(包括1和100)

while True:
    gnum = int(input("你猜:"))
    if gnum > num:
        print("猜大了")
    elif gnum < num:
        print("猜小了")
    else:
        print("猜对了")
        break
        
print("领奖")

示例: 用while循环实现1-100中的所有偶数之和

i = 2
sum = 0

# 方法一
while i <= 100:
    sum += i
    i += 2
print(sum)

# 方法二
while i <= 100:
    if i % 2 == 0:
        sum += i
    i += 1
print(sum)

# 方法三(了解)
while i <= 100:
    if i % 2 == 1:
        i += 1
        continue
    else:
        sum += i
        i += 1
print(sum)

4>循环嵌套

if,while,for都可以互相嵌套

示例: 打印九九乘法表

打印九九乘法表
for i in range(1, 10):
    for j in range(1, i+1):
        print("{}*{}={}".format(j, i, i*j), end=" ")
    print()

扩展语法:

for也可以结合else使用,如下面判断质数(只能被1和自己整除的数)的例子

num = int(input("输入一个大于2的整数"))

for i in range(2, num):
    if num % i == 0:
        print("不是质数")
        break
else:				# 这里的else是与for在同一列上,不与if在同一列。
   	 print("是质数")