练习
基础
读程序,总结程序的功能:
numbers=1
for i in range(0,20):
numbers*=2
print(numbers)
求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之间所有数的和、平均值
sum = 0
average = 0
for x in range(1,101):
sum += x
average = sum/100
print(sum,average)
x=1
sum1 = 0
average1 = 0
while 0<x<101:
sum1 += x
average1 = sum/100
x += 1
print(sum1,average1)
输出结果:5050 50.5
- 计算1-100之间能3整除的数的和
count = 0
for x in range(1,101):
if x%3==0:
count += 1
print(count)
sum = 0
for x in range(1,101):
if x%3==0:
sum += x
print(sum)
x = 1
count1 = 0
while 0<x<101:
if x%3==0:
count1 += 1
x += 1
print(count1)
x = 1
sum1 = 0
while 0<x<101:
if x%3==0:
sum1 += x
x += 1
print(sum1)
输出结果:33
输出结果:1683
:审题不清,昨天把数看成了个数,所求结果不符题意
- 计算1-100之间不能被7整除的数的和
count = 0
for x in range(1,101):
if x%7:
count += 1
print(count)
x = 1
count1 = 0
while 0<x<101:
if x%7:
count1 += 1
x += 1
print(count1)
输出结果:86
稍微困难
- 有一对兔子,从出生后第3个月起,每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问第n个月的兔子总共有多少?
规律: 第一个月和第二个月的数量都是1 从第三个月开始 n =( n-1) + (n-2)
1,1,2,3,5,8,13,21…n?
1 1
2 1
3 2 = 1+1
4 3 = 1+2
5 5 = 2+3
6 8 = 3+5
n 第(n-1)+第(n-2)
n = n1 + n2
n==3 n1=1,n2=1 n=n1+n2=2
n==4 n1 = n2 n2 = n n = n1+n2
import random
n = random.randint(1,30)
def fib(n):
if n==1 or n==2:
return 1
return fib(n-1)+fib(n-2)
print(n,fib(n))
一些输出结果:
10 55
28 317811
14 377
n = 8
pre_1 = 1
pre_2 = 1
current = 0
for x in range(1, n+1):
if x == 1 or x == 2:
current = 1
continue
current = pre_1 + pre_2
pre_2 = pre_1
pre_1 = current
print('第%d个数是%d' % (n, current))
输出结果
第8个数是21
- 判断101-200之间有多少个素数,并输出所有素数。判断素数的方法:用一个数分别除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数
count2 = 0
for x in range(101,201):
k = 0
for y in range(2,x):
if x%y==0:
k += 1
if k == 0:
count2 +=1
print(x)
print(count2)
输出结果:
101
103
107
109
113
127
131
137
139
149
151
157
163
167
173
179
181
191
193
197
199
21
for number in range(101, 201):
count = 0
for x in range(2, number):
if number % x == 0:
count += 1
break
if count == 0:
print('%d是素数' % number)
- 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如:153是一个水仙花数,因为153 = 1^3 + 5^3 + 3^3
start = 100
end = 999
num = 100
while start <= num <= end:
bit2 = num//100
bit1 = (num - bit2 * 100)//10
bit0 = (num - bit2 * 100 - bit1 * 10)
#print(bit2,bit1,bit0)
if num == bit2**3 + bit1**3 + bit0**3 :
print('找到水仙花数了:',num)
num += 1
输出结果:
找到水仙花数了: 153
找到水仙花数了: 370
找到水仙花数了: 371
找到水仙花数了: 407
for x in range(100, 1000):
ge_wei = x % 10
shi_wei = x // 10 % 10
bai_wei = x // 100
if x == ge_wei ** 3 + shi_wei ** 3 + bai_wei ** 3:
print("%d是水仙数" % x)
- 有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数
1 2 1
2 3 2
3 5 3
4 8 5
分子:上一个分数的分子加分母 分母: 上一个分数的分子
fz = 2 fm = 1
fz+fm / fz
m = 2
n = 1
for x in range(1,21):
b = m + n
n = m
m = b
if x == 20:
print(m,n)
输出结果:
28657 17711
- 给一个正整数,要求:1、求它是几位数 2.逆序打印出各位数字
num = random.randint(1,3245)
str_num=str(num)
print("%d是%d位数"%(num,len(str_num)))
print(str_num[::-1])
输出结果:
2216是4位数
6122
笔记
反省:感觉分支循环这块学的不错,但应用起来总有些摸不着头脑的感觉。其它的都还好,尤其是兔子和正整数的求位和逆序输出。反正我想了很久也没想出来如何用循环解决。。。兔子的那个定义了函数,正整数的那个就直接转换成字符串通过调用内置函数对其进行操作。不拘泥于循环结构,解决起来还是挺简单的。看明天老师怎么解决吧!
if 语句
if 条件语句:
代码块
其它语句
执行过程:先判断条件语句是否为True,如果True就执行代码块,执行完代码块再执行其它语句。 如果是False,直接执行其它语句。
if 条件语句:
代码块1
else:
代码块2
其它语句
执行过程:先判断条件语句是否为True,如果为True就执行代码快1,执行完代码快1再执行其它语句。如果为False就执行代码快2,执行完代码快2再执行其它语句。
if-elif-elif-...-else
if 条件语句1:
代码块1
elif 条件语句2:
代码块2
elif 条件语句3:
代码块3
else:
代码块4
其它语句
执行过程:先判断条件语句1是否为True,如果是True就执行代码块1,执行完代码块1再执行其它语句。如果条件语句1是False,就判断条件语句2是否为Tru;如果是True就执行代码块2,执行完代码块2再执行其它语句;如果条件语句2是False,就判断条件语句3是否为True;如果是True就执行代码块3,执行完代码块3再执行其它语句;如果条件语句3是False,就执行代码块4,执行完代码块4再执行其它语句。
if 语句的嵌套
if 条件语句1:
if 条件语句2:
执行语句块1
else:
执行语句块2
else:
执行语句块3
需要重复执行某个过程,就可以使用循环
python中的循环有for循环和while
for循环
for 变量名 in 序列:
循环体
for:关键字
变量名:和声明变量时的变量名要求是一样的(功能:存储值)
in:关键字(在…里的意思)
序列:容器类型的数据(字符串、列表、字典、元组、集合)
循环体:会重复执行的代码块
执行过程:使用变量去序列中取数据,一个一个的取,取完为止,每取一个值,依次执行循环体。
range函数
xrange是python2.x中的函数,在Python3.x中使用range函数代替了。
range功能是产生指定范围的数字序列。一般用在for循环中,控制循环次数。或产生索引值。
range(n):产生 0~n-1的整数序列
range(m,n):产生 m ~n-1 的整数序列
range(m,n,step):从m开始,每次家step产生下一个数字,直到n前面一个为止
while 循环
while 条件语句:
循环体
while: 关键字。
条件语句:bool型结果。
循环体:重复执行的代码段。
执行过程:判断条件语句是否为True,如果为True就执行循环体。
执行完循环体后,再判断条件语句是否为True,如果为True就再执行循环体,以此类推,直至条件语句的值为False,循环结束,执行while循环后面的语句。
注意:如果条件语句一直为True,就会造成死循环。所以在循环体中要有让循环体可以结束的操作。
python中没有do-while循环。
for 和 while 的选择
fro循环的循环次数是确定的,while循环的循环次数可以不确定
1.循环次数不确定的时候,选择while循环
2.循环次数确定的时候,优先for循环。
通过循环遍历一个序列中的值,使用for循环
# input()
"""
接收从控制台输入数据的数据(输入的数据以回车结束)
程序中遇到input()函数,程序会阻塞,等待用户输入完成后,
才会接着执行后面的代码
"""
# 使用value去保存从控制台输入的数据
'''
value = input()
print('===')
'''
# 产生随机数
# python中有一个内置模块,可以产生随机数:random
"""
randint(m,n):产生一个随机数(整数)
"""
# 导入random模块
import random
# 产生1-10的随机数
number = random.randint(1,10)
print(number)
break和continue两个关键字都是作用于循环当中,用来结束循环的。
continue:结束当次循环,进入下次循环的判断。如果是for循环,就让变量取下一个值;如果是while循环就去判断while后边的条件语句是否为True.
break:结束整个循环,执行循环后面的语句。