04、Python 系列之--python 的基础知识

版权声明:本文为博主原创文章,未经博主允许不得转载。

PS:转载请注明出处
作者:TigerChain
地址:http://www.jianshu.com/p/f77ce55bf495
本文出自 TigerChain简书 Python 系列

教程简介

  • 1、阅读对象

本篇教程适合新手阅读,老手直接略过

正文

一、python 变量和数据类型

1、什么是变量

简单的说,我们可以把变量看做一个盒子,可以将零食、饮料、面包等放在里在,想像一下超市中的篮子,或是手推车,理论上你可以将任何你想存放的物品放在这个盒子里面,如图所示

bl.png

更通俗的说,我们也可以拿学校的宿舍房来举例,比如,每个房间都有一个房间号,是一一对应的,我们就可以把房间号看做是变量,变量值可以看成是房间里面的人,变量的类似看做是房间的类型「是标准间还是高级间」

ssbl.png

2、变量的声明

从前面我们知道,python 是动态语言,不需要指定变量的类型「变量的类型根据它的值确定」,我们在 python 中声明一个变量的格式是:

变量名 = 变量值

比如

a = 100 # 它就是一个整形变量
b = 'TigerChain' # b 就是一个字符串

3、变量的内存分配

当我们输入 x = 5 时,内存中是如何变化的

首先,当我们输入 x = 5 的时候,python 解释器做了两件事情

  • 1、在内存中创建一个存放 5
  • 2、并且在内存中创建一个名字叫做 x 的指向这个 5

直接写代码来直观的感受一下,新建一个 02、python变量.py 文件「真实项目开发中,不要使用中文来命名,这里为了直观的表达,采用中文来命名」

# -*- coding: UTF-8 -*-
x = 5
print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

然后 cd 02、python变量.py 所在的目录,运行

 python 02、python变量.py
x=5
x的地址是:140324664033288

我们可以看到输出了 5 并且 x 的地址是 140324664033288,我们来看看 x = 5 在内存的分配情况

blfb.png

上图代表了表达的意思是 x 指向了存储为 5 的那个地址,并且地址是:140324664033288,这里就和 c 的指针是一样的,类似于 java 中的栈内存存的地址。

  • 3、把 x 赋值给 y ,我们继续修改上面的代码,看有什么情况发生
# -*- coding: UTF-8 -*-
x = 5
y = x
print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

print ("y=%d"%(y))
print ("y的地址是:%d"%(id(y)))

我们把一个变量 x 赋值给变量 y ,然后运行查看结果

 python 02、python变量.py
x=5
x的地址是: 140324664033288
y=5
y的地址是: 140324664033288

结果一模一样,也就是说 y=x 即把 x 所指向的地址赋给了 y ,里所当然y 的值也就为5,如下图所示:

y=x.png
  • 4、变量指向不同的值,我们再修改上面的代码,先给 x 赋值,再改变 x 的值,看看结果
x = 5 

print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

x = 8

print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

运行输出

 python 02、python变量.py
x=5
x的地址是:140324664033288
x=8
x的地址是:140549470338992

内存分配如下图所示

changex.png
changex2.png

开始 x 指向了 140324664033288 这个内存地址,并且里面存放的是5,最后 x = 8 ,改变了 x 所指向的地址。

  • 5、x,y 赋相同的值,代码如下:
x = 5
y = 5

print ("x=%d"%(x))
print ("x的地址是:%d"%(id(x)))

print ("y=%d"%(y))
print ("y的地址是:%d"%(id(y)))

运行查看结果

 python 02、python变量.py
x=5
x的地址是:140374844686328
y=5
y的地址是:140374844686328

得出结论就是,值相同对应的内存地址一定是相同的「在 python 中」

二、输入输出

1、输出

  • 1、基本输出

在 python 中,输出我们使用 print,类似于 java 中的 System.out.print.

使用 print 直接跟着想输出的内容打印到控制台中

例如,在控制台输出 hello world, 当然 print 可以输出多个字符串,用逗号分隔即可

