要求严格的代码缩进是python语法的一大特色,就像C语言家族(C、C++、Java等等)中的花括号一样重要,在大多数场合还非常有必要。在很多代码规范里面也都有要求代码书写按照一定的规则进行换行和代码缩进,但是这些要求只是纯粹是方便人(程序员)来阅读、使用或修改的,对于编译器或者解释器而言,完全是视而不见的。但是对Python解释器而言,每行代码前的缩进都有语法和逻辑上的意义。Python的这个特性,也经常在Python使用者和非Python使用者中引起争论。
实际上,python这种强制的代码缩进,就像一把双刃剑,有好处也有坏处。显然,好处在于在严格要求的代码缩进之下,代码非常整齐规范,赏心悦目,提高了可读性,在一定程度上也提高了可维护性。但是Python严格的代码缩进,对于从其他语言转过来的人,由于现在计算机和相关专业第一门语言一般都是C/C++或Java,他们的语法风格基本是一致的,所以可能要一段时间来适应。python代码缩进十分严格,如果不按其规则书写代码,就可能会出现语法错误,例如
unexpected indent、SyntaxError
之类的,甚至有时也会出现逻辑错误。
在Java中使用{}包裹,只要在{}中代码的位置随便放都能编译通过:
if (true) {System.out.println(1);
System.out.println(1);
System.out.println(1);
}
而在Python中却不能,必须严格遵守缩进原则(属于他的下级代码块,必须进行缩进(4个空格
或 按下Tab键
)):
if True:
print(1)# 如果该代码属于他的下级就必须进行缩进否则可能会出现逻辑错误或报错
错误缩进示例:
number = 1
guess = int(input("请猜一个数字"))
if guess == number:
print("恭喜你猜对了")
print("游戏结束")
if guess != number:
print("猜错了")
print("游戏结束")
上面的代码中第二个print
未正确的进行缩进,导致如果猜错了就会打印两次猜错了
单行注释:
使用# Code 或 文字
多行注释:
使用'''Code 或 文字'''
或者 """Code 或 文字"""
"""
作者:Wei
日期:2018/9/15 17:20
Python版本:3.6.3
"""
# 上面是一段多行注释
# 根据身高、体重计算BMI值
def Body_Mass_Index(heights,weight):
"""体质指数(BMI)=体重(kg)÷身高^2(m)""" # 这也是一段多行注释Demo
heights = height / 100
BMI = weight / (heights ** 2)
# print(BMI) # 这是一个单行注释,这句代码将不会被执行
if BMI < 18.5:
print("体重过轻!!")
elif BMI >= 18.5 and BMI < 24.9:
print("正常")
elif BMI > 24.9:
print("太胖了")
if __name__ == '__main__':
height = float(input("请输入你的身高(CM):"))
weight = float(input("请输入你的体重(KG):"))
Body_Mass_Index(height,weight)
目前有以下关键字:
False | None | True | and | as | assert |
---|---|---|---|---|---|
async | await | break | class | continue | def |
del | elif | else | except | finally | for |
from | if | import | in | is | lambda |
nonlocal | not | or | pass | raise | return |
try | while | with | try | yield |
这些关键字已经被赋予特定的意义,这些关键字不能作为变量、函数、类、模块和其他对象名称来使用
错误示例:
True = 1
print(True)
运行结果:SyntaxError: can't assign to keyword
查看Python的所有关键字
>>> import keyword
>>> print(keyword.kwlist)
Python中的变量跟Java等语言不太一样,Python中不需要先声明变量名及其类型,直接赋值即可创建各种类型的变量。
示例:
变量名称 = values
实例:
number = 1024
name = 'zhangsan'
sex = "男"
你好 = '你好' #变量名可以中文但不推荐
使用type()
来查看对象类类型
"""
作者:Wei
日期:2018/9/15 17:20
Python版本:3.6.3
"""
number = 1024
name = 'zhangsan'
sex = "男"
你好 = '你好' #变量名可以中文但不推荐
print(type(number))
print(type(name))
print(type(sex))
print(type(你好))
执行结果:
<class 'int'>
<class 'str'>
<class 'str'>
<class 'str'>
Number(数字) 包括int,long,float,complex
String(字符串) 例如:hello,"hello",hello
List(列表) 例如:[1,2,3],[1,2,3,[1,2,3],4]
Dictionary(字典) 例如:{1:"nihao",2:"hello"}
Tuple(元组) 例如:(1,2,3,abc)
Bool(布尔) 包括True、False
由于Python中认为所有的东西都是对象,所以Python不用像其它一些高级语言那样主动声明一个变量的类型。
python 中的变量定义就是赋值语句比如
val1 = 25
val2 = "hehe"
示例代码:
number = '1024'
number2 = int(number)
print(type(number2))
执行结果:
<class 'int'>
用单引号或双引号包围起来的就是字符串,这种灵活性使你可以在字符串中包含引号
"This is a string in python"
'This is another string in python'
'This is also a string in "python"'
注意:加r和不加r的字符串
str = r'\n\t Hello'
str1 = '\n\t Hello'
print("这是str:" + str)
print("这是str1:" + str1)
执行结果:
这是str:\n\t Hello
这是str1:
Hello
可以看到字符串外面带r的字符串没有进行转义
各种转义符详解
访问
大小写
s.title() #返回的字符串单词首字母大写,其余小写
s.upper()
s.lower()
合并字符串
判断数字
删除空白
删除末尾空白
s.lstrip()
s.strip()
python3的整数不限制大小!
也没有什么signed和unsigned,是不是很人性化呢?
和惯例一样0x前缀是16进制,0前缀是8进制
注意在python3中1/2的值是0.5,而在python2中则是0
e的用法和在C/C++中一样,表示10的幂1e8就是108108
complex1 = 1 + 3j
True → False
判断中我们都可以这样写:
if True:
print(1)
if 1:
print(1)
执行结果:
1
1
由一系列有序的元素组成,其中的元素可以是任何类型。
在python中用方括号表示列表
name = ['a', 'b', 'c']
列表的操作
访问
长度
添加和删除
l.append(object)
l.extend(list)添加一个列表到列表末尾
l.insert(index, object)
del name[0]
使用 del语句删除
l.pop([index])默认为删除最后一个并返回这个对象,也可以通过index指定,
l.remove(value)按值删除第一个出现的对象
组织列表
l.count(value) #value出现的次数
l.index(value) #value的索引值(第一个)
列表解析
squares = [value**2 for value in range(1,11)]
创建了一个列表,元素为1,4,9…
切片
names = ['a', 'b', 'c', 'd']
sname = names[0:3] # 表示names的前三个元素
ssname = names[:3] # 省略表示从列表开始到第3个元素
元组和列表类似,也是由有序的元素组成,用圆括号表示元组
size = (3, 4)
size[0] = 1 # error:不能修改元组元素
size = (5, 6) # 可以重新定义元组
不允许对元组的元素进行修改,如需修改元组,只能对元组进行重定义。
不能删除元组元素,但是可以用del函数删除整个元组
注意:当元组只有一个元素时,要在元素后加上一个逗号
tuple1 =(3)#当元组只存在一个数据时必须加一个“,”,否则默认为int类型
print(tuple1[0]) #报错,此时tuple1被识别为int类型
tuple2 = (2,)
print(tuple2[0]) #正确姿势
字典 是一系列键 — 值对 。每个键 都与一个值相关联,你可以使用键来访问与之相关联的值。字典用花括号定义
alien = {'color' : 'green'}
操作
字典的访问
通过对应的键访问
tuples = {"name":"zhang","sex":"男"}
print(tuples["name"])
结果:zhang
tuples.get(key, default=None)返回指定键的值,如果没有则返回default
tuples.setdefault(key, default=None)设置指定键的值,如果不存在则添加并设为default
示例:
tuples = {"name":"zhang","sex":"男"}
print(tuples.get("name"))
执行结果:zhang
元素的添加
键做下标,直接添加
a['key'] = value
遍历
d.items()返回一个键-值对的列表
d.keys()返回键列表
d.values()返回一个包含所有值的列表
用for语句遍历
for key, value in a.items():
print(key)
print(value)
删除键值对
d.clear()删除全部
del语句
del a['key']
假设变量: a=10,b=20:
运算符 | 描述 | 实例 |
---|---|---|
+ | 加 - 两个对象相加 | a + b 输出结果 30 |
- | 减 - 得到负数或是一个数减去另一个数 | a - b 输出结果 -10 |
* | 乘 - 两个数相乘或是返回一个被重复若干次的字符串 | a * b 输出结果 200 |
/ | 除 - x除以y | b / a 输出结果 2 |
% | 取余 - 返回除法的余数 | b % a 输出结果 0 |
** | 幂 - 返回x的y次幂 | a**b 为10的20次方, 输出结果 100000000000000000000 |
// | 取整除(地板除) - 返回商的整数部分 | 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0 |
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c = a 等效于 c = c a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c = a 等效于 c = c a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
运算符 | 描述 | 示例 |
---|---|---|
== | 检查两个操作数的值是否相等,如果是则条件变为真。 | 如a=3,b=3则(a == b) 为 true. |
!= | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | 如a=1,b=3则(a != b) 为 true. |
<> | 检查两个操作数的值是否相等,如果值不相等,则条件变为真。 | 如a=1,b=3则(a <> b) 为 true。这个类似于 != 运算符 |
> | 检查左操作数的值是否大于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a > b) 为 true. |
< | 检查左操作数的值是否小于右操作数的值,如果是,则条件成立。 | 如a=7,b=3则(a < b) 为 false. |
>= | 检查左操作数的值是否大于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a >= b) 为 true. |
<= | 检查左操作数的值是否小于或等于右操作数的值,如果是,则条件成立。 | 如a=3,b=3则(a <= b) 为 true. |
假设:
a = 10 b = 10
运算符 | 逻辑表达式 | 描述 | 实例 |
---|---|---|---|
and | x and y | 布尔”与” - 如果 x 为 False,x and y 返回 False,否则它返回 y 的计算值。 | (a and b) 返回 10。 |
or | x or y | 布尔”或” - 如果 x 是 True,它返回 True,否则它返回 y 的计算值。 | (a or b) 返回 10。 |
not | not x | 布尔”非” - 如果 x 为 True,返回 False 。如果 x 为 False,它返回 True。 | not(a and b) 返回 False |
参考链接
input()
用来接收用户输入
"""
作者:Wei
日期:2018/9/15 17:20
Python版本:3.7
"""
number = input("请输入一个数字:")
print("你输入的数字是:" + number)
输入1执行结果:
请输入一个数字:1
你输入的数字是:1
类似Java如下代码
import java.util.Scanner;
public class one {
public static void main(String[] args){
Scanner sc = new Scanner(System.in);//跟这个功能一样
System.out.print("请输入一个数字:");
int input = sc.nextInt();
System.out.println("你输入的数字是:" + input);
sc.close();
}
}
输入1执行结果:
请输入一个数字:1
你输入的数字是:1