Day05_学习总结—程序解读

1、求斐波那契数列中第n个数的值: 1, 1, 2, 3, 5, 8, 13, 21, 34....斐波拉契数列的规则,Fn=F(n-1)+F(n-2),n>2
n = int(input('请输入想知道的斐波拉契数列中的位数:'))  # 输入位数n
x = 1                                                      # 声明数列的第一个数为1
y = 1                                                      #声明数列的第二个数为1
i = 3                                                      #声明变量i为3
if n <= 2:                                                  #当输入的位数小于等于2时
    z = 1                                                   #直接判断出数列中该位的值为1
    print('在斐波拉却数列中第',n,'个数的值为:',z)
else:                                                      #当输入的位数n大于2时
    while i <= n:                                           # 建立while循环,循环条件为 i < n
        z = x + y                                            # 根据数列的规则,求Fn(Fn = F(n-1)+ F(n-2))
        x = y                                                # 求F(n-2),将F(n-1)的值赋给F(n-1)
        y = z                                                #求F(n-1),将求得的Fn的值赋给F(n-2)
        i += 1                                               #位数加1,求下一个位数的数列值
    print('在斐波拉却数列中第',n,'个数的值为:',z)

程序中循环的执行步骤为:
i=3; z=x+y=2; x=1; y=2; 第3个数列值为2;
i=4; z=x+y=3; x=2; y=3; 第4个数列值为3;
i=5; z=x+y=5; x=3; y=5; 第4个数列值为5;
i=6; z=x+y=8; x=5; y=8; 第4个数列值为5;
……
i=n; z=x+y=Fn; x=Fn-1; y=Fn; 第4个数列值为Fn;

2、判断101-200之间有多少个素数,并输出所有素数。判断素数的⽅法:⽤⼀个数分别除2到sqrt(这个数),如果能被整除,则表明此数不是素数,反之是素数
k = 0                                  # 声明变量,赋值0,用于统计素数个数
for i in range(101,201):               # 建立for循环,i的范围是(101-200)
    for j in range(2,i):                #建立for循环,j的范围是2—(i-1)
        if i % j == 0:                  #从i中依次取数,对j依次求余,如果求余结果为0,说明i不是素数
            break                        #结束当次循环
    else:                               # 如果i对j求余结果不为0
        print(i)                          # 说明i是素数,打印i
        k += 1                            # 统计素数个数
print(k)

程序中循环的执行过程为:
i=101;
j=2; i%j=101 % 2=101;if条件为False,执行下一个j;
j=3; i%j=101 % 3=101;if条件为False,执行下一个j;
……
j=100 i%j=101 % 100=101;if条件为False,内循环执行完毕,开始执行else后的程序;
101为素数,打印101,统计素数个数,开始执行下一个i。
i=102;
j=2; i%j=102 % 2=0;if条件为True,102不是素数,执行break,结束内循环,开始执行下一个i
……
i =200
j=2; i%j=200 % 2=0;if条件为True,200不是素数,执行break,结束内循环,循环执行完毕

3. 有⼀分数序列: 2/1,3/2,5/3,8/5,13/8,21/13...求出这个数列的第20个分数分⼦:上⼀个分数的分⼦加分⺟ 分⺟: 上⼀个分数的分⼦ fz = 2 fm = 1 fz+fm / fz
n = 20                       #根据要求 ,声明位数n,赋值20
x = 2                        #声明分母x,符初始值2
y = 1                        #声明分子y,赋初始值2,即默认为第一个数2/1已知
i = 2                        #声明循环变量i,赋初始值2
while i <= n:                #建立while循环,条件为i小于等于n
    z = x                   #声明一个中间变量,赋值x
    x = x + y                  #根据数列规则,求下一个分数的分母
    y = z                       #求下一个分数的分子
    i += 1                       #循环变量加1,计算下一位的数列值
print(x,'/',z)

循环的执行过程为:
i=2; z=2; x=3; y=2; 分数为:3/2
i=3; z=3; x=5; y=3; 分数为:5/3
……
i=20; ……

