大家好,本文将围绕python的循环语句例题展开说明,python循环语句 题库是一个很多人都想弄明白的事情,想搞清楚python经典循环题目需要先了解以下几个事情。
入门经典100题
1. 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
_=0
for i in range(1,5):
for j in range(1,5):
for k in range(1,5):
if i ==j or i == k or j == k:
continue
else:
print(100*i+10*j+k)
_ += 1
print(_)
2.一个整数,它加上100后是一个完全平方数,再加上168又是一个完全平方数,请问该数是多少?
for i in range(100):
for j in range(100):
if i**2-j**2==168:
x=j**2-100
print(x)
3.判断101-200之间有多少个素数,并输出所有素数。
素数就是在大于1的自然数中,除了1和它本身不再有其他因数的数怎样用python画弧形花瓣。
num = []
for i in range(101,200):
for j in range(2,i):
if i%j == 0:
break
else:
num.append(i)
print(num)
4.打印出所有的“水仙花数”,所谓“水仙花数”是指一个三位数,其各位数字立方和等于该数本身。例如:153 是一个“水仙花数”,因为153=1的三次方+5的三次方+3的三次方。
方法一
for i in range(1,10):
#三位数的百位
for j in range(0,10):
#三位数的十位
for k in range(0,10):
#三位数的个数
if i*100+j*10+k == i**3+j**3+k**3:
print(i*100+j*10+k)
方法二
敲黑板 !!! 如何取一个数字的个位十位和百位呢
for i in range(100,1000):
gewei = i%10
shiwei = i//10%10
baiwei = i//100
if i == gewei **3 +shiwei **3 +baiwei **3:
print(i)
5.将一个正整数分解质因数。
#join()函数
#语法:
‘sep’.join(seq)
#参数说明
#sep:分隔符。可以为空
#seq:要连接的元素列表、字符串、元组、字典
# 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
m =int(input("请输入一个正整数:"))
n = m
a = []
while m >1:
for i in range(2,m+1):
if m%i == 0:
m = m // i
#除法结果向下取整
a.append(str(i))
#把i转换为字符串类型,并放入列表a中
break
if len(a) == 1:
print(n,'=','1*',n)
else:
b = '*'.join(a)
print(n,'=',b)
封装 try try鸭~~
# 将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
def zhiyin():
m =int(input("请输入一个正整数:"))
n = m
a = []
while m >1:
for i in range(2,m+1):
if m%i == 0:
m = m // i
#除法结果向下取整
a.append(str(i))
break
if len(a) == 1:
print(n,'=','1*',n)
else:
b = '*'.join(a)
print(n,'=',b)
if __name__ == "__main__":
zhiyin()
6.利用条件运算符的嵌套来完成此题:学习成绩>=90分的同学用A表示,60-89分之间的用B表示,60分以下 的用C表示。
封装下哈
def main():
score =int(input("请输入学习成绩:"))
if score >= 90:
grade = 'A'
elif score >=60:
grade = 'B'
else:
grade = 'C'
print (grade)
if __name__ =="__main__":
#调用呀
main()
7.输入一行字符,分别统计出其中英文字母、空格、数字和其它字符的个数。
import string
def main():
a = input("请输入一行字符:")
zimu = 0
kongge = 0
shuzi = 0
qita = 0
for i in a:
if i.isalpha():
zimu +=1
elif i.isspace():
kongge +=1
elif i.isdigit():
shuzi +=1
else:
qita +=1
print("这一行字符中有"+str(zimu)+"个字母"+','
+str(kongge)+"个空格"+','+str(shuzi)+"个数字"
+','+str(qita)+"个其他")
if __name__ == "__main__":
main()
print()也可以这样写。
%s 格式化字符串
%d 整型
%f 浮点型
print('这一行字符中有 %d 个字母,%d个空格,'
'%d个数字,%d个其他' % (zimu,kongge,shuzi,qita))
8.求s=a+aa+aaa+aaaa+aa…a的值
例如2+22+222+2222+22222(此时共有5个数相加)
主要思想:后一项等于前一项乘10加a(第一项)的结果
for循环和自加实现
def main():
a = 0
sum = 0
a = int(input("请输入数字:"))
b = int(input("请输入位数:"))
c = []
e = a
for i in range(b):
if b == 1:
print(str(a)+'='+str(a))
else:
c.append(str(a))
a = a*10 +e
sum += a
d ='+'.join(c)
print(str(sum) +'='+d)
if __name__ =='__main__':
main()
9.一个数如果恰好等于它的因子之和,这个数就称为“完数”。
题目分析
#例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。
#编程输入一个数字,判断它是否为完数:
sum = 0
a =int( input("请输入:"))
for j in range(1,a):
if a % j == 0:
sum += j
if sum == a :
print(str(a)+'是个完数')
else:
print(str(a)+'不是个完数')
#编程序找出N之内的所有完数,并按下面格式输出其因子:
sum = 0
for a in range(2,1000):
#判断2-1000内有多少个完数
for j in range(1,a):
if a % j == 0:
sum += j
if sum == a :
print(str(a)+'是个完数')
else:
print(str(a)+'不是个完数')
#试着封装下呗
def main():
a = int(input("请输入:"))
for i in range(1,a+1):
sum = 0
for j in range(1,i):
if i % j == 0:
sum += j
if sum == i:
print(str(i)+'是个完数')
else:
print(str(i)+'不是个完数')
if __name__ == '__main__':
main()
10.打印出如下图案(菱形)
for i in range(1,8,2):
print(('*' * i).center(7))
for i in range(5,0,-2):
print(('*' * i).center(7))
#使用center函数将其居中显示
for i in range(-3,4):
if i < 0:
j = -i
else:
j = i
print(' ' * j+'*' * (7-2*j))
for i in range(1,8,2):
print(' ' *int( (7-i)/2)+'*' * i)
for j in range(5,0,-2):
print(' ' * int((7 - j) / 2) + '*' * j)
11.有一分数序列:2/1,3/2,5/3,8/5,13/8,21/13…求出这个数列的前20项之和。
def main():
a = 2
b = 1
s = 0
for i in range(20):
s += a/b
a += b
b = a-b
print("这个数列前20项之和为"+str(s))
if __name__ =='__main__':
main()
12.求1+2!+3!+…+20!的和
思路一:递归函数
以下为计算阶乘的递归函数:
def jiecheng(n):# n为形参
if n ==1:
return 1
else:
return n*jiecheng(n-1)
print(jiecheng(3))
递归函数 + for 循环
s = 0
def chengji(j):
if j >1:
return j*chengji(j-1)
else:
return 1
for i in range(1,21):
a = chengji(i)
s += a
print('1+2!+3!+...+20!'+'='+str(s))
思路二
仔细观察可以发现:比如说3!就是3本身乘以2!
4!就是4本身乘以3!
t = 1
sum = 0
for i in range(1,21):
t = i*t
sum = sum+t
print(sum)
思路三
函数 map() 是 Python 内置的高阶函数,它接收一个函数 f 和一个 list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回。
a = range(1,21)
def jiecheng(n):
t = 1
for i in range(1,n+1):
t = i*t
return t
b = sum(map(jiecheng,a))
print(b)
a = range(1,21)
#定义函数采用递归的方式
def jiecheng(i):
if i == 1:
return 1
else:
return i*jiecheng(i-1)
b = sum(map(jiecheng,a))
print(b)
思路四
使用 列表 的方式,将每个数的阶乘放进列表,求其和。
a = []
b = 1
for i in range(1,21):
b = b*i
a.append(b)
print(sum(a))
思路五
使用 Lambda函数。
匿名函数可以在程序中任何需要的地方使用,但是这个函数只能使用一次,即一次性的。语法如下:
语法: lambda参数:表达式
Lambda函数 + reduce函数
reduce函数会对参数列表中的元素进行累积。
from functools import *
sum = 0
for i in range(1,21):
a = reduce(lambda x,y: x*y,range(1,i+1))
sum = a +sum
print(sum)
13.利用递归方法求5!。
def digui(i):
if i == 1:
return 1
else:
return i*digui(i-1)
print(digui(5))
14.利用递归函数调用方式,将所输入的5个字符,以相反顺序打印出来。
def xiangfan(x):
if len(x) == 1:
return x
else:
return x[-1] + xiangfan(x[:-1])
a = input("请输入:")
print (xiangfan(a))
15. 有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第 4 3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后 5 问第一个人,他说是10岁。请问第五个人多大?
def main(x):
if x == 1:
return 10
else:
return main(x-1) + 2
print(main(5))
16. 给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
方法一
a = input("请输入:")
print(str(len(a))+'位数' )
print(a[::-1])
方法二
def nixu(x):
if len(x) == 1:
return x
else:
return x[-1]+nixu(x[:-1])
a = input("请输入:")
print(nixu(a))
print(str(len(a))+"位数")
17. 一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。
以下两种方法均可判断任意数是否为回文数:
def daoxu(x):
if len(x) == 1:
return x
else:
return x[-1]+daoxu(x[:-1])
#使用递归函数输出一个数的倒序数
a = input("请输入:")
b = daoxu(a)
if b == a:
print(str(a)+'是回文数')
#判断正序和倒序数字是否一样
else:
print(str(a)+'不是回文数')
a = input("请输入:")
b = a[::-1]
if b ==a:
print(str(a)+"是个回文数")
else:
print(str(a)+"不是个回文数")
题目中强调这个数字为5位数,因此进行修改如下:
a = input("请输入:")
int_a = int(a)
if int_a > 99999 or int_a < 10000:
print("INPUT ERROR")
else:
b = a[::-1]
if b ==a:
print(str(a)+"是个回文数")
else:
print(str(a)+"不是个回文数")
18. 求100之内的素数
质数是指在大于1的自然数中,除了1和它本身**以外不再有其他因数的自然数。
a = []
for i in range(100):
if i < 2:
continue
for j in range(2,i):
if i % j == 0:
break
else:
a.append(i)
print("100以内的素数有",a)
19.对10个数进行排序
方法一:使用sort函数
a = []
for i in range(10):
nums = input("请输入10个数字:")
a.append(int(nums))
print(a)
a.sort()
print(a)
方法二:定义排序函数
def paixu(a):
for i in range(len(a)-1):
for j in range(1+i,len(a)):
if a[i] > a[j]:
a[i],a[j] = a[j],a[i]
return a
b = []
for k in range(3):
nums = input("请输入:")
b.append(int(nums))
print(paixu(b))
20. 求一个3*3矩阵对角线元素之和
sum = 0
a = [[1,6,8],[3,2,5],[6,9,8]]
for i in range(3):
for j in range(3):
if i == j:
sum = a[i][j]+sum
print(sum)
这是给定一个矩阵,来求它的对角线之和。那么如何输入一个矩阵呢?
a = []
for i in range(0,3):
tmp = []
for j in range(0,3):
tmp.append(j)
a.append(tmp)
print(a)
21. 有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
以下为冒泡排序
import time
a = []
for i in range(3):
b = input("请输入:")
a.append(int(b))
print(a)
#采用冒泡排序法
def maopao(j):
for j in range(len(a)-1):
for k in range(0,len(a)-1):
if a[j] > a [j+1]:
a[j],a[j+1] = a[j+1],a[j]
print(a)
if __name__ == "__main__":
maopao(a)
time.sleep(3)
input_num = input("插入数字:")
a.append(int(input_num))
if __name__ == "__main__":
maopao(a)
22.将一个数组逆序输出。
以下四种方法均可以实现
a = [1,2,3,4]
for i in range(int(len(a)/2)):
a[i],a[len(a)-1-i] = a[len(a)-1-i],a[i]
print(a)
a = [1,2,3,4]
b = a[::-1]
print(b)
a = [1,2,3,4]
b = []
for i in range(len(a)):
fanzhuan_a = a[len(a)-1-i]
b.append(fanzhuan_a)
print(b)
a = [1,2,3,4]
b = []
for i in range(len(a)-1,-1,-1):
zhengxu_a = a[i]
b.append(zhengxu_a)
print(b)
23.取一个整数a从右端开始的4~7位。
大致思路:
(1)可以先使整数a向右移动4位
(2)设置一个低4位全为1,其余全为0的数。
(3)将上面二者进行&运算
首先应该将该整数转化为一个二进制数。
#写函数采用%2的方式来算
#先略过这题,不太会做
24.【Tkinter模块】
实现功能:点击一次button按钮,回调函数执行一次。
from tkinter import *
def hellobutton():
print("我是一个中国人")
root = Tk()
#根窗口
root.title("python")
Button(root,text = 'hellobutton',command = hellobutton).pack()
#装包显示
root.mainloop()
#程序持续执行