# python2 上可以支持,在python3上会报错
print "hello world"

# python2 和 3 上都支持
print("hello world")

# 输出多个字符串在 python2 中去掉 () 即可
print("hello world","Hi TigerChain")

x = 13
print x

y = 13.56
print y

运行查看结果

print_01.png
  • 2、输出一个美女
print("******************************************************************")
print("*                       .::::.                                   *")
print("*                    .::::::::.                                  *")
print("*                    :::::::::::                                 *")
print("*                 ..:::::::::::'                                 *")
print("*              '::::::::::::'                                    *")
print("*                .::::::::::                                     *")
print("*           '::::::::::::::..                                    *")
print("*                ..::::::::::::.                                 *")
print("*              ``::::::::::::::::                                *")
print("*             ::::``:::::::::'        .:::.                      *")
print("*              ::::'   ':::::'       .::::::::.                  *")
print("*            .::::'      ::::     .:::::::'::::.                 *")
print("*           .:::'       :::::  .:::::::::' ':::::.               *")
print("*          .::'        :::::.:::::::::'      ':::::.             *")
print("*         .::'         ::::::::::::::'         ``::::.           *")
print("*     ...:::           ::::::::::::'              ``::.          *")
print("*    ```` ':.          ':::::::::'                  ::::..       *")
print("*                       '.:::::'                    ':'````..    *")
print("******************************************************************")

运行查看:

print_mv.png
  • 3、格式化输出

python 中有两种格式化输出的方式

「1」 一种是格式化表达式

类似于 c 中的 printf 输出参数一样

%d 十进制整型
%s 字符串
%f 浮点型

%x 十六进制
%o 八进制
%r 万能占位符,什么都可以用

比如:

x = 0x123
print("0x123 的进制输出---十六进制:%x,十进制:%d,八进制:%o"%(x,x,x))

y = '你好'
c = 13.56
d = 13

print("%s,%f,%d"%(y,c,d))

运行输出

print_%+.png

「2」 一种是格式化方法

使用 format() 格式化方法

比如:

print('{0} {1} {2}').format('Hello','ThgerChain',"Good")

其中 {0} ... 就像是一个占位符,后面才是真正的值填充到占位符中

运行输出

print_format.png

2、输入

我们在 ATM 上取钱的时候,肯定要输入密码,那么这就是一个输入的过程,输出的肯定是钱

input_auto.png
  • 1、pthon 中输入语法「python2 和 python3 中有区别」

在 python2 中输入:raw_input()

在 python3 中输入:input()

输入返回的是一个字符串,我们可以使用 type() 来检测某个变量的类型

例如:一个简单的乘法

num = raw_input("请输入数字:")
print type(num) # 可以检 num 的类型
print(num+"*2=%d"%(int(num)*2))

运行输出:

 python 03、输入和输出.py
请输入数字:1
<type 'str'>
1*2=2
  • 2、一个简单的取款机 demo

「1」、效果图

get_money.gif

「2」、代码

# 定义密码输入次数
inputPasscount = 0
# 提示你是否插入银联卡 输入 yes 即可
chaka = raw_input('你是否插入银联卡:')
if(chaka=='yes'):
    password = int(raw_input('请输入卡密码:'))
    # 只给你三次输入密码的机会,错了卡就被吞了
    while inputPasscount < 3:
        if(password==123456):
            money = raw_input('输入你要取的钱数:')
            if money.isdigit():# 全部是数字则正确
                print("你成功的取了 %d "%(int(money))+"元")
                break
            else:
                print("请输入正确的金额")
        else:
            if inputPasscount == 2:
                print("密码输错三次,卡被锁定,请联系管理员")
                break
            password = int(raw_input('输入的密码错误,请重新输入:'))
            inputPasscount += 1

三、关系运算和逻辑运算符

1、关系运算符

关系运算符是用来描述某种关系的,它不能单独使用,要用在一个表达式中,格式如下

