周末作业-循环练习题

  1. 判断101-200之间有多少个素数,并输出所有素数。
count = 0
x = 102
while x < 201:
    for y in range(2, x):
        if x % y == 0:
            break
    else:
        count += 1
        print(x, end=' ')
    x += 1
else:
    print()
    print('101-200之间有{}个素数'.format(count))
  1. 求整数1~100的累加值,但要求跳过所有个位为3的数。
value = 0
for x in range(1, 101):
    if x % 10 == 3:
        continue
    else:
        value += x
print('整数1~100的累加值为:', value)
  1. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数
num1 = 1
num2 = 2
for x in range(1, 20):  # 因为num1和num2相当于第一个分数的分母与分子,所以在循环里面求第20个分数,也就相当于求第19个分数
    num3 = num2+num1  # 分子
    num1 = num2
    num2 = num3
print('数列的第20个分数:', num3, '/', num1,sep='')
  1. 写程序计算 n 的阶乘 n! 的结果
num = int(input('请输入你想求的阶乘数:'))
result = 1
for x in range(1, num + 1):
    result *= x
print('您想求的阶乘数的结果为:', result)
  1. 求1+2!+3!+…+20!的和
result = 0
num = 1
for x in range(1, 21):
    num *= x
    result += num
print('1+2!+3!+...+20!的和为:', result)
  1. 写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

例如:a为3, n为5的时候: 3 + 33 + 333 + 3333 + 33333

num1 = input('请输入1~9之间的任何一个数字:')
num2 = int(input('请输入你想要求几项和的次数:'))
num3 = ''
result = 0
y = 1
while True:
    num3 += num1
    result += int(num3)
    y += 1
    if y > num2:
        break
print(result)
  1. 控制台输出三角形
# a.根据n的值的不同,输出相应的形状
"""
n = 5时             n = 4
*****               ****
****                ***
***                 **
**                  *
*
"""

b.根据n的值的不同,输出相应的形状(n为奇数)
n = 5               n = 7
  *                    *
 ***                  ***
*****                *****
                    *******

c. 根据n的值的不同,输出相应的形状
n = 4
   1
  121
 12321
1234321

n = 5
    1
   121
  12321
 1234321
123454321
# a.
count = int(input('输入你想打印形状的值:'))
shape = '*'
for x in range(1, count +1):
    for y in range(count+1, x, -1):
        print(shape, end='')
    print()
    x += 1
# b.
count = int(input('请输入你要打印得层数(奇数):'))
shape1 = '* '
shape2 = ' '
for x in range(1, count + 1, 2):
    print(shape2 * (count - x) + shape1*x)
# c.
n = int(input('输入n值:'))
for x in range(1, n+1):
    print(' '*(n-x),end='')
    for y in range(1,x+1):
        print(y, end='')
    for z in range(x-1, 0, -1):
        print(z, end='')
    print()
  1. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?
list1 = [15, 2, 5]    # 存储洗发水,香皂,牙刷的单价
num1 = 100 // 15
num2 = 100 // 2
num3 = 100 // 5
count = 0    # 计数
for x in range(1,num1+1):
    for y in range(1,num2 + 1):
        for z in range(1, num3 + 1):
            if list1[0]*x + list1[1]*y + list1[2]*z == 100:
                count += 1
                print('第{}种购买组合:'.format(count), '洗发水', x, '香皂', y, '牙刷', z)
print()
  1. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?
mountain = 8848.13 * 1000
paper_height = 0.08
count = 0  # 对折次数
while True:
    if paper_height < mountain:
        new_paper_height = paper_height * 2
        count += 1
        paper_height = new_paper_height
    else:
        break
print('一张纸大概对折{}次之后能达到珠穆朗玛峰的高度'.format(count))
  1. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?
"""
分析:
第一个月 - 1对兔子
第二个月 - 1 对兔子
第三个月 - 2 对兔子
第四个月 - 3对兔子
第五个月 - 5对兔子
第六个月 - 8对兔子
第七个月 - 13对兔子
第八个月 - 21对兔子
...
由此可知兔子增长的速度是斐波那契数列即从第三个月开始的兔子数等于前面两个月的加和
"""
num = int(input('你想知道从第三个月开始到第几个月之前的各月的兔子数:'))
num1 = 1  # 代表第一个月的一对兔子
num2 = 1  # 代表第二个月的一对兔子
for x in range(3, num+1):
    num3 = num1 + num2 # 代表从第三个月开始到12月份的兔子
    num1 = num2
    num2 = num3
    print('第{}个月的兔子总数为:'.format(x), 2*num3)
  1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
num = int(input('请输入你要分解的质因数:'))
print('{}='.format(num), end='')
while num > 1:
    for x in range(2,num+1):
        if num % x == 0:
            num = int(num/x)
            if num == 1:
                print('{}'.format(x),end='')
            else:
                print('{}x'.format(x),end='')         
    break
  1. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值
while True:
    num = int(input('请输入未加密的数字(四位数):'))
    ge_num4 = (num % 10 + 5) %10
    shi_num3 = (num % 100 // 10 + 5) % 10
    bai_num2 = (num // 100 % 10 + 5) % 10
    qian_num1 = (num // 1000 + 5) % 10
    huan1 = ge_num4   # 中间变量,用于交换第一位和第二位数字
    ge_num4 = qian_num1
    qian_num1 = huan1

    huan2 = shi_num3   # 中间变量, 用于交换第二位和第三位数字
    shi_num3 = bai_num2
    bai_num2 = huan2
    print(qian_num1,bai_num2,shi_num3,ge_num4)
    break
  1. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。
num = int(input('请输入你要分解的质因数:'))
print('{}='.format(num), end='')
while num > 1:
    for x in range(2,num+1):
        if num % x == 0:
            num = int(num/x)
            if num == 1:
                print('{}'.format(x),end='')
            else:
                print('{}x'.format(x),end='')         
    break
  1. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。
money = 10000  # 本金
r = 0.003     # 年利率
for year in range(1,6):
   result = (1+r)*money  # 最终本金
   money = result
print('5年后,获得的本金是:',result)
  1. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)
num = int(input('输入一个整数:'))
result = 0
while True:
    num1 = num // 10  # num1用于和num交换
    num2 = num % 10
    num = num1
    result += num2
    if num == 0:
        break
print('该整数各位上数字的和为:', result)
  1. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)
num1 = int(input('请输入第一个数:'))
num2 = int(input('请输入第二个数:'))
num3 = num1 * num2   # 用于后面求最小公倍数
if num1 < num2:  # 排序,无论num1和num2那个大,最终将最大的一个赋给num1,小的赋给num2
    num = num1
    num1 = num2
    num2 = num
# 求最大公约数,用大的一个整除小的一个,求得余数一,判断余数一是否为0,如果不为0,用两个数中小的一个数再对余数一求余,得余数2,如果余数2不为0,继续用余数1对余数2求余,依此类推,直到其中有一个余数n对余数n+1求余为0,则余数n为最大公约数
while True:
    r = num1 % num2   
    num1 = num2
    num2 = r
    if r == 0:
        print('num1和num2的最大公约数为:', num1)
        break
# 最小公倍数 = 两个数的乘积 / 两个数得最大公约数
num4 = int(num3 / num1)
print('num1和num2的最小公倍数为:', num4)
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值