循环练习题

练习题目

1.判断101-200之间有多少个素数,并输出所有素数。

# 首先我们要先确定如何判断一个数是素数,假如有一个数N,最简单直接的方法就是用N整除它前面所有大于2的整数
# 如果有一个数能整除就证明不是素数,反之就是个素数。
# 创建一个空列表用来保存输出的所有素数
list1 = []
# 统计素数的个数
conut1 = 0 
# 用一个变量i去循环取到101到200之间的整数
for i in range(101, 201):
# 用一个变量i去循环取到2到i之间的整数
    for x in range(2, i):
    # 判断i对2到i之间的数求余能否为0
        if i % x == 0:
        # 如果有一个数能整除就代表i不是素数就可以直接结束循环
            break
    # else这里代表着如果循环正常结束则代表2到i之间没有整数可以整除i,即i是素数执行下面操作。
    else:
        conut1 += 1
        list1.append(i)
print(f'101-200之间有{conut1}个素数')
# 101-200之间有21个素数
print(list1)
# [101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199]

2.求整数1~100的累加值,但要求跳过所有个位为3的数。

count1 = 0
for i in range(101):
    if i % 10 != 3:
        count1 += i
print(count1)
# 4570

3.有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数。

# 查看它的规律,分子是2,3,5,8,13,21...
# 分母是1,2,3,5,8,13...
# 分字是上一个分数的分子+分母;分母是上一个分数的分子
n = int(input('请输入n:'))
# 定义第一个数的分子分母
# 分母
count1 = 1
# 分子
count2 = 2
for i in range(n-1):
    # 求出下一个分数的分子是多少
    num = count1+count2
    # 把前一个分数的分母赋值给下一个分数的分子
    count1 = count2
    # 把求出的分子赋值给下一个分数的分母
    count2 = num
print(f'{count2}/{count1}')
# 17711/10946
'''
# 这里注意一下当n输入1是range函数里面的值是0所以不会执行循环,会直接打印count2/count1;2/1
第一次循环:num = 2+1 ; count1 = 2 ; count2 = 3 -> 求出来的分数就是3/2
第二次循环: num = 3+2 ; count1 = 3 ; count2 = 5 -> 求出来的分数就是5/3
第三次循环: num = 5+3 ; count1 = 5 ; count2 = 8 -> 求出来的分数就是8/5
依次类推: num = count1 + count2 ; count1 = count2 ; count2 =num
'''
# 得到如上规律以后我们还可以把for循环里面的代码变的更简洁
# # 注意:如果循环变量在循环中没有任何作用的时候循环变量一般直接用下划线命名
fen_zi = 2
fen_mu = 1
for _ in range(n-1):
    fen_zi, fen_mu = fen_zi+fen_mu, fen_zi
print(f'{fen_zi}/{fen_mu}')
# 17711/10946

4.写程序计算 n 的阶乘 n! 的结果。

n = int(input('请输入n:'))
count1 = 1
for i in range(1,n+1):
    count1 *= i
print(count1)

5. 求1+2!+3!+…+20!的和

n = int(input('请输入n:'))
count2 = 0
count1 = 1
for i in range(1,n+1):
    count1 *= i
    count2 += count1
print(count2)

6. 写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

#  例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333
# 方法1
# 注意:input返回的数据类型是字符串
a = input('输入数字:')
n = int(input('输入求和项数:'))
# 如果要计算和就定义变量为0,如果是打印出效果就定义成空串
# 定义一个计算和的值
sum1 = 0
# 用另一个变量存储
b = a
for i in range(1, n + 1):
    # 这里我用的方法是a=b * i,就相当于于是字符串的乘法运算,a为3时,n为1是 a='3',n为2时,a='33',n为3时,a='333',以此类推
    a = b * i
    # 最后把字符串转换为int类型累加
    sum1 += int(a)
print(sum1)
# 输入数字:3
# 输入求和项数:5
# 37035

