Python自学笔记(含代码+注释)
循环:
if语句:格式很重要
if (3>2):
stdio.writeln(‘True’)
else:
stdio.writeln(‘False’)
while语句:+bool
while i<8:
stdio.writeln(‘i<8’)
数组:
suits = [‘clubs’,‘dhsudhud’,‘heart’,‘spa’]
x = [0.3, 0.4, 0.5]
y = [0.4, 0.5, 0.6]
total = 0.0
for i in range(len(x)):
total += x[i]*y[i]
x[len(x)-1]
x += [0.4]
输出:x = [0.3,0.4,0.5,0.4]
a = for i in range(n):
a += [0.0]
x[0] = 1 直接改变
数组前后换位置:
n = len(x)
for i in range(n//2):
temp = a[i]
a[i]= a[n-1-i]
a[n-1-i] = temp
求平均值:
total = 0
for i in range(len(x)):
total += x[i]
avg = total / len(x)
total = 0.0
for v in x:
total += v
avg = total / len(x)
max(x)
sum(x)
min(x)
x = [0.3, 0.4, 0.5]
y = x
x[1] = 0.9
输出:
x = [0.3, 0.9, 0.5]
y = [0.3,0.9,0.5]
y = []
for v in x:
y += [v]
单变量不具有可变性 ;数组具有可变性
x = 3
y = x
x = 5
输出:y = 3
或者:
y = x[:]
y = x[1:3] 复制x中的1到2(左闭右开)
a = []
for i in range(n):
a += [0.0]
a = stdarray.create1D(n,0.0)
a = stdarray.create2D(n,m,0.0)
二维数组
a = [[12,20,33],[25,69,55]]
a = []
for i in range(n):
row = [0,0]*n
a += [row]
import stdarray
a = stdarray.create2D(m,n,0.0)
a[i][j]
for i in range(m):
for j in range(n):
stdio.write(a[i][j])
stdio.write(’ ')
stdio.writeln()
for row in a :
for v in row:
stdio.write(v)
stdio.write(’ ')
stdio.writeln()
for i in range(m):
total = 0.0
for j in range(n):
total += a[i][j]
a[i][n] = total/m
for j in range(n):
total = 0.0
for i in range(m):
total += a[i][j]
a[m][j] = total/n
c = stdarray.create2D(n,n,0.0)
for i in range(n):
for j in range(n):
c[i][j] = a[i][j]+b[i][j]
for i in range(n):
for j in range(n):
for k in range(n):
c[i][j] = a[i][k]*b[k][i]
b[] = a[i][j] *x[]
b = stdarray.create2D(m,0.0)
for i in range(m):
for j in range(n):
b[i][j] = a[i][j] * x[j]
y 1m
a mn
c = stdarray.create2D(n,0.0)
for i in range(n):
for j in range(m):
c[j] += y[i] * a[i][j]
a = [[12,20,33,534],[25,69,55]]
for i in range((len(a))):
for j in range(len(a[i])):
stdio.write(a[i][j])
for row in a :
for v in row :
stdio.write(v)
a.index(value) #找a中值为value的位置
b = sorted(a) #把a正序排
b.reverse() #把b翻转
标准输入输出:
stdio.write(x) 输出:x
stdio.writeln() 换行
stdio.writef(‘Pi is approximately %w.pc’ ,str(math.pi))
在后面找数
w为占用长度 ,负号右补充,不足左填充
p为精度(如浮点数,字符串)f浮点数,d整数,s字符串,e科学计数法 如:%10.2s在后面找数 w为占用长度,p为精度(如浮点数,字符串)
stdio.isEmpty() 判断是否为空,为空停止 ctrl c结束
stdio.readInt() 读入一个数据并转换成整数
stdio.readFloat()
stdio.hasNextLine() 回车分隔
stdio.readline() 读一行
stdio.readAll() 读所有的数据
stdio.readAllInts()
stdio.readAllStrings()
stdio.readAllLines()
n = int(sys.argv[])
total = 0
for i in range(n):
total += stdio.readInt()
stdio.writeln('Sum is ’ + str(total))
total = 0
count = 0
while not stdio.isEmpty():
total += readFloat()
count += 1
avg = total/count
stdio.writeln('Sum is ’ + str(total))
stdio.writeln('Avg is ’ + str(avg))
Range = int(sys.argv[])
secret =random.randrange(1,Range+1)
stdio.write(‘guess it’)
stdio.writeln(Range)
guess = 0
while guess != secret:
stdio.write(‘What is your guess?’)
guess = stdio.readInt()
if (guess>secret):stdio.writeln(‘too high’)
elif (guess<secret):stdio.writeln(‘too Low’)
else:stdio.writeln(‘YOU WIN’)
绘图:
import stddraw
stddraw.setCanvasSize(w,h) #设置图形像素大小 默认512*512
stddraw.setXscale(x0,x1) #设置x轴范围
stddraw.setYscale(x0,x1)
stddraw.setPenRadius(0.1) #设置画笔粗细 默认0.005
stddraw.line(x0,y0,x1,y1) #画线
stddraw.point(x,y)
stddraw.show()
stddraw.circle(x,y,r) #画圆
stddraw.filledcircle(x,y,r) #画圆
stddraw.square(x,y,r) #正方形
stddraw.rectangle(x,y,w,h) #长方形
stddraw.polygon(x,y) #
def square(x):
return x*x
def hypot(a, b):
c = math.sqrt(square(a) + square(b))
return c
def hypot(a = 1, b = 1):
c = math.sqrt(square(a) + square(b))
return c
for i in range(1,len(sys.argv)): #sys.argv的数组长度
arg = int(sys.argv[i])
value = harmornic(a = arg, b =2)
stdio.writeln(value)
求平均值:
def mean(a):
total = 0.0
for v in a:
total += values
return total/len(a)
求向量点乘
def dot(a,b):
total = 0.0
for i in range(len(a)):
total += a[i] *b[i]
return total
交换位置
def exchange(a,i,j):
temp = a[i]
a[i] = a[j]
a[j] = temp
输出一维数组长度
def write1D(a):
stdio.writeln(len(a))
for v in a:
stdio.writeln(v)
def readFloat2D():
m = stdio.readInt() 维度
n = stdio.readInt() 列数
a = stdarray.create2D(m,n,0,0)
for i in range(m):
for j in range(n):
a[i][j] = stdio.readFloat()
return a
a = stdio.readAllbools()
0
bool(0) return False
bool(1) return True
bool() return False
bool(‘a’) return True
import sys
import stdio
help(stdio)
lo = int(sys.argv[1])
hi = int(sys.argv[2])
n = int(sys.argv[3])
a = stdio.readAllInts()
stdio.writeln(uniformInt(lo,hi))
stdio.writeln(bernoulli())
stdio.writeln(binomial(n))
stdio.writeln(discrete(a))
stdio.writeln(gaussian())
数组的读取: p175
迭代函数:
x = 3**100
bits = x.bit_length() #x的位数
print bits
len(s) #s字符串长度
s+t
s[i]
s[i:j]
s[s:i:j]
s<t
s in t #判断t中是否有x
s not in t
s.count(t) #t出现的次数
s.find(t,start) #找到第一个t返回位置,,若没有t返回-1
s.upper() #小写转大写
s.lower()
s.startswith(t) #判断x是否以t开头
s.endswith(t)
s.strip() #去除s开始前和结尾后的空格
s.replace(old,new)
s.split(delimiter) #分割字符串,默认空格,返回字符串数组
delimiter.join(s) #数组的拼接
def translate(dna):
dna = dna.upper
rna = dna.replace(‘T’,‘U’)
return rna
def isPalindrome(s):
n = len(s)
for i in range(n//2):
if s[i] !=s[n-1-i]:
return False
return True
s = sys.argv[1]
dot = s.find(’.’)
base = s[:dot]
ext = s[dot+1:]
query = sys.argv[]
while stdio.hasNextLine():
s = stdio.readLine()
if query in s:
stdio.writeln(s)
def isSorted(a):
for i in range(1,len(a)):
if a[i] <a[i-1]:
return False
return True