4、给⼀个正整数,要求:1、求它是几位数 2.逆序打印出各位数字。

解题思路: 看一个正整数是几位数,就看这个数整除几次10以后会变成0。
123//10 = 12 12//10=1 1//10 = 0。

n = 12389               #给出一个正整数n
count = 0                #统计个数,赋初始值0
while  True:            # 建立while循环,条件为True
    print(n%10)          #让n不断对10求余,从各位开始以此取出每一个数并打印
    n //= 10              #让n整除10
    count += 1              #没除1次统计1次个数
    if n == 0:              #当n整除10位0时,表示n已经变成一个一位整数
        break               #这时结束循环
print(count)

循环过程为:
n=12389; n%10=9,打印9; n//10=1238!=0; count=1 继续循环;
n=1238; n%10=8,打印8; n//10=123!=0; count=2 继续循环;
……
n=1; n%10=1,打印1; n//10==0; count=5 循环结束;

5、计算5的阶乘 5!的结果是。

5! = 54321

n = 5                               #声明变量n,赋初始值5
sum1 = 1                            #声明变量sum1,赋初始值1
for x in range(1, n+1):             #建立for循环,x的范围是1—5
    sum1 *= x                        #每执行一次循环,sum1就与x相乘
print(sum1)  

循环过程为:
x=1; sum1 = 1 * 1 =1;
x=2; sum1 = 1 * 2 =2;
……
x=5; sum1 = 1 * 2 * 3 * 4 * 5 =120;

6、求1+2!+3!+...+20!的和 。

思路: 1. 先分别取出1~20 2.求每次取出的数的阶乘。

n = 20                              #声明变量n,赋予初始值20
sum2 = 0                            # 声明变量sum2,用于保存最后的和
for num in range(1, n+1):           #建立外循环,num的范围是1-20
    sum1 = 1                        # 声明变量sum1,保存每个数的阶乘,必须写在外循环中,保证每次外循环开始执行时,sum1的值都是1
    for x in range(1, num+1):       # 建立内循环,x的范围是1-num
        sum1 *= x                   # 以此计算每个数的阶乘
    sum2 += sum1                    #阶乘相加
print(sum2)

循环的执行过程:
num=1;
x=1; sum1=1; sum2=1;
num=2;
x=1; sum=1; sum2=1
x=2; sum=12=2 sum2=1+2=3
num=3'
x=1; sum1=1; sum2=3
x=2; sum1=1
2=2 sunm2=3
x=3; sum1=123=6 sum2=3+6+9

7、循环输入大于0的数字进行累加,直到输入的数字为0,就结束循环,并最后输出累加的结果。
sum1 = 0                                    #定义sum1,用于保存和
while True:                                 #建立while循环,条件为True
    value = int(input('请输入一个数:'))      #获取输入值
    if value == 0:                            #建立if,判断条件为value==0
        break                                  #若满足条件,则退出循环
    sum1 += value                               #累加输入值
print(sum1)

循环过程为:

执行循环 --> 获取输入值 --> 判断if条件 --> False --> 累加输入值 --> 继续循环……-->获取输入值 --> 判断if条件 -->True --> 循环结束.

8、猜数字游戏:随机产生一个数,用户不断输入数字,直到输入的数字和产生的随机数一样,游戏就结果。游戏过程中,根据输入的数字做相应的提示(大了,小了)。
import random                                                 #进入随机数模块
n = random.randint(1,100)                                      #产生一个1-100的随机数
g = 0                                                           #用于统计猜字次数
while g < 10:                                                   #建立while循环,当g<10时执行循环
    m = int(input('请猜一个数字:'))                            #获取输入的数字
    if m == n:                                                  #判断输入的数字是够与随机数相等
        print('恭喜您,猜对了')
        break                                                   #相等则退出循环
    elif m > n:                                                 #如果输入值大于随机数
        print('对不起,猜大了','您还有',9-g,'次机会')          #打印提示并重新开始循环
    elif m < n:                                                 #如果输入值小于随机数
        print('对不起,猜小了','您还有',9-g,'次机会')          #打印提示并重新开始自循环
    g += 1                                                      #累计猜字次数