左边 运算符 右边
运算符号 说明 举例
== 用来检测两个值是不是相等,如果相等返回 True ,否则返回 False a = 1 b = 1 a=b为true
!= 如果两个值不相等,返回True,否则返回 False a=1,b=1 a!=b 为False
<> 如果两个值不相等,返回True,否则返回 False a=1,b=1 a!=b 为False ,类似于 !=
> 如果左边的数据大于右边则返回 True ,否则返回 False a=4,b=3 a>b 返回 True
< 如果左边的数据小于右边则返回 True ,否则返回 False a=3,b=4 则 a<b 返回 True
>= 如果左边的数据大于等于右边则返回 True ,否则返回 False a=4,b=3 a>=b 返回 True
<= 如果左边的数据小于等于右边则返回 True ,否则返回 False a=3,b=3 则 a<=b 返回 True

2、逻辑运算符

运算符号 说明 举例
and 一假必假,如果用 and 连接起来的有一个为假则整个为假 if(a==1 and y==2):print("xxxx")
or 一真必真,如果用 or 边境起来的有一个为真整个为真 if(a==1 or y==2):print("xxxx")
not 真假相对,本身是真使用 not 就变为假,反之 if(not(a==1)):print("xxxx")

四、条件语句

1、条件语句 if

「1.1」 if 是用来做条件判断有,格式如下

if 条件成立:
    处理想要处理的事情 

demo1:如果你 18 岁了,你就可以看血腥电影了

# -*- coding:UTF-8 -*-

a = int(raw_input('请输入你的年龄:'))
if a>=18:
    print("你可以看血腥的电影了")

运行看结果

 python 04、if语句.py
请输入你的年龄:18
你可以看血腥的电影了

「1.2」 if 的嵌套,格式如下

if 条件1成立:
    处理满足条件1,要做的事
    ...
    if 条件2成立:
        处理满足条件2,要做的事情
        ...

demo2: 如果你 18 岁并且不害怕恐怖事件,那么你可以看血腥电影

修改 demo1

# 输入年龄
a = raw_input('你是否年满18岁?回答 yes 或 no :')
if a=='yes': # 年龄满足
    print('年龄符合了!请继续输入问题')
    # 对恐怖事件的看法
    b = raw_input('面对恐怖电影你会非常害怕吗?回答 yes 或 no :')
    if b =='yes': #满足条件
        print("你可以看恐怖血腥的电影了!!!")

运行查看结果:

python_if.gif

2、if-else 语句

使用场景就是如果 if 的情况不满足我们的要求时我们还要干某些事情,我们如何办?使用 else

格式:

if 条件成立:
    干某些事情 
else:
   不满足条件要干某些事情 

demo1:如果查询你的考试得了 90 分以上,就要以出去旅游,否则就在家里学习

# 导入随机数模块
import random

print("查看考试成绩:1、查询 ")
inputStr = int(raw_input())
if(inputStr == 1):
    # 生成 80 - 100 的随机整数
    a = random.randint(80, 100)
    if a >=90:
        print("你的成绩是 %d 分,恭喜你可以出去旅游,地点随便选"%a)
    else:
        print("很遗憾,没有到 90 分,你还需要加油!争取下次旅游")
else:
    print("请输入正确的查询指令!!!")

运行查看结果:

if_else.gif

3、elif 语句

if-else 如们实现的是当满足条件的时候我们做事情1,否则做事情2,我们如果有以下场景,当...1 的时候做事情 1 ,当... 2 的时候做事情 2,当 ... 3 的时候估事情 3 ..... 这种情况,我们就可以使用 elif

PS:这里要注意一点,elif 必须和 if 一起使用,不能单独使用

格式如下:

  if 满足条件1:
    做事情1
  elif 满足条件2:
    做事情2
  elif 满足条件3:
    做事情3

demo1: 如果你有 10 万你就是十万元户,如果有 100 万就是百万富翁,有 1000万就是千万富翁,超过千万你真是土豪。

# -*- coding:UTF-8 -*-

