第一个python程序
""" python 的第一个小程序"""
# 注释
temp = input("请输入一个数")
a=int(temp)
if a>=10:
print('你输入的数大于10')
else:
print('你输入的数小于10')
通过这一段简短的代码,现在可以分析出
- c语言的缩进为了美观,方便我们去阅读代码,但是python就非常不一样了,缩进决定代码块的,和{}一样的作用。缩进可以用一个空格 ,也可以tab,只要缩进数一样,python就认为他们在一个代码块里面。
- 无需
;
- 作为动态语言,声明变量无需指定类型
- python 在没有 嵌套"" '' 的时候 是不必区分它们的
- # 单行注释 or '''多行注释'''
- if 后面是要加 : else: 定义函数,类都需要:
- 补充:引入模块,import xxx ,if(a>=10) ()可以省略
变量
和JavaScript一样,定义的时候无需定义变量类型。
Python有五个标准的数据类型:
- Numbers(数字)
- String(字符串)
- List(列表)
- Tuple(元组)
- Dictionary(字典)
Number 类型
其实还可以细分成
- int
- float
- complex(python自带复数类型)
python 帮我们决定变量类型,var1=1.0 就是浮点型 var2=1就是整形
-
对于数字 +-*/这样的运算可是少不了。整除运算 //
-
int() float() 转换他们之间的类型,int()直接去掉小数部分
-
abs()取绝对值
-
round() 四舍五入
-
pow(a,2)幂 a^2
-
math.ceil(3.4)=4 取顶 ,需要 import math
-
math.flood(3.4)=3 取底
字符串
其实和JavaScript的使用方法差不多
+
可以连接字符串- str[1] 返回索引值所在的字符
- len(str) 返回字符串的长度
- 方法: string.split(';',1) 以 ;为节点 切1刀 ,第二个参数可以缺省,不在限制切的刀数
- 方法 : string.capitalize() 第一个单词首字母大写
- 方法: string.upper() 所有字母大写
- 方法:string.lower() 所有字母小写
- 方法 string.replace(''old,'new') 替换字符
- 方法 string.find('aaa') 返回与aaa匹配的第一个单词的索引
- 方法 string.isupper() 判断是否全部是大写
- str(1) 将非字符串类型变成字符串类型
boolean
- True 1
- False 0
列表
和数组差不多,但是可以装不同的类型的数据。
list1 = [1, 2, 3, 'a', [2, 1]]
print(list1[4])
方法和属性
- list.append(6) 加入数据6
- list.pop(0) 删除第一个元素,如果不指定那么就删除做好一个
- len(list) 返回列表长度
- list.insert(0,5) 在一个元素位置插入一个数据5
- list.index(2) 返回元素的索引
- list.sort()排序
- list.reverse() 颠倒元素顺序
- list.remove('a') 删除 数据 a
元组
就是不能修改的列表,()包围起来
tuple1 = (1, 2, 3)
print(tuple1)
print(tuple1[2])
列表可以和元组相互转换 list(tuple1),tuple(list1);
字典
存储着键值对
dict={"键":"键值"}
dict1 = {"name": "越行勤", "age": "99"}
print(dict1["age"])
属性和方法
- len(dict ) 输出键值对的个数
- dict.keys()输出所有的键
- dict.values() 输出所有的键值
- 添加键值对 dict["key"]=values
- dict.pop(key) 删除键值对
集合
set{1,2,'a',5}
集合不能由重复的元素,没有顺序概念
方法和属性:
- set.add(5)加入元素
- set.discard(5)删除元素
- set1.intersection(set2) 输出两个集合的交集
- set1.difference(set2) 输出set2相对与set1的差集
- set1.issubset(set2) 判断set1是不是set2的子集
python 变量的本质
var =3
var = 4
python在变量上和其他语言本质不同,说python的变量还不如说成贴在数据上的标签,感觉和指针很相似
- 上边的例子指出, 当执行 "var = 3" 时, python会在内存中分配一块空间, 把"3"赋值给这块空间
- 当执行 "var = 4" 时, python 会再分配一块内存并存入"4", 然后将变量名 "var" 关联到"4" 所在内存.
- 此时"3"所在的内存并没有变化,也就是说无法修改开辟地址的数据
- c语言这类语言,int a=4 ; 是申请一段sizeof(int)大小的空间,存储着4,我们为这段的首地址地址起一个别名 a.我们可以通过a去访问存着 int 4 这段数据的地址 ,我们再去a=3; 是给a所代表的地址,写入数据 3
注意:我这里说的是 值类型变量,对于引用类型后面说
补充
我感觉自己越总结越着急,感觉说不到点上,
重新组织了一句话:python 变量是先有 数据 放到实现准备好的内存空间里去,然后再把变量名想标签一样贴到数据上去,改变值呢,又是把数据放到一个新的内存空间离去,然后再把标签从原来的标签上撕下来,贴到新的内存空间样。
而c语言呢? 就是先开辟内存空间,给内存地址起个别名,然后把变量放进去。
其实理解成指针也没啥错误,:happy:
也许这就是 python 没有c语言这类语言效率高的原因吧
值类型 引用类型变量
在python 中变量由可以分成 值类型和引用类型
-
值类型(无法修改开辟空间对应的地址数据):字符串、元组、数子 布尔
-
引用类型:列表、字典, 集合 字符串
这个概念和我们c++的引用感觉只有5%类似,不是别名的存在,但是本质上差不多
值类型
其实前面说过了,值类型就是我们理解的一般的变量: 修改值类型的值,只是让它指向一个新的内存地址,无法修改开辟空间对应的地址数据
引用类型
使用的是索引存储结构

