首先补充上一节知识(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.判断素数
#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, "不是闰年!")