money = int(raw_input("请输入你的财富,输入整数「代表万元」即可:"))
if money>10 and money<100:
    print("你是十万元户,努力哦")
elif money>=100 and money<1000:
    print("你小有成就,不错,都是百万富翁了")
elif money>=1000 and money<10000:
    print("千万富翁,约吗?")
elif money>=10000:
    print("靠,你真是土豪,带我装逼带我飞好吧")
else:
    print("得瑟啥呢,好好努力赚钱吧,还不好好的学习 python ,看看 TigerChain 的简书吧")

运行查看结果:

elif.gif

2、循环语句

我们前面学习了输出,现在有一个需求把 100 输出1万遍,你肯定就疯了,循环就很好的解决这个问题

1、while 循环

格式:

while 条件:
    条件满足,做某些事情
    ....

demo1:输出1-100的和

# 定义结果 变量
total = 0
# 定义循环条件变量
i = 1
while i<=100:
    # 把上一次的结果+1 然后赋值变成新的
    total=total+i
    # 循环+1
    i+=1
print ("1~100的和是:%d"%total)

运行查看结果:

 python 07、while循环.py
1~100的和是:5050

demo2: 计算 1-100 中奇数的和

total = 0
i = 1
while i<=100:
    total = total+i
    # 奇数的算法
    i+=2
print("1~100的所有奇数和是:%d"%total)

运行查看结果:

 python 07、while循环.py
1~100的所有奇数和是:2500

demo3:输入用户名和密码直到正确为止

# 输入用户名
username = raw_input('请输入用户名:')
# 输入用户密码
password = raw_input('请输入密码:')

# 如果用户名和密码不对,那么就提示错误,再次输入
while username!='admin' or password!='123456':
    print('用户名或密码错误,请重新输入')
    username = raw_input('请输入用户名:')
    password = raw_input('请输入密码:')
# 如果输入成功,则提示
print("欢迎 %s 登录"%username)

运行查看结果:

while-01.gif

demo4:用户不断的输入一个数字,直到输入 bye 则退出程序

while True:
    num = raw_input("请输入一个数字「直到输入 bye 就结束了」:")
    if num=='bye':
        print('结束了')
        break
    else:
        print num

运行查看结果

while-02.gif

当然了,while 还可以嵌套使用,格式

while 条件:
    满足条件,做某些啥事情
    ...
    while 条件:
    满足条件,做某些啥事情
    ... 

demo5:使用 while 嵌套打印九九乘法表

#初始一个变量x
x=1
#判断x小于等于9
while x<=9:
    #初始一个变量y
    y=1
    #确定y的循环次数,小于等于x
    while y<=x:
        #格式化打印输出
        print y,'*',x,'=',y*x,' ',
        #计数器
        y+=1
    #打印换行,前面用逗号隔开过,没有这行代码就连成一片了。
    print
    #外围的另一个计数器
    x+=1

运行查看结果

 python 07、while循环.py
1 * 1 = 1
1 * 2 = 2   2 * 2 = 4
1 * 3 = 3   2 * 3 = 6   3 * 3 = 9
1 * 4 = 4   2 * 4 = 8   3 * 4 = 12   4 * 4 = 16
1 * 5 = 5   2 * 5 = 10   3 * 5 = 15   4 * 5 = 20   5 * 5 = 25
1 * 6 = 6   2 * 6 = 12   3 * 6 = 18   4 * 6 = 24   5 * 6 = 30   6 * 6 = 36
1 * 7 = 7   2 * 7 = 14   3 * 7 = 21   4 * 7 = 28   5 * 7 = 35   6 * 7 = 42   7 * 7 = 49
1 * 8 = 8   2 * 8 = 16   3 * 8 = 24   4 * 8 = 32   5 * 8 = 40   6 * 8 = 48   7 * 8 = 56   8 * 8 = 64
1 * 9 = 9   2 * 9 = 18   3 * 9 = 27   4 * 9 = 36   5 * 9 = 45   6 * 9 = 54   7 * 9 = 63   8 * 9 = 72   9 * 9 = 81

