Day 4 品读Python之while循环

Day 4 品读Python之while循环

while循环

1 基本内容

1.1 语法结构

while 条件语句 :

​ 循环体

1.2 执行过程

  • 判断条件语句是否成立
  • 成立就执行循环体,执行完循环体,再判断条件是否成立,成立继续执行循环
  • 直到不成立直接退出循环,循环终止

1.3 for循环和while的选择

  • 原则上,能用for循环的时候尽量用for循环,解决不了的时候才考虑whlie循环
  • for循环能够解决的问题: 循环次数能够确定
  • for循环不能解决的问题: 循环次数不能确定
#案例1:
num = 1 
while num <= 10:#每一次执行完循环,num会累加
	print(num)
	num += 1	
#案例2:打印10个hello world!
num = 1
while num <= 10:
	print("hello world")
	num += 1

#案例3
pw = "123456"
while True:
	value = imput("请输入密码:")
	if pw == value:#循环终止是用户和存储的密码完全一样,循环次数是根据用户的输入确定
		break

2 循环关键字

2.1 continue

  • 结束一次循环
  • 循环中遇到continue,结束当次循环,不在执行continue之后的循环体
  • 继续执行下一次循环
#案例:打印0-10之间的基数
for i in range(10):
	if x % 2 == 0:
		continue
	print(x)

2.2 break

  • 结束整个循环
  • 循环体执行过程中,遇到break,将直接跳出循环,循环终止
#打印0-10之间小于等于4的数
for i in range(10)
	if i > 4:
		break
	print(i)

2.3 while循环和break万能公式

while True:
	循环体
	循环终止条件
		break

第一周作业

