循环习题解析

首先补充上一节知识(for循环中range函数的使用)
Python的中的for循环本质就是用来迭代数据的 可迭代对象(Iterable对象)

range()函数的使用
  |-- range(n) 表示一个区间范围的递增的数据 [0, n)
  |-- range(m, n) 表示一个区间范围,[m, n)的区间
  |-- range(m, n, s) 第三个值表示步长step

举个栗子:

#打印九九乘法表
#coding=gbk
for i in range(1,10):
    for j in range(1,i+1):
    #步长为1,可不写
        res=i*j
        if res<10:
            print("{}*{}={}\t".format(i,j,res),end="")
        else:
            print("{}*{}={}\t".format(i,j,res),end="")
    print()
print("循环结束")

输出结果:
1
下面是一些练习题:
1.判断素数

#coding=gbk
#判断素数
'''
方法一:
首先是得到一个从控制台输入的数字,然后判断这个数字是否小于等于1,如果小于等于1的话,那么这个数字就不是质数。
如果数字是2的话,那么这个数字就是质数,接下来就是判断一个大于2的数字是否是质数了。
首先要循环遍历大于2的每一个数字,然后用输入的数字除以遍历出来的数字,遍历的数字的范围在(2,num0),包括2,但不包括num0。
如果输入的数字能整除以任何这个范围内的数,那么他就不满足质数的条件,那么这个数字就不是质数。
'''
#从控制台输入一个数,判断是否是质数
num0=eval(input('请输入一个数字: '))
if num0<=1:
    print('这不是质数')
elif num0==2:
    print('这是一个质数!')
else:
    i=2
    while i<num0:
        if num0%i==0:
            print('这不是一个质数')
            break
        i=i+1
    else:
        print ('这是一个质数!')
#方法二:
num=int(input("请输入一个整数: "))
#定义一个布尔值
flag = True
#判断这个数是不是素数
for i in range(2,num):
    if num % i==0:
        #不是素数
        flag=False
        #不需要再循环,就是和数,优化代码
        break 
if flag:
    print("%s是素数" %(num))
else:
    print("{}不是素数".format(num))

2.求50到150之间的素数

#50到150之间的素数
list = []
i = 2
for i in range(50,151):
    j = 2
    for j in range (2,i):
        if i%j == 0:
            break
    else:
        list.append(i)
print(list)

3.打印图案

#coding=gbk
''' 
 *
 **
 ***
 ****
 *****
'''
layer = int(input("请输入您要打印的行数:"))
index = 1
while index <= layer:
 # print("*******")
 # 第一个问题:* 需要一个个打印,还需要一个循环
 # 每层打印几个*
 second = 1
 while second <= index:
  print("*", end="")
  second += 1
 # 每行的*打印完成后
 print("")
 index += 1
 
 '''
    *
   ***
  *****
 *******
'''
layer = int(input("请输入要打印的层数: "))
#校验输入是否合法
if layer < 2:
    layer=int(input("对不起,层数不能小于2, 请重新输入: "))
#打印多少行
for i in range(1, layer + 1):
    #先打印空格
    space_nums =layer - i
    for j in range(space_nums):
        print(" ", end="")
    #计算星的数量
    star_nums=2*i-1
    for j in range(star_nums):
        print("*",end="")
    #每行打印完成后,需要换行
    print( )
 '''  
    *
   * *
  *   *
 *******
'''
layer = int(input("请输入要打印的层数: "))
#校验输入是否合法
if layer < 2:
    layer=int(input("对不起,层数不能小于2, 请重新输入: "))
#打印多少行
for i in range(1, layer + 1):
    #先打印空格
    space_nums =layer - i
    for j in range(space_nums):
        print(" ", end="")
    #计算星的数量
    star_nums=2*i-1
    for j in range(star_nums):
        #判断第一个、最后一个*
        if j==0 or j == star_nums-1 or i==layer:
            print("*",end="")
        else:
            print(" ",end="")
    #每行打印完成后,需要换行
    print()
''' *
   ***
  *****
 *******
  *****
   ***
    *
'''
#上半部分
layer = int(input("请输入要打印的层数: "))
#校验输入是否合法
while layer %2 == 0 or layer < 2: 
    layer=int(input("菱形的层数必须是奇数行, 请重新输入: "))
