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=12=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 = 310 + 3
333 = 330+3 = 3310 + 3
3333 = 3330+3 = 33310 + 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; 循环结束