# 方法2
a = int(input('输入数字:'))
n = int(input('输入求和项数:'))
sum1 = 0
for num1 in range(1, n + 1):
    num2 = 0
    for _ in range(num1):
        # n=1时,num2 = 0*10 + 3 -> num2 = 3
        # n=2时,num2 = 3*10 + 3 -> num2 = 33
        # n=3时,num2 = 0*10 + 3 -> num2 = 333
        num2 = num2 * 10 + a
    sum1 += num2
print(sum1)
# 输入数字:3
# 输入求和项数:5
# 37035

7. 控制台输出三角形

1.根据n的值的不同,输出相应的形状

# n = 5时             n = 4
# *****               ****
# ****                ***
# ***                 **
# **                  *
# *

# 当n为5时,三角形有5行;当n为4时,三角形有4行;规律:当n为n时,三角形有n行;
# n = 5 ,第一行星号5个,第二行4个,依次减1.
# 方法1
n = int(input('输入n:'))
# 控制行号
for row in range(n, 0, -1):
    # 控制星号
    for _ in range(row):
        # end=''指定在输出结束时不添加换行符
        print('*', end='')
    print()

# 输入n:4
# ****
# ***
# **
# *

# 方法2
n = int(input('输入n:'))
for i in range(n, 0, -1):
    print('*' * i)
# 输入n:5
# *****
# ****
# ***
# **
# *

2.根据n的值的不同,输出相应的形状(n为奇数)

# n = 5               n = 7
#   *                    *
#  ***                  ***
# *****                *****
#                     *******

# 方法1
n = int(input('输入一个奇数:'))
# 控制行数
for row in range(1, n + 1, 2):
    # 计算每一行*的数量和空格的数量
    star = row
    space = n - int((row + 1) / 2)
    # 把每一行的空格和*都打印出来
    for _ in range(space):
        print(' ', end='')
    for _ in range(star):
        print('*', end='')
    # 换行
    print()
# 输入一个奇数:5
#     *
#    ***
#   *****

# 方法2
n = 7
for x in range(1, n + 1, 2):
    star_num = x  # 每一行 * 的个数
    space_num = (n - x) // 2  # 每一行前面的空格数
    for _ in range(space_num):
        print(' ', end='')
    for _ in range(star_num):
        print('*', end='')
    print()
#    *
#   ***
#  *****
# *******

3.根据n的值的不同,输出相应的形状(内容是数字)

# n = 4
#    1
#   121
#  12321
# 1234321
#
# n = 5
#     1
#    121
#   12321
#  1234321
# 123454321

# 方法1
n = int(input('输入行数:'))
# 创建一个空列表,里面装数字
list1 = []
for row in range(1, n+1):
    list1.append(row)
    # 1行 [1]
    # 2行 [1,2,1]
    # 3行 [1,2,3,2,1] 以此类推
    list2 = list1+list1[-2::-1]
    star = 2 * row - 1
    space = n - row
    # 打印空格
    for _ in range(space):
        print(' ', end='')
    # 把列表中的数字打印查出来
    for _ in range(star):
        print(list2[_], end='')
    # 换行
    print()
#    1
#   121
#  12321
# 1234321

# 方法2
n = 5
for num in range(1, n+1):
    space_num = n - num
    for _ in range(space_num):
        print(' ', end='')
    for x in range(1, num+1):
        print(x, end='')
    for x in range(num-1, 0, -1):
        print(x, end='')
    print()
#     1
#    121
#   12321
#  1234321
# 123454321

8. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?