一、选择题

  1. 下列变量名中不合法的是?(C)

    A. abc

    B. Npc

    C. 1name

    D ab_cd

  2. 下列选项中不属于关键字的是?(B)

    A. and

    B. print

    C. True

    D. in

  3. 下面哪个选项对应的代码写法是正确的?(C)

    A.

    print('Python')
      print('新手村')
    

    B.

    print('Python') print('新手村')
    

    C.

    print('Python')
    print('新手村')
    

    D.

    print('Python''新手村')
    
  4. 下面选项中能打印出50的是?(B)

    A.

    print('100 - 50')
    

    B.

    print(100 - 50)
    
  5. 关于引号,下面选项中使用正确的是?(D)

    A.

    print('hello)
    

    B.

    print("hello')
    

    C.

    print(“hello”)#中文
    

    D.

    print("hello")
    

二、编程题

  1. 写代码在控制台打印 good good study, day day up!

    print("good good study , day day up !")
    
  2. 写代码在控制台打印5次 you see see, one day day!

    for i in range(5):
        print("you see see ,one day day !")
    
  3. 写代码打印数字 11、12、13、… 21

    for i in range(11,22):
        print(i)
    
  4. 写代码打印数字 11,13,15,17,…99

    for i in range(11,100,2):
        print(i)
    
  5. 写代码打印数字:10、9、8、7、6、5

    for i in range(10,4,-1):
        print(i)
    
  6. 写代码计算:1+2+3+4+…+20 的和

    sum_num = 0
    for i in range(1, 21):
        sum_num += i
    print(sum_num)
    
  7. 写代码计算100以内所有偶数的和

    sum_num = 0
    for i in range(2,101,2):
        sum_num += i
    print(sum_num)
    
  8. 写代码统计100~200中个位数是3的数的个数

    count = 0
    for i in range(100,201):
        if i % 10 == 3:
            count += 1
    print(count)
    
  9. 写代码计算2*3*4*5*...*9的结果

    product = 1
    for i in range(2,10):
        product *= i
    print(product)
    
  10. 输入一个数,如果输入的数是偶数就打印偶数否则打印奇数

    num = int(input("请输入一个数:"))
    if num == 0:
        print("既不是奇数也不是偶数")
    else:
        if num % 2 == 0:
            print("偶数")
        else:
            print("奇数")
    
  11. 统计1000以内能被3整除但是不能被5整除的数的个数。

    count = 0
    for i in range(1000):
        if i % 3 == 0 and i % 5 != 0:
            count += 1
    print(count)
    
    1. 判断101-200之间有多少个素数,并输出所有素数。

      count_sum = 0
      for i in range(101,200):
          flag = True
          for j in range(2,i):
              if i % j == 0:
                  flag = False
                  break
          if flag:
              print(i)
              count_sum +=1
      print("素数的总数为:",count_sum)
      
    2. 求整数1~100的累加值,但要求跳过所有个位为3的数。

      sum_num = 0
      for i in range(1, 101):
          if i % 10 != 3:
              sum_num += i
      print(sum_num)
      
    3. 有⼀分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的第20个分数

      son_1, son_2 = 2, 3
      mother_1, mother_2 = 1, 2
      count = int(input("请输入您想查看的第几个分数:"))
      if count == 1:
          print("第", count, "个分数是:", son_1, "/", mother_1)
      elif count == 2:
          print("第", count, "个分数是:", son_2, "/", mother_2)
      else:
          for i in range(count - 2):
              son = son_1 + son_2
              son_1 = son_2
              son_2 = son
              mother = mother_1 + mother_2
              mother_1 = mother_2
              mother_2 = mother
          print("第", int, "个分数是:", son, "/", mother)
      
      
    4. 写程序计算 n 的阶乘 n! 的结果

      product= 1
      num = int(input("请输入您想计算谁的阶乘:"))
      for i in range(1,num+1):
          product *= i
      print(num,"的阶乘为:",product)
      
    5. 求1+2!+3!+…+20!的和

      sum_num = 0
      for i in range(1,21):
          product = 1
          for j in range(1, i + 1):
              product *= j
          sum_num += product
      print("1-20包含20所有数的阶乘和为:",sum_num)
      
    6. 写程序求表达式 a + aa + aaa + aaaa+ … 的结果,其中a是1~9的数字,求和的项数用n来控制。(a和n可以用变量来表示)

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

      a = int(input("请输入a的值(大于0):"))
      n = int(input("请输入n的值(大于0):"))
      flag = a
      sums_num = 0
      for i in range(1, n + 1):
          sum_num = 0
          for j in range(0, i):
              a = flag
              a *= 10 ** j
              sum_num += a
          if i < n:
              print(sum_num, end=" + ")
          else:
              print(sum_num, end=" = ")
          sums_num += sum_num
      print(sums_num)
      
    7. 控制台输出三角形

      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
      n = int(input("请输入n的值:"))
      for i in range(n+1,0,-1):
          print("*"*i)
          
      #b
      n = int(input("请输入n的值:"))
      for i in range(1,n+1,2):
          print(" "*((n-i)//2),"*"*i)
        
      #c
      n = int(input("请输入n的值:"))
      for i in range(1,n+1):
          print("  "*(n-i),end="")
          for j in range(1,i+1):
              print(j,end="")
          for k in range(i-1,0,-1):
              print(k, end="")
          print()
      
    8. 小明单位发了100元的购物卡,小明到超市买三类洗化用品,洗发水(15元),香皂(2元),牙刷(5元)。要把100元正好花掉,可有哪些购买结合?

      total_money = 100
      shampoo = 15#6
      soap = 2#50
      toothbrush = 5#20
      for shampoo_num in range(7):
          for soap_num in range(51):
              for toothbrush_num in range(21):
                  if shampoo_num*15 +soap_num*2 + toothbrush_num* 5 == total_money:
                      print("洗发水的数量:",shampoo_num,"香皂的数量:",soap_num,"牙刷的数量:",toothbrush_num)               
      
    9. 一张纸的厚度大约是0.08mm,对折多少次之后能达到珠穆朗玛峰的高度(8848.13米)?

      total_height = 8848.13
      single_height = 0.00008
      count = 0
      while True:
          count += 1
          growing_height = single_height*2 **count
          if growing_height >= total_height:
              break
      print("需要折叠的次数为:",count)
      
    10. 古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,问每个月的兔子总数为多少?

      month = int(input("请输入月份: "))
      if month == 1 or month == 2:    #兔子从第三个月才开始生兔子,所以前两个月单拿出来
          print("总共有兔子数对数为1对")
      else:
          a = 1
          b = 1
          c = 0
          for i in range(3, month + 1):
              c = a + b     #第n个月等于第n-1个月+第n-2个月
              a = b
              b = c
          print("总共有兔子对数为:", c)
      
    11. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

      num = int(input("请输入一个数:"))
      total = num #备份num,最后打印
      list_num = []
      for i in range(2, num + 1):
          flag = True
          for j in range(2, i):
              if i % j == 0:
                  flag = False
                  break
          if flag:
              list_num.append(i) # 将质数存储在列表中
      list_nums = []  # 将质数因数存储在列表中
      while num !=1: #num每次发生变化
           for k in list_num:
               if num % k == 0:
                   list_nums.append(k)
                   num /=k
                   break
      print(total," = ",end="")
      for m in range(len(list_nums)):
          if m == len(list_nums) -1:
              print(list_nums[m])
          else:
              print(list_nums[m]," * ",end="")
      
    12. 某个公司采用公用电话传递数据,数据是四位的整数,在传递过程中是加密的,加密规则如下:每位数字都加上5,然后用和除以10的余数代替该数字,再将第一位和第四位交换,第二位和第三位交换。求输入的四位整数加密后的值

      num = int(input("请输入需要加密的值(四位整数):"))
      num_1 = num %10
      num_2 = num%100//10
      num_3 = num//100%10
      num_4 = num//1000
      num_1 += 5
      num_1 %= 10
      num_2 += 5
      num_2 %= 10
      num_3 += 5
      num_3 %= 10
      num_4 += 5
      num_4 %= 10
      num_1, num_2, num_3, num_4 = num_4, num_3, num_2, num_1
      print("加密后的值为:", num_1, num_2, num_3, num_4)
      
      
    13. 将一个正整数分解质因数。例如:输入90,打印出90=2x3x3x5。

      num = int(input("请输入一个数:"))
      total = num #备份num,最后打印
      list_num = []
      for i in range(2, num + 1):
          flag = True
          for j in range(2, i):
              if i % j == 0:
                  flag = False
                  break
          if flag:
              list_num.append(i) # 将质数存储在列表中
      list_nums = []  # 将质数因数存储在列表中
      while num !=1: #num每次发生变化
           for k in list_num:
               if num % k == 0:
                   list_nums.append(k)
                   num /=k
                   break
      print(total," = ",end="")
      for m in range(len(list_nums)):
          if m == len(list_nums) -1:
              print(list_nums[m])
          else:
              print(list_nums[m]," * ",end="")
      
    14. 本金10000元存入银行,年利率是千分之三。每过1年,将本金和利息相加作为新的本金。计算5年后,获得的本金是多少。

      money = float(input("请输入您的本金:"))
      years = int(input("请输入想查询几年后的本金:"))
      for i in range(years):
          money=money*(1+3/1000)
      print(years,"年后,您的本金是{:.2f}:".format(money))
      
    15. 输入一个整数,计算它各位上数字的和。(注意:输入的整数可以是任意位)

      num = input("请输入一个整数:")
      count = len(num)
      num_int = int(num)
      sum_num = 0
      for i in range(count):
          unit = num_int%10
          num_int //= 10
          sum_num += unit
      print(sum_num)
      
    16. 求两个数的最大公约数和最小公倍数。(提示:公约数一定小于等于两数中的小的那个数,且能同时被两个数整除;公倍数一定大于等于两数中的大数,且是大数的倍数又能被两数中的小数整除)

      num_1 = int(input("请输入第一个数:"))
      num_2 = int(input("请输入第二个数:"))
      max_num = max(num_1, num_2)
      min_num = min(num_1, num_2)
      # 求最大公约数
      list_min = []
      for i in range(2, min_num + 1):
          if num_1 % i == 0 and num_2 % i == 0:
              list_min.append(i)
      if list_min == []:
          print("没有最大公约数.")
      else:
          print("最大公约数为:", max(list_min))
      # 求最小公倍数
      num_copy = max_num
      while True:
          if num_copy % num_1 == 0 and num_copy % num_2 == 0:
              break
          else:
              num_copy += max_num
      print("最小公倍数为:", num_copy)
      

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值