list1 = [1, 2, 3, 4]
list2 = list1
list2[1] = 3
print(list1)
输出一下,list1 发现是 [1,3,3,4]
list2 = list1,就好比把list1的地址给了 list2
改变list2,也会改变list1
但是如果是这样,
list1 = [1, 2, 3, 4]
list2 = list1
list2 = [1, 2]
print(list1)
list2 = [1, 2]就是把list2指向了一个新内存地址,该内存段存着 [1,2]
所以list1 还是为 [1,2,3,4]
定义一个函数
def get_sum(num1, num2=5):
return (num1+num2)
定义函数无需定义返回值类型,但是要使用关键字 def ,返回也是使用return,参数可以缺省
不要忘了的:
和缩进
类的使用
定义
# 定义类
class Person:
# 构造函数
def __init__(self, name, age, sex):
self.name = name
self.sex = age
self.sex = sex
def say_name(self):
print("我的名字叫: "+self.name)
构造函数 __init__(self,a,b)
名字是固定的,和其他编程语言一样,self代表类的实例,而非类
序号 | 方法, 描述 & 简单的调用 |
---|---|
1 | init ( self [,args...] ) 构造函数 简单的调用方法: obj = className(args) |
2 | del( self ) 析构方法, 删除一个对象 简单的调用方法 : del obj |
3 | repr( self ) 转化为供解释器读取的形式 简单的调用方法 : repr(obj) |
4 | str( self ) 用于将值转化为适于人阅读的形式 简单的调用方法 : str(obj) |
5 | cmp ( self, x ) 对象比较 简单的调用方法 : cmp(obj, x) |
内置类属性
__dict__
: 类的属性(包含一个字典,由类的数据属性组成)__doc__
:类的文档字符串__name__
: 类名__module__
: 类定义所在的模块(类的全名是'main.className',如果类位于一个导入模块mymod中,那么className.module 等于 mymod)__bases__
: 类的所有父类构成元素(包含了一个由所有父类组成的元组)
使用类
# 声明
person1 = Person('越行勤', 99, '男')
# 调用方法
person1.say_name()
条件语句和循环
条件语句
temp = input("请输入一个数")
a=int(temp)
if a>=10:#if ():
print('你输入的数大于10')#代码块
elif a>20: #elif ():
print('你输入的数大于20')#代码块
else:
print('你输入的数小于10') #else:
while循环
用法和 c语言的while差不多,但是格式不一样
a = 10
while a > 5:
a = a-1
print(a)
for 序列循环
序列:字符串,列表,元组
和JavaScript变量类一样
string = "lajslkaj;flia[isfp[sjanc"
for c in string:
print(c)
for 循环的妙用
for i in range(10):
print(i)
其实这个和我们的计数器是一个道理了,这个就是i 从 0 循环到 9,每次加1 也就是
for(int i;i<10;i++)
{
printf("%d\n",i);
}
当然 我们也可 指定 i的初始值
for i in range(5,10):
print(i)
相当于:
for(int i=5;i<10;i++)
{
printf("%d\n",i);
}
控制循环
break:直接退出循环
continue:跳出本次循环