Python基础初识

Posted dongye95

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python基础初识相关的知识,希望对你有一定的参考价值。

一、安装

暂时没空写,预留

二、python基础初识

2.1 注释

当行注释:# 被注释内容

多行注释:\'\'\'被注释内容\'\'\',或者"""被注释内容"""

2.2 变量

变量是什么?  变量:把程序运行的中间结果临时的存在内存里,以便后续的代码调用。

2.2.1 声明变量

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
name = "taibai"

上述代码声明了一个变量,变量名为: name,变量name的值为:"taibai"

变量的作用:昵称,其代指内存里某个地址中保存的内容

2.2.2 变量定义的规则

1、变量名只能是 字母、数字或下划线的任意组合

2、变量名的第一个字符不能是数字

3、以下关键字不能声明为变量名
[\'and\', \'as\', \'assert\', \'break\', \'class\', \'continue\', \'def\', \'del\', \'elif\', \'else\', \'except\', \'exec\', \'finally\', \'for\', \'from\', \'global\', \'if\', \'import\', \'in\', \'is\', \'lambda\', \'not\', \'or\', \'pass\', \'print\', \'raise\', \'return\', \'try\', \'while\', \'with\', \'yield\']

4、变量的定义要具有可描述性。所谓的 自释性(自我解释)

2.2.3 推荐定义方式

#驼峰体

AgeOfOldboy = 56

NumberOfStudents = 80

#下划线

age_of_oldboy = 56

number_of_students = 80

官方推荐第二种,确实也是第二种比较符合人类的查看方式。

2.2.4 变量的赋值

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name1 = "wupeiqi"
name2 = "alex"

#!/usr/bin/env python
# -*- coding: utf-8 -*-

name1 = "taibai"
name2 = name1

2.2.5 定义变量不好的方式举例

  1. 变量名为中文、拼音
  2. 变量名过长
  3. 变量名词不达意

2.3 常量

常量即指不变的量,如pai 3.141592653..., 或在程序运行过程中不会改变的量

在Python中没有一个专门的语法代表常量,程序员约定俗成用变量名全部大写代表常量

AGE_OF_OLDBOY = 56
在c语言中有专门的常量定义语法,const int count = 60;一旦定义为常量,更改即会报错

2.4 程序交互

#!/usr/bin/env python
# -*- coding: utf-8 -*-
  
# 将用户输入的内容赋值给 name 变量
name = input("请输入用户名:")
  
# 打印输入的内容
print(name)

执行脚本就会发现,程序会等待你输入姓名后再往下继续走。

可以让用户输入多个信息,如下

#!/usr/bin/env python
# -*- coding: utf-8 -*-
name = input("What is your name?")
age = input("How old are you?")
hometown = input("Where is your hometown?")

print("Hello ",name , "your are ", age , "years old, you came from",hometown)

2.5 基础数据类型(初始)

什么是数据类型?

  我们人类可以很容易的分清数字与字符的区别,但是计算机并不能,除非你明确的告诉它,1是数字,“汉”是文字,否则它是分不清1和‘汉’的区别的。因此,在每个编程语言里都会有一个叫数据类型的东西,其实就是对常用的各种数据类型进行了明确的划分,你想让计算机进行数值运算,你就传数字给它,你想让他处理文字,就传字符串类型给他。Python中常用的数据类型有多种,此篇暂只讲3种, 数字、字符串、布尔类型。

2.5.1 整数类型(int)

int(整型)

在32位机器上,整数的位数为32位,取值范围为-2**31~2**31-1,即-2147483648~2147483647

在64位系统上,整数的位数为64位,取值范围为-2**63~2**63-1,即-9223372036854775808~9223372036854775807

long(长整型)

跟C语言不同,Python的长整数没有指定位宽,即:Python没有限制长整数数值的大小,但实际上由于机器内存有限,我们使用的长整数数值不可能无限大。

注意,自从Python2.2起,如果整数发生溢出,Python会自动将整数数据转换为长整数,所以如今在长整数数据后面不加字母L也不会导致严重后果了。

注意:在Python3里不再有long类型了,全都是int
>>> a= 2**64
>>> type(a)  #type()是查看数据类型的方法
<type \'long\'>
>>> b = 2**60
>>> type(b)
<type \'int\'>

除了int和long之外, 其实还有float浮点型, 复数型,但今天先不讲啦

2.5.2 字符串类型(str)

在Python中,加了引号的字符都被认为是字符串!

>>> name = "Alex Li"              #双引号
>>> hometown = \'ShanDong\'   #单引号也可以
>>> age = "22"                       #只要加引号就是字符串
>>> age2 = 22                        #int

>>> msg = \'\'\'My name is taibai, I am 22 years old!\'\'\'  #3个引号也可以

单双引号没有任何区别,只有下面这种情况 你需要考虑单双的配合

msg = "My name is Alex , I\'m 22 years old!"

多引号什么作用呢?作用就是多行字符串必须用多引号

msg = \'\'\'
今天我想写首小诗,
歌颂我的同桌,
你看他那乌黑的短发,
好像一只炸毛鸡。
\'\'\'
print(msg)

字符串拼接

数字可以进行加减乘除等运算,字符串只能进行"相加"和"相乘"运算

>>> name
\'Alex Li\'
>>> age
\'22\'
>>> 
>>> name + age  #相加其实就是简单拼接
\'Alex Li22\'
>>> 
>>> name * 10 #相乘其实就是复制自己多少次,再拼接在一起
\'Alex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex LiAlex Li\'

注意,字符串的拼接只能是双方都是字符串,不能跟数字或其它类型拼接

>>> type(name),type(age2)
(<type \'str\'>, <type \'int\'>)
>>> 
>>> name
\'Alex Li\'
>>> age2
22
>>> name + age2
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: cannot concatenate \'str\' and \'int\' objects #错误提示数字 和 字符 不能拼接

2.5.3 布尔值(True,False)

布尔类型很简单,就两个值 ,一个True(真),一个False(假), 主要用记逻辑判断

>>> a=3
>>> b=5
>>> 
>>> a > b #不成立就是False,即假
False
>>> 
>>> a < b #成立就是True, 即真
True

2.6 格式化输出

现有一练习需求,问用户的姓名、年龄、工作、爱好 ,然后打印成以下格式

------------ info of Alex Li -----------
Name  : Alex Li
Age   : 22
job   : Teacher
Hobbie: girl
------------- end -----------------

只需要把要打印的格式先准备好, 由于里面的 一些信息是需要用户输入的,你没办法预设知道,因此可以先放置个占位符,再把字符串里的占位符与外部的变量做个映射关系就好啦。

name = input("Name:")
age = input("Age:")
job = input("Job:")
hobbie = input("Hobbie:")

info = \'\'\'
------------ info of %s ----------- #这里的每个%s就是一个占位符,本行的代表 后面拓号里的 name 
Name  : %s  #代表 name 
Age   : %s  #代表 age  
job   : %s  #代表 job 
Hobbie: %s  #代表 hobbie 
------------- end -----------------
\'\'\' %(name,name,age,job,hobbie)  # 这行的 % 号就是 把前面的字符串 与拓号 后面的 变量 关联起来 

print(info)

%s就是代表字符串占位符,除此之外,还有%d,是数字占位符, 如果把上面的age后面的换成%d,就代表你必须只能输入数字啦。

age     : %d

我们运行一下,但是发现出错了。。。

说 %d 需要一个数字,而不是str。

name = input("Name:")
age = input("Age:")
print(type(age))
执行输出是

Name:Alex
Age:22
<class \'str\'> #怎么会是str

input接收的所有输入默认都是字符串格式!

要想程序不出错,那怎么办呢?简单,你可以把str转成int

age = int(  input("Age:")  )
print(type(age))

输出%符号

msg = "我是%s,年龄%d,目前学习进度为80%"%(\'金鑫\',18)
print(msg)

这样会报错的,因为在格式化输出里,你出现%默认为就是占位符的%,但是我想在上面一条语句中最后的80%就是表示80%而不是占位符,怎么办?

msg = "我是%s,年龄%d,目前学习进度为80%%"%(\'金鑫\',18)
print(msg)

这样就可以了,第一个%是对第二个%的转译,告诉Python解释器这只是一个单纯的%,而不是占位符。

更多的格式参考:https://www.cnblogs.com/dongye95/p/10197916.html

2.7 基本运算符

2.7.1 运算符

  计算机可以进行的运算有很多种,可不只加减乘除这么简单,运算按种类可分为算数运算、比较运算、逻辑运算、赋值运算、成员运算、身份运算、位运算,今天我们暂只学习算数运算、比较运算、逻辑运算、赋值运算、成员运算

2.7.2 算数运算

以下假设变量:a=10,b=20

2.7.3 比较运算

以下假设变量:a=10,b=20

 

2.7.4 赋值运算

以下假设变量:a=10,b=20

 

2.7.5 逻辑运算

 

在没有()的情况下not 优先级高于 and,and优先级高于or,即优先级关系为 ( )>not>and>or,同一优先级从左往右计算

例题:判断下列逻辑语句的True,False。

3>4 or 4<3 and 1==1                                           #False
1 < 2 and 3 < 4 or 1>2                                        #True
2 > 1 and 3 < 4 or 4 > 5 and 2 < 1                            #True
1 > 2 and 3 < 4 or 4 > 5 and 2 > 1 or 9 < 8                   #False
1 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6         #False
not 2 > 1 and 3 < 4 or 4 > 5 and 2 > 1 and 9 > 8 or 7 < 6     #False

x or y,x为真,值就是x,x为假,值是y;

x and y,x为真,值是y,x为假,值是x。

 

例题:求出下列逻辑语句的值。

8 or 4                              #8
0 and 3                             #0
0 or 4 and 3 or 7 or 9 and 6        #3

2.7.6 成员运算

除了以上的一些运算符之外,Python还支持成员运算符,测试实例中包含了一系列的成员,包括字符串,列表或元组。

 

判断子元素是否在原字符串(字典,列表,集合)中:

例如:

#print(\'喜欢\' in \'dkfljadklf喜欢hfjdkas\')
#print(\'a\' in \'bcvd\')
#print(\'y\' not in \'ofkjdslaf\')

2.7.7 Python运算符优先级

以下表格列出了从最高到最低优先级的所有运算符:

运算符描述
** 指数 (最高优先级)
~ + - 按位翻转, 一元加号和减号 (最后两个的方法名为 +@ 和 -@)
* / % // 乘,除,取模和取整除
+ - 加法减法
>> << 右移,左移运算符
& 位 \'AND\'
^ | 位运算符
<= < > >= 比较运算符
<> == != 等于运算符
= %= /= //= -= += *= **= 赋值运算符
is is not 身份运算符
in not in 成员运算符
not and or 逻辑运算符

Lambda  #运算优先级最低
逻辑运算符: or
逻辑运算符: and
逻辑运算符:not
成员测试: in, not in
同一性测试: is, is not
比较: <,<=,>,>=,!=,==
按位或: |
按位异或: ^
按位与: &
移位: << ,>>
加法与减法: + ,-
乘法、除法与取余: *, / ,%
正负号: +x,-x

 

2.8 流程控制之--if

2.8.1 单分支

if 条件:
    满足条件后要执行的代码

2.8.3 双分支

"""
if 条件:
    满足条件执行代码
else:
    if条件不满足就走这段
"""
AgeOfOldboy = 48

if AgeOfOldboy > 50 :
    print("Too old, time to retire..")
else:
    print("还能折腾几年!")

2.8.4 缩进

你会发现,上面的if代码里,每个条件的下一行都缩进了4个空格,这是为什么呢?这就是Python的一大特色,强制缩进,目的是为了让程序知道,每段代码依赖哪个条件,如果不通过缩进来区分,程序怎么会知道,当你的条件成立后,去执行哪些代码呢?

在其它的语言里,大多通过{}来确定代码块,比如C,C++,Java,Javascript都是这样,看一个JavaScript代码的例子

var age = 56
if ( age < 50){
  console.log("还能折腾")
    console.log(\'可以执行多行代码\')
}else{
   console.log(\'太老了\')
}

在有{}来区分代码块的情况下,缩进的作用就只剩下让代码变的整洁了。

Python是门超级简洁的语言,发明者定是觉得用{}太丑了,所以索性直接不用它,那怎么能区分代码块呢?答案就是强制缩进。

Python的缩进有以下几个原则:

  • 顶级代码必须顶行写,即如果一行代码本身不依赖于任何条件,那它必须不能进行任何缩进
  • 同一级别的代码,缩进必须一致
  • 官方建议缩进用4个空格,当然你也可以用2个,如果你想被人笑话的话。

2.8.5 多分支

回到流程控制上来,if...else ...可以有多个分支条件

if 条件:
    满足条件执行代码
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个
elif 条件:
    上面的条件不满足就走这个    
else:
    上面所有的条件不满足就走这段

写个猜年龄的游戏吧

age_of_oldboy = 48

guess = int(input(">>:"))

if guess > age_of_oldboy :
    print("猜的太大了,往小里试试...")

elif guess < age_of_oldboy :
    print("猜的太小了,往大里试试...")

else:
    print("恭喜你,猜对了...")

上面的例子,根据你输入的值不同,会最多得到3种不同的结果

再来个匹配成绩的小程序吧,成绩有ABCDE5个等级,与分数的对应关系如下

A    90-100
B    80-89
C    60-79
D    40-59
E    0-39

要求用户输入0-100的数字后,你能正确打印他的对应成绩

score = int(input("输入分数:"))

if score > 100:
    print("我擦,最高分才100...")
elif score >= 90:
    print("A")
elif score >= 80:
    print("B")
elif score >= 60:
    print("C")
elif score >= 40:
    print("D")
else:
    print("太笨了...E")

这里有个问题,就是当我输入95的时候 ,它打印的结果是A,但是95 明明也大于第二个条件elif score >=80:呀, 为什么不打印B呢?这是因为代码是从上到下依次判断,只要满足一个,就不会再往下走啦。

2.9 流程控制之--while循环

2.9.1 基本循环

while 条件:
     
    # 循环体
 
    # 如果条件为真,那么循环体则执行
    # 如果条件为假,那么循环体不执行

2.9.2 循环中止语句 

如果在循环的过程中,因为某些原因,你不想继续循环了,怎么把它中止掉呢?这就用到break 或 continue 语句

  • break用于完全结束一个循环,跳出循环体执行循环后面的语句
  • continue和break有点类似,区别在于continue只是终止本次循环,接着还执行后面的循环,break则完全终止循环

1. break

 

count = 0
while count <= 100 : #只要count<=100就不断执行下面的代码
    print("loop ", count)
    if count == 5:
        break
    count +=1 #每执行一次,就把count+1,要不然就变成死循环啦,因为count一直是0

print("-----out of while loop ------")
----------------------------------------------------------------------------
loop  0
loop  1
loop  2
loop  3
loop  4
loop  5
-----out of while loop ------

2. continue

count = 0
while count <= 100 : 
    count += 1
    if count > 5 and count < 95: #只要count在6-94之间,就不走下面的print语句,直接进入下一次loop
        continue 
    print("loop ", count)

print("-----out of while loop ------")
----------------------------------------------------------
loop  1
loop  2
loop  3
loop  4
loop  5
loop  95
loop  96
loop  97
loop  98
loop  99
loop  100
loop  101
-----out of while loop ------

2.9.3 while ... else ..

与其它语言else 一般只与if 搭配不同,在Python 中还有个while ...else 语句

while 后面的else 作用是指,当while 循环正常执行完,中间没有被break 中止的话,就会执行else后面的语句

count = 0
while count <= 5 :
    count += 1
    print("Loop",count)

else:
    print("循环正常执行完啦")
print("-----out of while loop ------")

-----------------------------------------
Loop 1
Loop 2
Loop 3
Loop 4
Loop 5
Loop 6
循环正常执行完啦
-----out of while loop ------

如果执行过程中被break啦,就不会执行else的语句啦

count = 0
while count <= 5 :
    count += 1
    if count == 3:break
    print("Loop",count)

else:
    print("循环正常执行完啦")
print("-----out of while loop ------")
--------------------------------------------------------------------
Loop 1
Loop 2
-----out of while loop ------

2.9.4 for...else...

假设有如下代码:

for i in range(10):
    if i == 5:
        print \'found it! i = %s\' % i
else:
    print \'not found it ...\'

你期望的结果是,当找到5时打印出:

found it! i = 5

实际上打印出来的结果为:

found it! i = 5
not found it ...

显然这不是我们期望的结果。

根据官方文档说法:

>When the items are exhausted (which is immediately when the sequence is empty), the suite in the else clause, if present, is executed, and the loop terminates.

>A break statement executed in the first suite terminates the loop without executing the else clause’s suite. A continue statement executed in the first suite skips the rest of the suite and continues with the next item, or with the else clause if there was no next item.

https://docs.python.org/2/reference/compound_stmts.html#the-for-statement

大意是说当迭代的对象迭代完并为空时,位于else的子句将执行,而如果在for循环中含有break时则直接终止循环,并不会执行else子句。

所以正确的写法应该为:

for i in range(10):
    if i == 5:
        print \'found it! i = %s\' % i
        break
else:
    print \'not found it ...\'

2.10 命名规范

1、包名:全部小写字母,中间可以由点分隔开,不推荐使用下划线。作为命名空间,包名应该具有唯一性,推荐采用公司或者组织域名的倒置,如com.apple.quicktime.v2。

2、模块名:全部小写字母,如果是多个单词构成,可以用下划线隔开,如dummy_threading。

3、类名:总是使用首字母大写单词串。如MyClass。内部类可以使用额外的前导下划线。

类总是使用驼峰格式命名,即所有单词首字母大写其余字母小写。类名应该简明,精确,并足以从中理解类所完成的工作。常见的一个方法是使用表示其类型或者特性的后缀,例如:

SQLEngine、MimeTypes。

4、异常名:异常属于类,命名同类命名,但应该使用Error作为后缀。如FileNotFoundError

5、变量名:变量名:全部小写,由下划线连接各个单词。如color = WHITE,this_is_a_variable = 1

*注意*:

1.不论是类成员变量还是全局变量,均不使用 m 或 g 前缀。

2.私有类成员使用单一下划线前缀标识,如_height。多定义公开成员,少定义私有成员。

3.变量名不应带有类型信息,因为Python是动态类型语言。如 iValue、names_list、dict_obj 等都是不好的命名。

6、函数名和方法名:

函数名应该为小写,可以用下划线风格单词以增加可读性。如:myfunction,my_example_function。

*注意*:

混合大小写仅被允许用于这种风格已经占据优势的时候,以便保持向后兼容。

总使用“self”作为实例方法的第一个参数。总使用“cls”作为类方法的第一个参数。

如果一个函数的参数名称和保留的关键字冲突,通常使用一个后缀下划线好于使用缩写或奇怪的拼写。

7、常量名:全部大写字母,如果是多个单词构成,可以用下划线隔开,如YEAR和WEEK_OF_MOUTH。

以上就是我总结的Python的一些命名规范。了解Python命名规则可以帮助我们更好的处理代码,提高工作效率。

 

以上是关于Python基础初识的主要内容,如果未能解决你的问题,请参考以下文章

Python基础初识

pathon基础初识python

Python基础-函数初识

Python基础之(面向对象初识)

python基础:初识python

python基础—初识函数