9.求s=a+aa+aaa+aaaa+aa...a的值,其中a是一个数字。例如2+22+222+2222+22222(此时共有5个数相加),几个数相加有键盘控制。

3 = 010 + 3
33 = 30 + 3 = 3
10 + 3
333 = 330+3 = 3310 + 3
3333 = 3330+3 = 333
10 + 3
规律: 当前项 = 前一项*10 + 3

n = 5                            # 决定总共有多少项
a = 2                             # 每一项上的每一位是多少
sum1 = 0                           # 保存总的和
num = 0                            # 保存求和的每一项
for x in range(6):                 # 建立循环,x的范围是1-5
    num = num * 10 + a              #根据数字规律,求出每一个单项的值
    print(num)
    sum1 += num                      #求和
print(sum1)

循环过程为:
x=1; num=2; sum1=2;
x=2; num=22; sum1=2+22;
……
x=5; num=22222; sum1=2+22+222+2222+22222

10、根据n的值的不同,输出相应的形状(n为奇数)
n = 7
   *       1   3s      1+3*2 = 7
  ***      3x  2s      3+2*2 = 7
 *****     5x  1s      5+1*2 = 7
*******    7x  0s      7+0*2 = 7

规律: 每一行星个数+空格数的2倍 == n

n = 11                              #给出n值
for star in range(1, n+1, 2):       #建立外循环,star范围1-11,步长2
    space = int((n - star) / 2)     # 空格的个数
    for _ in range(space):          #建立内循环1,_的范围1—space
        print(' ', end='')          # 打印空格,不换行
    for _ in range(star):           #建立内循环2,_的范围是1—star
        print('*', end = '')        #打印星星,不换行
    print()                           #换行

该题的难点不在于循环,而在于要找到星星与空格和n之间的数学关系,并通过相应的函数控制图形的输出.

11、有一百匹马,驮一百担货,大马驮3担,中马驮2担,两只小马驮1担,问有大,中,小马各几匹?
or small in range(2, 101, 2):                                                               #建立for循环,small范围2-100,步长2,本体中小马肯定是成对出现的
    for big in range(1, 34):                                                                 #建立for循环,big范围1-33,大马的数两不可能超过33
        for middle in range(1, 51):                                                          #建立for循环,middleda范围1-51,中码的数列不可能超过50
            if (small + big + middle == 100) and (small/2 + big*3 + middle * 2 == 100):      #根据条件进行判断,寻找所有满足条件的值
                print('大:',big,'中:', middle, '小:', small)

循环过程为:
small=2;
big=1;
middle=1; small + big + middle=3!=100; 进入下一个middle
middle=2; small + big + middle=4!=100; 进入下一个middle
……
small=100;
big=33;
middle=50; small + big + middle=183!=100; 循环结束

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 222,183评论 6 516
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 94,850评论 3 399
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 168,766评论 0 361
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 59,854评论 1 299
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,871评论 6 398
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 52,457评论 1 311
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,999评论 3 422
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,914评论 0 277
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 46,465评论 1 319
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,543评论 3 342
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,675评论 1 353
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 36,354评论 5 351
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 42,029评论 3 335
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,514评论 0 25
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,616评论 1 274
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 49,091评论 3 378
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,685评论 2 360

推荐阅读更多精彩内容

  • 在C语言中,五种基本数据类型存储空间长度的排列顺序是: A)char B)char=int<=float C)ch...
    夏天再来阅读 3,352评论 0 2
  • 【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔...
    开心的锣鼓阅读 3,325评论 0 9
  • 一.day5作业 读程序,总结程序的功能: 1. numbers=1 for i in range(0,20): ...
    魅影_0d2e阅读 1,058评论 0 0
  • "use strict";function _classCallCheck(e,t){if(!(e instanc...
    久些阅读 2,034评论 0 2
  • Java经典问题算法大全 /*【程序1】 题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子...
    赵宇_阿特奇阅读 1,875评论 0 2