您的位置:首页 > 编程语言 > Python开发

python 基础知识第6讲:条件语句控制练习题集合

2019-06-10 12:16 555 查看
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。 本文链接:https://blog.csdn.net/scyllake/article/details/91368167

练习1.求1000以内所有的水仙花数

需求:求1000以内的所有的水仙花数
分析:它的每个位数上的数字的3次幂之和等于它本身
代码1:用if 单次判断

num = int(input("请输入一个1000以内的三位数,最小为100:"))
if  100< num <1000:
#求出对应的百位,十位,个位数字
#假设 x是百位数,y是十位数,z是个位数
x=  num //100
y= (num-x*100) // 10
z= num % 10
if x**3+y**3+z**3 == num:
print(num,'是水仙花数')
else:
print(num,'不是水仙花数')
else:
print('输入的数字有误,请重新输入!')

代码2:用 while循环实现

num=100
while num<1000:
#求出对应的百位,十位,个位数字
#假设 x是百位数,y是十位数,z是个位数

x = num // 100
y= (num-x*100) // 10
z= num % 10
if x**3+y**3+z**3 == num:
print(num,'是水仙花数')
num +=1

练习2.求质数

需求:获取用户输入的任意数,判断是否是质数
分析:质数就是只能被1和它本身整除
代码:

# 让用户输入一个任意数字
num = int(input("请输入一个数字:"))
# 定义一个变量用来作余数的判断
i=2

# 定义一个标签用来标记是否是质数
flag=True
while i<num:
if  num % i == 0:
flag=False
i+=1

if flag:
print('是质数')
else:
print('不是质数')

练习3.循环嵌套

需求:
循环嵌套---------------------------------------
在控制台输出图形,第一行输出一个,第二行输出二个,第n行输出n个
分析:通过2个循环嵌套打印输出
代码1:正序输出:

# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
j=0
# 控制每行输出的个数
while j<i+1:
print('*',end='')
j+=1
print()
i += 1

代码2:反序输出:

# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
j=0
# 控制每行输出的个数
while j<num-i:
print('*',end='')
j+=1
print()
i += 1

练习3.99乘法表

代码1:while循环

i=0
while i< 9:
i += 1
j=0
while j < i:
j+=1
print('{}*{}={} '.format(j,i,i*j),end='')
print()

代码2:for循环

for i in range(0,10):
i+=1
for j in range(0,i):
j+=1
print('{}*{}={} '.format(j,i,i*j),end='')
print()

练习4. while break continue

需求:猜数字,猜对了结束,猜不对继续
代码1:

# 定义一个要猜的数字:
i=7
# 定义一个变量接收用户输入的数字
while True:
num = int(input("请输入一个10之内的数字:"))

if num > 10 or num < 1:
print('输入有误!')
continue

elif  num>i:
print('猜大了!')
continue
elif num< i :
print('猜小了:')
continue
elif num==i:
print('猜对了!')
break

代码2:
猜数字游戏 随机1 - 10个数字,如果猜对正确,如果没有猜对错误
给用户9次机会,最终结果要求用户一次都猜不对
1 2 3 4 5 6 7 8 9 10 9次机会
思路:可以先拿到用户猜过的数字,我可以随机一个数字,去和用户猜过的数字作比对。如果这个循环的数字没有在用户猜过的数字当中。那么这个数字就是我们需要的答案
代码:

import random
# 定义一个列表 目的:用来存储用户猜过的数字
lst = []
i = 0
while i < 9:

number = int(input('请输入一个1-10的数字:'))
# 把用户猜过的数字追加到列表当中
lst.append(number)
print('对不起,你没有猜对')
i += 1

while True:

number_x = random.randint(1,10)   #1<= x <=10

if number_x in lst:
continue
else:
break
print('正确号码是:',number_x)

练习5. 求质数2

需求:求100以内的质数
代码:

i=2
while i<=100:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
j+=1
if flag:
print(i)
i += 1

练习6. 求质数2,性能优化

先通过time模块来查看2个时间差

from time import *
start_time= time()
i=2
while i<=10000:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
j+=1

if flag:
#
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过上面代码的运行,发现当基数变大的时候,执行时间变长
#####6.1第一次优化
通过在内层循环增加break的方法跳出不需要再次循环的数字
代码如下:

from time import *
start_time= time()
i=2
while i<=10000:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
break
j+=1

if flag:
#
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过上面代码的执行发现比原有的快了近10倍

#####6.1第二次优化
通过
代码:

from time import *
start_time= time()
i=2
while i<=100000:
flag = True
j=2
while j<=i**0.5:
if i % j == 0:
flag=False
break
j+=1

if flag:
print(i)
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过最后的时间的观察,和最开始的对比,程序速度快了100倍左右# 练习1.求1000以内所有的水仙花数
需求:求1000以内的所有的水仙花数
分析:它的每个位数上的数字的3次幂之和等于它本身
代码1:用if 单次判断