#打印多少行
for i in range(1, layer // 2 + 2):
#+2的原因:range取不到最后一个,+1;让最多的一行呈现在上半部分,+1
    #先打印空格
    space_nums =layer - i
    for j in range(space_nums):
        print(" ", end="")
    #计算星的数量
    star_nums=2*i-1
    for j in range(star_nums):
        print("*",end="")
    #每行打印完成后,需要换行
    print( )
#下半部分
for i in range(layer // 2 ,0,-1):
    #先打印空格
    space_nums =layer - i
    for j in range(space_nums):
        print(" ", end="")
    #计算星的数量
    star_nums=2*i-1
    for j in range(star_nums):
        print("*",end="")
    #每行打印完成后,需要换行
    print( )
'''  
    *
   * *
  *   *
 *     *
  *   *
   * *
    *
'''
a = int(input("请输入菱形每条边星星的个数:"))
b = a
c = a
print(" " * (a - 1), "*")
for i in range(2, a+1): # 先打印正三角,由空格和*根据规律组成
  print(" " * (b - 1) + "*" + " " * (2 * i - 3) + "*")
  b -= 1
  if i == a: # 临界点,当打印到此,开始打印倒三角
    for y in range(2, a):
      print(" " * y+"*"+" "*(2*c-5)+ "*" )
      c -= 1
    print(" "*a+"*")

4.运算器的实现

#coding=gbk
num1 = float(input("请输入第一个数:"))
op = input("请输入您要运算的符号(+、-、*、/、%、//、**):")
num2 = float(input("请输入第二个数:"))
# 数据运算
if op == "+":
 print("%s + %s = %s"%(num1, num2, (num1 + num2)))
elif op == "-":
 print("%s - %s = %s" %(num1, num2, (num1 - num2)))
elif op == "*":
 print("%s * %s = %s" %(num1, num2, (num1 * num2)))
elif op == "/":
 print("%s / %s = %s" %(num1, num2, (num1 / num2)))
elif op == "%":
 print("%s %% %s \\n= %s " %(num1, num2, (num1 / num2)))

5.求最小公倍数

'''
题目:一个自然数与3的和是5的倍数,与3的差是6的倍数,这个自然数最小是几?
分析:这个题是查找最小公倍数
(x+3)%5=0
(x−3)%6=0
我们可以将x+3看做一个整体,这个整体用y来表示,我们可以看到y首先是5的倍数。
而且y此时比原来的(x−3)多6,因为:y-(x-3)=(x+3)-(x-3)=6
因此,我们可以先找出5的公倍数,然后逐一对6进行整除,
当满足这两个条件后,说明找到了这个最小公倍数y.
此时再根据题目要求,得到x=y−3。为了简洁,只用一个变量x
'''
x = 5
while x % 5 == 0:
  if (x - 6)% 6 == 0:
    break
  else:
    x += 5
print(x - 3)

6.在400–500之间求一个数,它被2除余1,被5除余3,被9除余1,这个数是多少?

#coding=gbk
#在400--500之间求一个数,它被2除余1,被5除余3,被9除余1,这个数是多少?
#方法一:while实现
i = 400 
while i <= 500:
    if i%2 == 1 and i%5 == 3 and i%9 == 1:
        print(i)
        break
    else:
        i += 1
#方法二:for实现
for i in range(400,501):
    if i%2 == 1 and i%5 == 3 and i%9 == 1:
        print(i)

7.有一些四位数,百位数字都是3,十位数字都是6,并且它们既能被2整除,又能被3整除,求这样的四位数中最大的和最小的两数各是几?

#创建空列表用于存储数
ls = []
for a in range(0,10):
 for b in range(0,10):
  #百位数字都是3,十位数字都是6
  num = (a * 1000 + 3 * 100 + 6 * 10 + b)
  
  #既能被2整除,又能被3整除
  if num % 2 == 0 and num % 3 == 0: 
   #将num的值输出为列表
   ls.append(num)
   
#输出最大数与最小数
print(min(ls))
print(max(ls))

8、判断某一年是否是闰年

 #coding=gbk
  #判断是否是闰年
  #闰年条件:能被4整除但不能被100整除,
  #或者是能被400整除。满足任意一个条件即判断为闰年
date = int(input("请输入需要判断的年份:"))
if date%4 == 0 and date%100 != 0:
   print("{}是闰年!".format(date))
elif date%400 == 0:
   print("{}是闰年!".format(date))
else:
   print(date, "不是闰年!")
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值