回顾
1.运算符
数学运算符、比较运算符(<, >, ==, !=, >=, <=)、逻辑运算符(and、or、not)、赋值运算符
print(2**3)
print(2**(1/2))
print(0<10<100)
运算顺序
2.数字类型
int, float, bool, complex
2e4
1.23e3
tpye(数据),isinstance(数据,类型),类型名(数据)
input('请输入:') #字符串
3.分支结构:if
'''
if 条件语句:
语句块
if 条件语句:
语句块1
else:
语句块2
if 条件语句1:
语句块1
elif 条件语句2:
语句块2
elif 条件语句3:
语句块3
else:
语句块4
'''
1.for循环
a.语法
'''
for 变量名 in 序列:
循环体
'''
b.说明
'''
for - 关键字,固定写法
变量名 - 和声明变量的时候要求一样
in - 关键字,固定写法
序列 - python中的序列有:字符串、列表、元祖、字典、集合、range、生成器和迭代器等
: - 固定写法
循环体 - 和for保持一个缩进的一条或者多条语句
'''
c.执行过程
当程序执行到for循环的时候:让变量去序列当中取值,一个一个取,取完为止;每取一个值,执行一次循环体。
'''
a='a' print(a) print('=====')
a='b' print(b) print('=====')
a='c' print(c) print('=====')
. 'd' .
. 'e' .
. 'f' .
'''
for a in 'abcdef':
print(a,id(a))
print('=====')
2.range函数
range(N) - N是正整数,产生 0 ~ N-1 的所有整数
for num in range(100):
print(num)
range(M,N) - M,N都是整数,并且 N>M ,产生 M ~ N-1 的所有整数
for num in range(100,1000):
print(num)
range(M,N,S) - M,N,S都是整数,产生 M~N-1,每次隔S来产生下一个数
for num in range(0,101,2):
print(num)
注意: xrange是python2.x的语法,在python3.x中无效
练习:计算1+2+3+...+100的和
n = 0
for num in range(1,101):
n=n+num
print(n)
'''
n = 0
num = (1,2,3,4...)
num = 1 n = n + num, n = 0 + 1
num = 2 n = n + num, n = 1 + 2
num = 3 n = n + num, n = 1 + 2 + 3
num = 4 n = n + num, n = 1 + 2 + 3 + 4
.
.
.
print(n)
'''
练习: 计算 246*8...20的结果
product = 1
for num in range(2,21,2):
product = product * num
print(product)
练习:计算0~100中所有能够被3或者5整除的和
sum1 = 0
for num in range(0,101):
if (num % 3 == 0) or (num % 5 == 0):
sum1 = sum1 + num
print(sum1)
1.while循环
a.语法
'''
while 条件语句:
循环体
'''
b.说明:
'''
while - 关键字,固定写法
条件语句 - 可以是数据、变量、运算表达式等。不能是赋值运算
: - 固定写法
循环体 - 和while保持一个缩进的一条或多条语句(会被重复执行)
'''
c.执行过程:
'''
先判断条件语句是否为True,为True就执行一次循环体,
执行完循环体再在判断条件语句是否为True,为True又执行一次循环体,
执行完循环体再在判断条件语句是否为True,为True又执行一次循环体,
以此类推,直到判断条件语句的结果为False,整个循环体直接结束。
两个极端:1.当条件语句永远为True,会造成死循环的现象
2.一开始条件语句的结果就是False,循环一次都不会执行
'''
练习:用while循环控制程序打印10行“=====”
count = 0
while count < 10:
print('=====')
count += 1
'''
count = 0
判断count < 10, 0 < 10 True print('=====')
count = count + 1 = 1
判断count < 10, 1 < 10 True print('=====')
count = count + 1 = 2
判断count < 10, 2 < 10 True print('=====')
count = count + 1 = 3
判断count < 10, 3 < 10 True print('=====')
.
.
.
count = count + 1 = 10
判断count < 10, 10 !< 10 false 退出
'''
练习1:使用while循环打印0-10
练习2:使用while循环打印11-20
练习3:使用while循环打印2,4,6,8,10...40
1.
num = 0
while num < 11:
print(num)
num += 1
#2.
num = 11
while num < 21:
print(num)
num += 1
#3.
num = 2
while num < 41:
print(num)
num += 2
#练习4:求2+4+6+...+40
sum1 = 0
num = 2
while num <= 40:
#print('练习3:',num)
sum1 += num
num += 2
print(sum1)
练习:不断输入,直到输入的值是100为止
'''
请输入数字:10
请输入数字:1
请输入数字:100
结束!
'''
num = int(input('请输入数字:'))
while num != 100:
num = int(input('请输入数字:'))
print('结束!')
2.补充:随机数
导入random模块,random是python内置的一个专门用来产生和处理随机数的模块
rangint(M,N) - 产生M-N的随机数,要求M,N都是整数,并且N>M
import random
random_num = random.randint(0,100)
print('随机数:',random_num)
练习:猜数字游戏
随机数:70
产生一个0-100的随机,然后不断输入数字,直到输入的数字和产生的随机数一致为止。
如果输入的数字和随机数不相等,给出偏大或者偏小的提示
增加功能:统计玩家才对数字猜了多少次,然后根据次数范围给出相应的评价
print('==============游戏开始===============')
import random
random_num = random.randint(0,100)
time = 0
n = int(input('请输入数字0-100:'))
while n != random_num:
if n < random_num:
print('偏小')
elif n > random_num:
print('偏大')
n = int(input('请输入数字:'))
time += 1
print('恭喜正确!',random_num)
if time < 5:
print('神童!',time,'次')
elif 5 < time < 10:
print('智商达标!',time,'次')
elif time > 10:
print("你智商太低,请充值!",time,'次')
3.for循环和while循环的选择
a.遍历(一个一个的取)序列元素用for循环
b.循环次数确定的时候用for循环
c.死循环和循环次数不确定的时候用while循环
1.continue
1.continue是关键字,只能出现在循环体中
功能:执行循环体的时候,如果遇到continue,就直接结束当次循环,直接进入下次循环的判断
for x in range(10):
if x % 3 ==0:
continue
print(x)
print('=====')
2.break
用法:break是关键字,只能出现在循环体中
功能:执行循环体的时候,如果遇到break,整个循环直接结束
练习:从0+1+2+......+n,求到和超过1000000,求出这个数
sum = 0
n = 1
while sum < 1000000:
n += 1
sum += n
print(sum)
#==================================用break
sum = 0
n = 1
while True:
n += 1
sum += n
if sum > 1000000:
break
print(sum-n,sum,n)
3.else
a.语法:
"""
for 变量 in 序列:
循环体
else:
语句块
while 条件语句:
循环体
else:
语句块
"""
执行过程:如果循环自然死亡,else对应的语句块会执行;如果循环因为遇到break而结束,else对应的语句块不执行
for x in range(5):
print(x)
else:
print('循环结束')
#============================================
for x in range(5):
print(x)
break
else:
print('循环结束,没有遇到break')
循环嵌套
循环嵌套:在循环体中又有循环结构
执行过程:外循环执行一次,内循环执行完
for x in range(5):
for y in range(4):
print(x)
print(y)
#if (x == 1):
break
'''
x = (0,1,2,3,4)
y = (0,1,2,3)
x = 0 y = 0
x = 0 y = 1
x = 0 y = 2
x = 0 y = 3
x = 1 y = 0
x = 1 y = 1
x = 1 y = 2
x = 1 y = 3
.
.
.
'''
作业
基础
读程序,总结程序的功能:
numbers=1
for i in range(0,20):
numbers*=2
print(numbers)
'''
numbers = 1 numbers = 1 * 2 = 2
numbers = 2 numbers = 2 * 2 = 4
numbers = 4 numbers = 4 * 2 = 8
numbers = 8 numbers = 8 * 2 = 16
...
numbers = 2**19 * 2 = 2**20
算2的20次方
'''
summation = 0
num = 1
while num <= 100:
if (num % 3 == 0 or num % 7 == 0) and num % 21 != 0:
summation += 1
num += 1
print(summation)
'''
计算1到100之间能被3或7整除,但是不能被21整除的数的个数
'''
编程实现(for和while各写⼀遍):
- 求1到100之间所有数的和、平均值
#for
sum1 = 0
mean = 0
for n in range(1,101):
sum1 += n
else:
mean = sum1 / 100
print(sum1,mean)
#while
sum1 = 0
n = 1
mean = 0
while n < 101:
sum1 += n
n += 1
else:
mean += sum1 / 100
print(sum1,mean)
- 计算1-100之间能3整除的数的和
#for
sum1 = 0
for n in range(1,101):
if n % 3 == 0:
sum1 += n
print(sum1)
#while
sum1 = 0
n = 1
while n < 101:
if n % 3 == 0:
sum1 += n
n += 1
print(sum1)
- 计算1-100之间不能被7整除的数的和
#for
sum1 = 0
for n in range(1,101):
if n % 7 != 0:
sum1 += n
print(sum1)
#while
sum1 = 0
n = 1
while n < 101:
if n % 7 != 0:
sum1 += n
n += 1
print(sum1)
稍微困难
- 求斐波那契数列中第n个数的值:1,1,2,3,5,8,13,21,32.
n = int(input('请输入:'))
n1 = 0 #n1 + n2 = current
n2 = 1
current = 1
for x in range(2,n): #当前是第几个数
#根据前两个数的值,计算出当前值
current = n1 + n2
#挪一次,为了下一次循环的时候求下一个值
n1 = n2
n2 = current
print(current)
2.判断101-200之间有多少个素数,并输出所有素数。判断素数的⽅法:
⽤⼀个数分别除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数
count = 0
for i in range(101,201):
for j in range(2,i-1):
if i % j == 0:
print(i,'不是素数')
break
else:
count += 1
print(i,'素数')
prin('有',count,'个')
#========方法二
for num in range(101,201):
isprime = True #取一个数就假设这个数是素数
for x in range(2,num):
if num % x ==0:
isprime = False #当在2~num-1中找到了一个能够被num整除的数,就说明假设不成立
break
#循环结束再判断之前的假设是否成立
if isprime == True:
print(num,'素数')
- 打印出所有的⽔仙花数,所谓⽔仙花数是指⼀个三位数,
其各位数字⼀个⽔仙花数,因为153 = 1^3 + 5^3 + 3^3
for n in range(100,1000):
hundred = n // 100
ten = (n % 100) // 10
units = (n % 100) % 10
if n == hundred**3 + ten**3 + units**3:
print(n)
- 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20 分⼦:
上⼀个分数的分⼦加分⺟ 分⺟: 上⼀个分数的分⼦ fz = 2 fm
fen_zi = 1
fen_mu = 1
for x in range(1, 20+1):
#temp = fen_zi
#fen_zi = fen_mu + fen_zi
#fen_mu = temp
fen_zi, fen_mu = fen_mu + fen_zi, fen_zi
print(fen_zi, "/", fen_mu)
#===================补充=============================
# python中交换两个数
a = 10
b = 20
a, b = b, a
print(a,b)
- 给⼀个正整数要求:1、求它是⼏位数 2.逆序打印出各位数字
n = int(input('输入一个正整数:'))
i = 0
while True:
if n // 10 < 1:
print('个位数')
print(n)
break
i += 1
if n // (10**i) < 10:
print(i+1,'位数')
b = 1
while i >= 0:
a = n % 10**b
n -= a
b += 1
i -= 1
print(a // 10**(b-2))
break
#########################################
num = int(input('输入一个正整数:'))
num2 = num
length = 0
while True:
num //= 10
length += 1
if num == 0:
break
print(length)
for _ in range(length):
print(num2 % 10,end='')
num2 //= 10
print()
#====补充:print定制+++++++++
# print可以在需要输出的内容的最后,添加end和sep来定制一个print打印完成后默认输出的内容,
# 和一个print打印多个内容的时候多个内容之间的间隔
#end:不换行接着打印
print(1111, end='')
print(2222, end='+')
print(3333, end='%')
print()#如果想不接着打印,就用print()隔开
print(12, 23, 22, sep='+')
print('aaa','bbb',end='====',sep='----')
print()