for shampoo in range(100//15):
    for toilet_soap in range(100 // 2):
        for toothbrush in range(100 // 5):
            if shampoo * 15 + toilet_soap * 2 + toothbrush * 5 == 100:
                print('洗发水:', shampoo, '香皂:', toilet_soap, '牙刷:', toothbrush)
# 洗发水: 0 香皂: 5 牙刷: 18
# 洗发水: 0 香皂: 10 牙刷: 16
# 洗发水: 0 香皂: 15 牙刷: 14
# ..............结果很多就不全部展现了

9.一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

# 方法1
num1 = 8848.19 * 1000
x = 0.08
count = 0
while x <= num1:
    x *= 2
    count += 1
print(f'对折{count}次')
# 对折27次

# 方法2
height = 0.08 / 1000
count = 0
while True:
    height *= 2
    count += 1
    if height >= 8848.13:
        print('对折次数:', count)
        break
# 对折次数: 27

10.古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

# 方法1
n_2 = 1
n_1 = 1
n = int(input('请输入月份:'))
if n == 1 or n == 2:
    print('第', n, '个月兔子总数为:1')
else:
    for _ in range(n-3):
        n_1, n_2 = n_1 + n_2, n_1
    print('第', n, '个月兔子总数为:', n_1+n_2)
# 请输入月份:6
# 第 6 个月兔子总数为: 8

# 方法2
n = int(input('请输入月份:'))
count1 = 1
count2 = 0
for i in range(n):
    num = count1+count2
    count1 = count2
    count2 = num
print(f'第{n}个月的兔子总数为{count2}')
# 请输入月份:6
# 第 6 个月兔子总数为: 8

11.将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

# 方法1
num = 90
x = 2
while True:
    if num % x == 0:
        num /= x
        print(x, end='')
        if num != 1:
            print('x', end='')
    else:
        x += 1
    if num == 1:
        break
print()
# 2x3x3x5

# 方法2
n = int(input('请输入一个任意正整数:'))
print('%d=' % n, end='')
while n > 1:
    for i in range(2, n):
        if n % i == 0:
            n = int(n / i)
            print('%d*' % i, end='')
            break
    else:
        print('质数')
        break
# 90=2*3*3*质数

12. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

# 方法1
num1 = list(input('输入四位的整数:'))
for i in range(len(num1)):
    sum1 = (int(num1[i])+5)%10
    num1[i]=sum1
num1[0],num1[1],num1[2],num1[3] = num1[-1],num1[-2],num1[1],num1[0]
print(num1)
# 输入四位的整数:2367
# [2, 1, 8, 7]

# 方法2
num = 2367
n1 = num // 1000
n2 = num // 100 % 10
n3 = num // 10 % 10
n4 = num % 10
n1 += 5
n2 += 5
n3 += 5
n4 += 5
n1 %= 10
n2 %= 10
n3 %= 10
n4 %= 10
new_num = n4*1000 + n3*100 + n2 * 10 + n1
print(num, '加密后的值:', new_num)
# 2367 加密后的值: 2187

14. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

# 方法1
num1 = 10000
for i in range(5):
    num1 = num1 + num1*0.003
print('本金是',num1)
# 本金是 10150.90270405243

# 方法2
year = 5
capital = 10000
current_year = 1
while True:
    capital *= 1+0.003
    current_year += 1
    if current_year > 5:
        break
print(capital)
# 10150.902704052423

15.输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)

num = 276721
sum1 = 0
while True:
    sum1 += num % 10
    num //= 10
    if num == 0:
        break
print('和为:', sum1)
# 和为: 25

num1 = input('输入一个整数:')
sum1 = 0
for i in num1:
    sum1 += int(i)
print(sum1)
# 25

16.求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)

# 方法1
num1 = 18
num2 = 15
# 保证num1保存两个数中较小的数,num2中保存两个数中较大的数
if num1 > num2:
    num1, num2 = num2, num1

# 最大公约数
max_common_divisor = num1
while True:
    if num1 % max_common_divisor == 0 and num2 % max_common_divisor == 0:
        break
    else:
        max_common_divisor -= 1
print('最大公约数:', max_common_divisor)

# 最小公倍数
min_common_multiple = num2
multiple = 1    # 倍数
while True:
    if min_common_multiple % num1 == 0:
        break
    multiple += 1
    min_common_multiple = num2 * multiple
print('最小公倍数:', min_common_multiple)

# 最大公约数: 3
# 最小公倍数: 90

# 方法2
n1 = int(input('输入两个数:'))
n2 = int(input('输入两个数:'))
sum1 = n1 * n2
while n1 % n2 != 0:
    n1, n2 = n2, n1 % n2
print(f'最大公约数:{n2}')
print(f'最小公倍数:{sum1 // n2}')
# 最大公约数:3
# 最小公倍数:90
  • 25
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值