2、for 循环

在 python 和其它语言类似,除了 while 循环,还可以使用 for 循环,格式如下

for 临时变量 in 列表或字条串
    循环体

demo1:循环打印字条串中每个值

name = 'TigerChain'
for x in name:
    print x

运行查看结果:

 python 08、for循环.py
T
i
g
e
r
C
h
a
i
n

demo2:定义一个姓名列表,然后打印出每个名字

names=["张三","李四","王五"]
for name in names:
    print name 

运行查看结果:

 python 08、for循环.py
张三
李四
王五

for 循环也是可以嵌套的,我们来使用 for 循环来打印九九乘法表

demo3:for 循环打印九九乘法表

在这里我们要使用一个 range 函数格式如下:

range(start, end, scan)

range:一个范围,默认从 0 开始 ,参数含义:start:计数从start开始。默认是从0开始。例如range(5)等价于range(0,10)取 0-9的值,range(0,10,2),最后一个数是间隔的意思,这句就是输出 0-9 每次间隔 2 的一个列表「数组」

输出结果是:[0, 2, 4, 6, 8]

for i in range(1,10):
    for j in range(1,i+1):
        result = i * j
        print j, 'x', i, '=', j*i ,'\t',
    print ''

运行查看结果:

 python 08、for循环.py
1 x 1 = 1
1 x 2 = 2   2 x 2 = 4
1 x 3 = 3   2 x 3 = 6   3 x 3 = 9
1 x 4 = 4   2 x 4 = 8   3 x 4 = 12  4 x 4 = 16
1 x 5 = 5   2 x 5 = 10  3 x 5 = 15  4 x 5 = 20  5 x 5 = 25
1 x 6 = 6   2 x 6 = 12  3 x 6 = 18  4 x 6 = 24  5 x 6 = 30  6 x 6 = 36
1 x 7 = 7   2 x 7 = 14  3 x 7 = 21  4 x 7 = 28  5 x 7 = 35  6 x 7 = 42  7 x 7 = 49
1 x 8 = 8   2 x 8 = 16  3 x 8 = 24  4 x 8 = 32  5 x 8 = 40  6 x 8 = 48  7 x 8 = 56  8 x 8 = 64
1 x 9 = 9   2 x 9 = 18  3 x 9 = 27  4 x 9 = 36  5 x 9 = 45  6 x 9 = 54  7 x 9 = 63  8 x 9 = 72  9 x 9 = 81

3、break 和 continue

break 和 continue 用在循环体中,其中 break 是直接跳出循环,continue 是跳出本次循环,继续下一次循环

demo1:输入字符串,遇到 o 就退出

a = raw_input("输入字符串「直到输入 o 就不会输出 o 之后的字符」:")
for x in a:
    if x=='o':
        break
    print x

运行查看结果:

输入字符串「直到输入 o 就不会输出 o 之后的字符」:12412qwoqwert
1
2
4
1
2
q
w

我们可以看到,o 以后的字符没有被输出

demo2:输入字符串,只过滤不输出 o 其它的输出

a = raw_input("输入字符串「输出过滤 o 之后的字符」:")
for x in a:
    if x=='o':
        continue
    print x

运行查看结果:

输入字符串「输出过滤 o 之后的字符」:123o321
1
2
3
3
2
1

我们就把 o 过滤掉了

到此为止,我们把 python 的基础知识就说完了。

本文的 Demo 地址:https://github.com/tigerchain/python-study/tree/master/basic/01-python基本知识

据说每个勤奋、聪明、能干的人都会点喜欢。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 159,569评论 4 363
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,499评论 1 294
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,271评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,087评论 0 209
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,474评论 3 287
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,670评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,911评论 2 313
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,636评论 0 202
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,397评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,607评论 2 246
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,093评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,418评论 2 254
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,074评论 3 237
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,092评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,865评论 0 196
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,726评论 2 276
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,627评论 2 270

推荐阅读更多精彩内容