1、条件表达式
关系运算符特点:可以连用
例: a , b = 10,50 对于 0<a<b
C/JAVA : 0<a --> 1 1<b -> 1 true
python: 0<a and a<b true
逻辑运算符: and 、or、not
表示year为闰年:
(year % 4 == 0 and year % 100 != 0) or (year % 400 == 0)
if-else语句
注意: 条件表达式的‘ :’不可少; 缩进不能省。
例题:
(1)判断回文数
str = input("请输入字符串:")
if(str == str[::-1]):
print(str+'为回文')
else:
print(str+'不是回文')
(2)三位数找最大的一位数字
n = int(input('输入:'))
a = str(n)[0]
b = str(n)[1]
c = str(n)[2]
if a>b and a > c:
max = a
elif b>a and b>c:
max = b
else:
max = c
print('max=',max)
# 也可以用内置函数max(a,b,c)返回最大数值
2、循环
for语句
for 变量 in 迭代器:
语句块
//for 和 in 都说关键字
//变量按顺序取得迭代器表示的值序列中的各个值
例题:
(1)统计英文大小写、数字
str = input('输入:')
count_upper = 0
count_lower = 0
count_digit = 0
for s in str:
if s.isupper():count_upper=count_upper+1
if s.islower():count_lower=count_lower+1
if s.isdigit():count_digit=count_digit+1
print('大写:',count_upper)
print('小写:',count_lower)
print('数字:',count_digit)
range()
range(n) : 得到序列为 0,1,2,3,···,n-1 便于求素数
range(m,n) : 得到 m,m+1,···,n-1 m>=n时序列为空
range(m,n,d) : 得到 m,m+d,m+2d···, 按步长递增,如果d为负则递减,直到接近但不包括n的等差值。
(2)前n项的奇数和 与 偶数和
sum_odd=0
sum_even=0
n=int(input('输入:'))
for i in range(1,n+1):
if i%2 == 1:
sum_odd=sum_odd+i
else:
sum_even=sum_even+i
print('奇数和:',sum_odd)
print('偶数和:',sum_even)
(3)求非负数字序列的最小值、最大值、平均值
count = 0
total = 0
print('请输入:(以1结束)')
num = int(input())
min = num
max = num
while(num != -1):
count += 1
total += num
if num<min: min = num
if num>max: max = num
num = int(input('输入:'))
if count > 0:
print('最小{},最大{},均值{:.2f}'.format(min,max,total/count))
else:
print('输入为空')
对于浮点数数学计算问题,计算机表示的精度是有限的,不能用‘等于’进行判断,而是取误差在可接受的很小范围来判断。
(4)牛顿迭代法
'''
假设需要求正实数 x 的算术平方根
如果y*y=x,计算结束,y就是结果
否则令z=(y+x/y)/2
令y=z,转回第一步
'''
import math
x=float(input('输入:'))
n=0
y=1.0
while abs(y*y-x)>1e-8:
y=(y+x/y)/2
n=n+1
print(n,y)
print('算术平方根:',y)
print('sqrt求算术平方根:',math.sqrt(x))
(5)求m和n最大公约数
m=int(input('输入m:'))
n=int(input('输入n:'))
for i in range(min(m,n),0,-1):#从后往前搜索,更快
if m % i==0 and n % i==0:
print('{}和{}的最大公约数为:{}'.format(m,n,i))
break
(6)求n以内的素数
'''
判断是否为素数:
n=int(input('n='))
for i in range(2,n):
if n%i == 0:
print(n,'不是素数')
break
else:
print(n,'是素数')
'''
count=0
n=int(input('输入n(n>2):'))
for k in range(2,n):
for i in range(2,k):
if k%i ==0:
break
else:
print('{:>5}'.format(k),end=' ')#右对齐
count+=1
print('\n共有{}个素数'.format(count))
random库基本应用参考教材 p55 和 p56、p57
3、应用实例
水仙花数
'''
3位数,满足:每一位上数字三次幂之和等于它本身
'''
for i in range(100,999+1):
a=i//100
b=i//10%10
c=i%10
if(a**3+b**3+c**3)==i:
print(i,end=' ')
>>> %Run '1-10水仙花.py'
153 370 371 407
找出1000以内的完全数
'''
满足它所有真因子(除了自身外的约数)的和等于它本身
'''
for n in range(1,999+1):
sum=0
for i in range(1,n):
if n%i==0:
sum+=i
if sum==n:
print(n,end=' ')
>>> %Run '1-11完全数.py'
6 28 496
无穷级数圆周率PI的前n项和
'''
无穷级数:4/1-4/3+4/5-4/7···的和是Π
'''
n = int (input('输入项数:'))
PI=0
for i in range(1,n+1):
PI=PI+(-1)**(i+1)*(1/(2*i-1))
print('PI=',PI*4)
>>> %Run '1-12无穷级数前n项和.py'
输入项数:1000
PI= 3.140592653839794
斐波那契数列
n=int(input('输入数列项数:'))
x1=1
x2=1
count=2
print('{:>8}{:>8}'.format(x1,x2),end=' ')
for i in range(3,n+1):
x3=x1+x2
print('{:>8}'.format(x3),end=' ')
count+=1
if count%4==0:print()#每四个换行
x1=x2
x2=x3
>>> %Run '1-13斐波那契数列.py'
输入数列项数:20
1 1 2 3
5 8 13 21
34 55 89 144
233 377 610 987
1597 2584 4181 6765
--------------------------------------------------------下一段列表与元组