目录
前言:
1.求和
2.求阶乘
3.输出100以内的奇数
4.打印九九乘法表
5.斐波那契数列
6.打印空心矩形
7.打印三角形
8.求两个数字之间的最大公约数
9.质数问题
10. 进制数转换
11.字符统计
12.字符匹配问题
13.求两个数字之间最小公倍数
14.猜数字游戏
前言:
前面两期讲了Python中的流程控制条件结构和循环结构,这一期我打算通过练习题的形式来做个巩固和复习,话不多说直接上题目!!!
Python学习-----流程控制1.0(选择结构-->if elif else语句、缩进法则)_守约斯维奇的博客-CSDN博客
Python学习-----流程控制2.0(循环结构-->while循环、for循环、range()函数)_守约斯维奇的博客-CSDN博客
1.求和
输入一个数字n,输出1+2+3+4+5+……+n 的结果
n=int(input('输入你求和的数字:'))
sum=0
for i in range(n+1):
sum+=i
print(sum)
非常简单,不用多说什么了,直接下一题
2.求阶乘
输入一个数字n,然后输出这个数字的阶乘
比如输入5,输出5x4x3x2x1的结果
n=int(input('输入:'))
sum=1
for i in range(1,n+1):
sum*=i
print(sum)
同样也是非常简单,不过range()要从1开始哦!!!,如果直接从默认值0开始,那么阶乘的结果都是0,因为0参与了乘法
3.输出100以内的奇数
用Python输出100内的奇数
for i in range(1,101,2):
print(i)
两行就搞定了,不讲,接着下一题
4.打印九九乘法表
用Python去打印输出九九乘法表
# 九九乘法表
#1.(while循环嵌套)
a=9
i=1
while i<=a:
j = 1
while j<=i:
j+=1
i += 1
print('\n')
# 2.(for循环嵌套)
# for i in range(1,10):
# for j in range(1,i+1):
# print(f'{j}*{i}={i * j}', end=' ')
# print('\n')
# 3.(while与for嵌套)
# i=1
# while i<=9:
# for j in range(1,i+1):
# print(f'{j}*{i}={i * j}', end=' ')
# i+=1
# print('\n')
# 4.(for与while嵌套)
# for i in range(1,10):
# j=1
# while j<=i:
# print(f'{j}*{i}={i * j}', end=' ')
# j+=1
# print('\n')
这里我直接提供了4种循环嵌套方法,你们可以自己选择,不过也是非常简单,就不多说了
5.斐波那契数列
输入一个数字n,然后输出第n个斐波那契数的值
n=int(input('请输入:'))
a=1
b=1
for i in range(n):
c=a+b
a=b
b=c
print(a)
我们知道斐波那契数列是1 1 2 3 5 8……所以我们要提前初始化最开始的两个数字,然后就根据斐波那契数列的规律:后面一个数字等于前面的两个数字相加。然后就把a,b,c依次向后移动,直到我们想要的第n个斐波那契数
6.打印空心矩形
输入数字n,打印n*n的空心矩形
比如输入:4
输出:
****
* *
* *
****
n=int(input("请输入:"))
for i in range(n):
for j in range(n):
if i==0 or i==n-1 or j==0 or j==n-1:
print('*',end='')
else:
print(' ',end='')
print()
如果要想打印空心矩形的话,我们这里要用到选择结构去判断,前面讲了循环的嵌套是按照先横后纵去打印的,所以我们这里需要去判断,如果是在第一行或者第一列或者最后一行或者最后一列的时候就要进行打印,也就是打印边框,如果是中间行或者中间列的话就打印空格来填补位置
7.打印三角形
输入一个数字n,打印相对应的三角形(等边三角形)
输入:4
输出:
*
***
*****
*******
k=int(input("enter:"))
i=0
while i<k:
for j in range(k,i,-1):
print(' ',end='')
for h in range(0,i*2+1):
print('*',end='')
i+=1
print('\n')
三角形相对矩形的话就比较灵活了,其实多去练习就会了,可以去试着打印不同类型的三角形
8.求两个数字之间的最大公约数
输入数字a,b,然后输出a和b之间的最大公约数
比如输入:18 12
输出:6
a=int(input('num1:'))
b=int(input('num2:'))
while b:
c=a%b
a=b
b=c
print(a)
这个是非常经典的辗转求余法,就是把这两个数字不断进行求余数。引入一个c作为余数,然后把上一次循环b的值赋给a,c赋值给b,得到新的a和b的值,再次求余数,直到b为0就结束
9.质数问题
输出100以内的全部质数
i=2
while i<=100:
judge=True
for j in range(2,i):
if i%j==0:
judge=False
break
if judge:
print(i,end=' ')
i+=1
质数:一个大于1的自然数,除了1和它本身外,不能被其他自然数整除,换句话说就是该数除了1和它本身以外不再有其他的因数;否则称为合数。
所以我们,先去判断这个数字是不是质数,也就是把这个数字求余到比这个数字小的所有数字,如果结果不为0,那么这个就是质数,然后输出就行了
10. 进制数转换
输入一个十进制数,输出这个数字的二进制数
n=int(input('输入:'))
a=[]
k=0
while n:
a.insert(0,n%2)
n=int(n/2)
k+=1
for i in range(k):
print(a[i],end='')
进制数之间是有转换规则的,十进制转二进制是把这个十进制数对2求余,然后再除2取整,就这样一直重复下去,直到被除数为0,就完成了转换。详细讲解链接进制转换(计数方法)_360百科
不过这里我是用了一个列表来存储转换好了之后的二进制数字,每次生成了一个二进制数我会把这个数字插入到列表的第一位,这样到时候输出就直接按顺序输出就行了
11.字符统计
输入一个字符串,统计其中的字母、数字、空格、以及其他字符的个数,并且输出结果
示例:
输入:wda123 8 **@@
输出:字母:3个,数字4个,空格2个,其他4个
str1=input('输入:')
a=0
b=0
c=0
d=0
i=0
length=len(str1)
while i<length:
if 'a'<=str1[i]<='z' or 'A'<=str1[1]<='Z':
a+=1
elif '0'<=str1[i]<='9':
b+=1
elif str1[i]==' ':
c+=1
else:
d+=1
i+=1
print(f'字母:{a}个,数字:{b}个、空格:{c}个、其他:{d}个')
其实这个统计并不难,运用好循环与条件语句就行了,如果满足条件就加一
12.字符匹配问题
输入一个含有小括号(英文的括号)的字符串,输出括号是否匹配(数量和方向都要相匹配)
示例:
输入:(79998(4wad))
输出:不匹配
输入:)wda77)w**asd(wda(
输出:不匹配
输入:(ada)()w(wq)
输出:匹配
str1=input('输入:')
num=0
i=0
li=[]
length=len(str1)
while i<length:
if str1[i]=='(':
li.append(str1[i])
num+=1
elif str1[i]==')':
li.append(str1[i])
num-=1
i+=1
if num!=0:
print('不匹配')
else:
a=len(li)
j=0
while j<len(li)-1:
if li[j+1]==')' and li[j]=='(':
a=a-2
j+=1
if a==0:
print('匹配')
else:
print('不匹配')
这里是巧妙地运用选择语句,首先初始化num=0,然后去统计( 和 ) 之间的数量, 如果出现一次 ( num+1,如果出现一次 ) num-1,如果最后num等于0的话,说明括号上数量是相匹配的;然后就要进一步去进行位置匹配验证,把前面读取到的括号 '(' 和 ')' 依次按照位置存到空列表中,调用len()函数来统计括号的总个数a,下面通过循环去进行位置匹配,如果列表前面的一个括号是‘)’那么后面的一个括号如果是'(' 的话就把a-2,说明已经位置匹配成功了一对了,以此类推,直到a==0的时候,这说明位置匹配也是成功,最终结果是成功的,否则就匹配失败
13.求两个数字之间最小公倍数
输入数字a,b,然后输出这两个数字之间最小公倍数
a=int(input('num1:'))
b=int(input('num2:'))
i=1
while i*a%b:
i+=1
c=i*a
print('最小公倍数为%d'%c)
求两个数字之间最小公倍数是通过倍数求余法,把其中的一个数字依次与1,2,3,4……相乘然后求余给另一个数,如果出现余数为0的话,那么就出现了最小公倍数,输出结果就行了
14.猜数字游戏
这里涉及到随机数问题,可以看看下面的链接,详细讲解了Python中的随机数
Python学习-----随机数篇_守约斯维奇的博客-CSDN博客
猜数字游戏,随机产生一个1-100的整数,玩家从键盘输入一个数字,如果与随机产生的数字相同就胜利.
要求如下:
1,猜错后要提示玩家,猜的数字比实际数字大或者小,并提示数字以及最新的范围(比如:随机数是10,玩家猜的是20则提示比20小,请输入1-20之间的数字,然后又输入5,则提示比5大,请输入5-20的数字.....)
2.猜对后提示正确,并输出共才了多少次
import random as r
a=r.randint(1,100)
max=100
min=0
count=0
while True:
user=int(input('输入你的数字:'))
if user==a:
count += 1
print('congratulation!你一共猜了%d次'%count)
break
elif user>a:
print('猜大了')
count+=1
if max>user:
max=user
print(f'新的数字范围{min}~{max}')
elif user<a:
count += 1
print('猜小了')
if min<user:
min=user
print(f'新的数字范围{min}~{max}')
好了,这一期就到这里了,兄弟们学会了吗?