num = int(input("请输入一个1000以内的三位数,最小为100:"))
if  100< num <1000:
#求出对应的百位,十位,个位数字
#假设 x是百位数,y是十位数,z是个位数
x=  num //100
y= (num-x*100) // 10
z= num % 10
if x**3+y**3+z**3 == num:
print(num,'是水仙花数')
else:
print(num,'不是水仙花数')
else:
print('输入的数字有误,请重新输入!')

代码2:用 while循环实现

num=100
while num<1000:
#求出对应的百位,十位,个位数字
#假设 x是百位数,y是十位数,z是个位数

x = num // 100
y= (num-x*100) // 10
z= num % 10
if x**3+y**3+z**3 == num:
print(num,'是水仙花数')
num +=1

练习2.求质数

需求:获取用户输入的任意数,判断是否是质数
分析:质数就是只能被1和它本 4000 身整除
代码:

# 让用户输入一个任意数字
num = int(input("请输入一个数字:"))
# 定义一个变量用来作余数的判断
i=2

# 定义一个标签用来标记是否是质数
flag=True
while i<num:
if  num % i == 0:
flag=False
i+=1

if flag:
print('是质数')
else:
print('不是质数')

练习3.循环嵌套

需求:
循环嵌套---------------------------------------
在控制台输出图形,第一行输出一个,第二行输出二个,第n行输出n个
分析:通过2个循环嵌套打印输出
代码1:正序输出:

# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
j=0
# 控制每行输出的个数
while j<i+1:
print('*',end='')
j+=1
print()
i += 1

代码2:反序输出:

# 让用户输入一个数字,用来控制显示的行数
num=int(input('请输入一个数字,用来控制您要显示的行数:'))
# 定义一个变量,用来控制输出星星的个数
i=0
# 控制行数
while i<num:
j=0
# 控制每行输出的个数
while j<num-i:
print('*',end='')
j+=1
print()
i += 1

练习3.99乘法表

代码1:while循环

i=0
while i< 9:
i += 1
j=0
while j < i:
j+=1
print('{}*{}={} '.format(j,i,i*j),end='')
print()

代码2:for循环

for i in range(0,10):
i+=1
for j in range(0,i):
j+=1
print('{}*{}={} '.format(j,i,i*j),end='')
print()

练习4. while break continue

需求:猜数字,猜对了结束,猜不对继续
代码1:

# 定义一个要猜的数字:
i=7
# 定义一个变量接收用户输入的数字
while True:
num = int(input("请输入一个10之内的数字:"))

if num > 10 or num < 1:
print('输入有误!')
continue

elif  num>i:
print('猜大了!')
continue
elif num< i :
print('猜小了:')
continue
elif num==i:
print('猜对了!')
break

代码2:
猜数字游戏 随机1 - 10个数字,如果猜对正确,如果没有猜对错误
给用户9次机会,最终结果要求用户一次都猜不对
1 2 3 4 5 6 7 8 9 10 9次机会
思路:可以先拿到用户猜过的数字,我可以随机一个数字,去和用户猜过的数字作比对。如果这个循环的数字没有在用户猜过的数字当中。那么这个数字就是我们需要的答案
代码:

import random
# 定义一个列表 目的:用来存储用户猜过的数字
lst = []
i = 0
while i < 9:

number = int(input('请输入一个1-10的数字:'))
# 把用户猜过的数字追加到列表当中
lst.append(number)
print('对不起,你没有猜对')
i += 1

while True:

number_x = random.randint(1,10)   #1<= x <=10

if number_x in lst:
continue
else:
break
print('正确号码是:',number_x)

练习5. 求质数2

需求:求100以内的质数
代码:

i=2
while i<=100:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
j+=1
if flag:
print(i)
i += 1

练习6. 求质数2,性能优化

先通过time模块来查看2个时间差

from time import *
start_time= time()
i=2
while i<=10000:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
j+=1

if flag:
#
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过上面代码的运行,发现当基数变大的时候,执行时间变长
#####6.1第一次优化
通过在内层循环增加break的方法跳出不需要再次循环的数字
代码如下:

from time import *
start_time= time()
i=2
while i<=10000:
flag = True
j=2
while j<i:
if i % j == 0:
flag=False
break
j+=1

if flag:
#
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过上面代码的执行发现比原有的快了近10倍

#####6.1第二次优化
通过
代码:

from time import *
start_time= time()
i=2
while i<=100000:
flag = True
j=2
while j<=i**0.5:
if i % j == 0:
flag=False
break
j+=1

if flag:
print(i)
pass
i += 1
end_time = time()
print('花费了{}秒'.format(end_time-start_time))

通过最后的时间的观察,和最开始的对比,程序速度快了100倍左右

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: