for r in range(4):
for y in range(4):
for g in range(7):
if(r+y+g==8):
print('r',r,'y',y,'g',g)
缩进可以按Tab或者空格但是最好只用一种形式并习惯,并且在判断或者循环语句后面加:,下一行会自动为你缩进,十分方便。
然后来说一下目前学过的python的变量。第一个整型,它包含了c语言里的int和long int,需要注意的是,
>>> int(3.6)
3
>>> int(-3.6)
-3
int是截断处理,不是四舍五入。要想四舍五入
>>> a=3.5
>>> int(a+0.5)
4
>>>
下一个是浮点型,就是带有小数点,就叫浮点型。浮点型可以用科学计数法表示
>>> 2e12
2000000000000.0
float可以将字符串和int转换为float
>>> float(4)
4.0
>>> float('3')
3.0
>>> float('e')
Traceback (most recent call last):
File "<pyshell#114>", line 1, in <module>
float('e')
ValueError: could not convert string to float: 'e'
>>>
还有布尔型,这里用的是正逻辑。True代表1,False代表0,bool值还可以加减乘除。
>>> True+True
2
>>> True-True
0
>>> True**False
1
>>> True*False
0
>>>
还有字符串型,用单引号或者双引号括起来。下面是几个例子
>>> print("Let's go")
Let's go
>>> print('Let's go')
SyntaxError: invalid syntax
>>> print('Let\'s go')
Let's go
str可以把int,float转为字符串
>>> str(33.2)
'33.2'
灵活的引用让“”和‘’打出来更容易,不需要转义字符,还有一种方法是为了打出来\
>>> print('C:\now')
C:
ow
>>> print(r'C:\now')
C:\now
加个r就不会把\n识别为换行,它会加上一个\转义
>>> r'C:\now'
'C:\\now'
但是要想在末尾加上\就必须要这样做
>>> print(r'C:\now\')
SyntaxError: EOL while scanning string literal
>>> print(r'C:\now''\\')
C:\now\
>>>
字符串的连接可以用+也可以不用直接连上
>>> '2'+'3'
'23'
>>> '2''3'
'23'
还有*可以用来复制字符,但是会打在同一行
>>> '2'*8
'22222222'
这里要说一下print这个函数还有python一行写多个语句和一个语句写多行的问题
>>> print('2');print('3')
2
3
>>> print('2'),print('3')
2
3
(None, None)
>>> print('2')print('3')
SyntaxError: invalid syntax
>>>
多个语句写一行要用;隔开,逗号不可以随便用。还有就是两个print打印出来一般都是自动换行的。要想不换行要么用*,还可以用,end=“”
>>> print('2'end=" ");print('3'end=' ')
SyntaxError: invalid syntax
>>> print('2',end=" ");print('3',end=' ')
2 3
>>> print('2',end="");print('3',end='')
23
不加逗号会报错的,这里再说一下window里Alt加P是回到上一条语句,Alt加N是下一条,这不像matlab里按上下就好,比较麻烦。还有就是一句多行
>>> 3+5\
+6+7\
+6
27
>>>
用\隔开,还有一种三引号字符串多行的用法
>>> a="""i
love
you"""
>>> print(a)
i
love
you
>>>
>>> a="i\
love\
you"
>>> print(a)
iloveyou
>>> a=r"i\
love\
you"
>>> print(a)
i\
love\
you
>>> a='''i
love
you'''
>>> print(a)
i
love
you
>>>
>>> a="i\n\
love\n\
you"
>>> print(a)
i
love
you
>>>
这样也行但是麻烦。这里要说明,所有的标点必须是英文的,还有变量是区分大小写的。字符串有很多BIF
s为字符串
s.isalnum() 所有字符都是数字或者字母,为真返回 Ture,否则返回 False。
s.isalpha() 所有字符都是字母,为真返回 Ture,否则返回 False。
s.isdigit() 所有字符都是数字,为真返回 Ture,否则返回 False。
s.islower() 所有字符都是小写,为真返回 Ture,否则返回 False。
s.isupper() 所有字符都是大写,为真返回 Ture,否则返回 False。
s.istitle() 所有单词都是首字母大写,为真返回 Ture,否则返回 False。
s.isspace() 所有字符都是空白字符,为真返回 Ture,否则返回 False。
例如:
>>> a='123'
>>> a.isdigit()
True
>>>
下面介绍列表,列表比数组强大的多
>>> a=['1',2,'lcl',[1,'2','lcl'],'m']
>>> a
['1', 2, 'lcl', [1, '2', 'lcl'], 'm']
>>>
列表里可以有多种类型,还可以列表嵌套,需要注意元素索引从0开始,matlab从1开始。调用列表元素和C语言里调用多维数组一样
>>> a=['1',2,'lcl',[1,'2','lcl'],'m']
>>> a
['1', 2, 'lcl', [1, '2', 'lcl'], 'm']
>>> a[0]
'1'
>>> a[3][0]
1
>>>
列表有很多操作,添加元素有以下方法,第一种用+,但是必须都是列表才能加,并且a列表是不变的
>>> a+b
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', 1, 2]
>>> a+['3',3]
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', 3]
>>> a+[3]
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', 3]
>>> a+'3'
Traceback (most recent call last):
File "<pyshell#69>", line 1, in <module>
a+'3'
TypeError: can only concatenate list (not "str") to list
>>>
二用append,extend,insert改变了a,他们是bif也就是内置函数
>>> a.append("3")
>>> a
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3']
>>> a.append(["3",3])
>>> a
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3]]
>>> a.extend(["3",3])
>>> a
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3], '3', 3]
>>> a.insert
<built-in method insert of list object at 0x00000253D77E3848>
>>> a.insert(0,3)
>>> a
[3, '1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3], '3', 3]
>>> a.insert(0,[3,8])
>>> a
[[3, 8], 3, '1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3], '3', 3]
>>>
append和insert是添加元素,而extend是扩展列表,括号里参数是列表,insert有2个参数,第一个是列表索引。
删除列表
>>> a
[[3, 8], 3, '1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3], '3', 3]
>>> a.remove(0)
Traceback (most recent call last):
File "<pyshell#83>", line 1, in <module>
a.remove(0)
ValueError: list.remove(x): x not in list
>>> a.remove(3)
>>> a
[[3, 8], '1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3], '3', 3]
>>> del a[0]
>>> a
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3], '3', 3]
>>> a.pop()
3
>>> a
['1', 2, 'lcl', [1, '2', 'lcl'], 'm', '3', ['3', 3], '3']
>>> a.pop(2)
'lcl'
>>> a
['1', 2, [1, '2', 'lcl'], 'm', '3', ['3', 3], '3']
>>>
remove里只能是元素的值,并且只删除了索引最小的3,del可以分片删除,分片用法跟matlab有点像,pop可以指定一个元素出栈
>>> a
['1', 2, [1, '2', 'lcl'], 'm', '3', ['3', 3], '3']
>>> a.pop(2:)
SyntaxError: invalid syntax
>>> del a[0:5]
>>> a
[['3', 3], '3']
>>> del a[:]
>>> a
[]
>>>
注意[0:5]不包括5。
a[:]表示整个列表
列表元素个数可以用count,倒过来可以用reverse,排序可以用sort,删除还可以用clear复制可以用copy
>>> a=[1,1,2,3]
>>> a.count(1)
2
>>> a.reverse()
>>> a
[3, 2, 1, 1]
>>> a.sort()
>>> a
[1, 1, 2, 3]
>>> a.sort(reverse=True)
>>> a
[3, 2, 1, 1]
>>> a.copy()
[3, 2, 1, 1]
>>> a.clear()
>>> a
[]
clear,copy都是没有参数的,只能对整个列表操作
变量明明规则也是字母下划线数字,不能以数字开头,但是还可以用中文命名。
>>> 北京='beijing'
>>> 北京
'beijing'
算术运算与c语言基本相同,除了**代表幂,\\代表整除
>>> 3**2
9
>>> 3/2
1.5
>>> 3//2
1
>>> 3.0//2
1.0
>>> 3//2.01
1.0
逻辑运算符是not,and和 or
>>> not 1
False
>>> 3 and 2
2
>>> 2 and 3
3
>>> 3 and 0
0
>>> 0 and 3
0
>>> 3 or 2
3
>>> 2 or 3
2
>>> 0 or 3
3
>>> 3 or 0
3
>>> not -3
False
>>>
除了0,None,[],{},'',""是False,其他都是True,这里面也是有短路逻辑,3 or 2,3已经是True,直接返回3。3 and 2则是第一个为True就返回第二个数。
比较运算符基本与c语言一样,==是相等!=是不等。但是
>>> a=2
>>> b=3
>>> 0 and b=a
SyntaxError: can't assign to operator
>>> b=a and 0
>>> b
0
>>>
python里的逻辑运算里不能出现=只能为==,注意
b=a and 0
是先算a and 0然后让b等于这个结果不是
(b=a) and 0
>>> (b=a) and 0
SyntaxError: invalid syntax
>>>
c语言里b=a这一句只要a不是0,就为True,是可以出现的。
还有==应用范围很广,字符串也可以用
>>> 'bl'=='bh'
False
>>> 'bl'=='BL'
False
>>> 'bg'=='bg'
True
运算优先级问题,有小括号就不用说了。
not>and>or这个需要注意并且
>>> -3**2
-9
python3还有元操作符和
>>> a,b,c=1,3,2
>>> m=a if a>=b and a>=c else (b if b>=c else c )
>>> m
3
>>> m+=2
>>> m
5
在这里说一个比较迷的问题
>>> a=2
>>> b=a
>>> b
2
>>> a=4
>>> a
4
>>> b
2
>>> list1=[1,2,3]
>>> list2=list1
>>> list2
[1, 2, 3]
>>> list1.pop()
3
>>> list1
[1, 2]
>>> list2
[1, 2]
>>>
>>> list1=[1,2,3]
>>> list2=list1[:]
>>> list1.pop()
3
>>> list1
[1, 2]
>>> list2
[1, 2, 3]
list1=[1,2,3]
list2=list1
list1=[1,2]
>>> list2
[1, 2, 3]
为什么会出现这几种不同的情况呢?我是这样理解的,变量是一种标签或者说指针。a=2那么a指向了存2的这个地址空间,下一步b=a其实是b=a=2,那么b也指向了这个地址空间,下一步a=4,a指向了存4的这个存储单元,不会影响b指向2。
但是bif(build-in functions)的操作,比如a.clear()是对地址空间的内容进行修改。看下面
list1=[1,2,3]
list2=list1
list2.clear()
>>> list1
[]
下面来说一下条件和循环
if没什么说的,else if也可以简写为elif
对for与c语言有很大不同
首先要了解in,相当于matlab里的ismember(),返回一个bool值
>>> 2 in range(5)
True
>>> 'l' in 'lcl'
True
>>> 5 in [1,2,3,4,5,'g']
True
>>> 5 in [[1,5],2]
False
>>>
range产生一个数组,可以有三个参数,第一个参数是起始,默认是0,第二个参数是结束,不包含,第三个是步长。
>>> 5 in range(5)
False
range可以搭配表达式生成数组
>>> [i*i for i in range(10)]
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
for不一定要搭档range,
>>> for i in "lcl":
print(i)
l
c
l
>>>
字符串也是可以搭配的。
最后说一下input函数,输入的是字符串
a=input("请输入数字:")
b=int(a)
请输入数字:5
>>> type(a)
<class 'str'>
>>> type(b)
<class 'int'>
type()可以查看一个变量类型,另外isinstance也可以
>>> isinstance(5,int)
True
>>> isinstance('5',int)
False