循环和分支学习笔记及练习

练习

基础

读程序,总结程序的功能:

    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. 求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. 计算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. 计算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

稍微困难

  1. 有一对兔子,从出生后第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

  1. 判断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)
  1. 打印出所有的水仙花数,所谓水仙花数是指一个三位数,其各位数字立方和等于该数本身。例如: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)
  1. 有一分数序列: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. 给一个正整数,要求: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:结束整个循环,执行循环后面的语句。

    原文作者:GHope
    原文地址: https://www.jianshu.com/p/756bc6eb09ba
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