二,控制流
#习题1:设定一个用户名和密码,用户输入正确的用户名和密码,则显示登录成功,否则提示登录失败,用户最多失败3次,否则退出程序。
'''
1,定义2个变量,username,password
2,用input 获取用户输入的用户名和密码
3,用for 循环限定次数, 用 if 条件语句判断输入的用户名和密码是否正确
'''
uesrname = '1'
password = '1'
for i in range(3):
username = input('please input your name:')
password = input('please input your password:')
if uesrname == '1' and password == '1':
print('登录成功')
break
else:
print('登录失败')
if i ==2:
print('you input times is used out! bye')
break
#习题2:随机生成一个整数,1-100之间你最多猜5次,如果猜大了,提示大了,小了,提示小了,猜对了,提示猜中。5次都没猜中,就猜没猜中
'''
1,随机生成一个100之内的整数
2,用input 询问猜得数,用for循环限制次数,
3,用if 判断猜的的数与随机生成的数的大小,打印出提示
'''
import random
num = random.randint(1,100)
print(num)
for i in range(5):
guess_num = int(input('你猜测的数是:'))
if guess_num == num:
print('恭喜你你猜对了')
print('你猜了{}次:' .format(i+1))
break
elif guess_num > num:
print('猜大了')
else:
print('猜小了')
if i ==4:
print('5次机会用光了,你没猜中')
#习题3:使用while,计算随机数之和,超过100的时候,停止程序。随机数1-20的范围产生,要求记录一下产生的随机数,以及最后的和,以及随机数的个数。
'''
1,定义2个变量,一个存储随机数和,一个存储随机数个数,一个列表,存储产生的随机数
2,用while 循环直到满足和大于100
'''
import random
sum =0
count_list = []
while True:
num = random.randint(1, 20)
print(num)
count_list.append(num)
sum = sum + num
if sum >100:
break
print('随机数和为:{}'.format(sum))
print('产生的随机数为:{}'.format(count_list))
print('随机数的个数为:{}'.format(len(count_list)))
#习题4:遍历一个列表中的嵌套列表和元组的所有元素,将1-12的数字进行输出![[[1,2,3],4,5],7,8,(9,10,(11,12))]
'''
遍历列表,用isinstance() 函数判断列表里有没有嵌套列表或元组,有几层循环遍历几层
'''
result = [[[1,2,3],4,5],7,8,(9,10,(11,12))]
for i in result:
if isinstance(i,(list,tuple)):
for v in i:
if isinstance(v,(list,tuple)):
for u in v:
print(u)
else:
print(v)
else:
print(i)
#习题7:判断一个数是否是素数
'''
1,素数:大于1的自然数中,除了1和它本身以外不再有其他因数的自然数,即质数。
2,判断一个数是不是素数,可以用这个数除以2至这个数开平方后的数,整除不是素数不整除就是素数
3,创建一个函数,入参为一个自然数,入参小于等于1,返回false,等于2,返回ture,大于2时,判断是否符合第2点
'''
import math
def is_prime(num):
if not isinstance(num,int):
return False
else:
if num<=1:
return False
elif num ==2:
return True
else:
for i in range(2,int(math.sqrt(num)+1)):
if num%i==0:
return False
return True
print(is_prime(-25))
print(is_prime(0))
print(is_prime(1))
print(is_prime(1.2))
print(is_prime(2))
print(is_prime(3))
print(is_prime(10))
print(is_prime(97))
#习题8:嵌套列表的正、反对角线、四边及中间元素之和
'''
1,定义一个嵌套列表的矩阵 s =[
[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12],
[13,14,15,16]
]
2,定义一个变量存储和,嵌套循环遍历
'''
s =[
[ 1, 2, 3, 4],
[ 5, 6, 7, 8],
[ 9,10,11,12],
[13,14,15,16]
]
sum =0
#正对角线和 矩阵的行下标等于列下标时是正对角线
for i in range(len(s)):
for v in range(len(s[i])):
if i == v:
sum += s[i][v]
print(s[i][v])
print('正对角线和为:{}'.format(sum))
#反对角线和 矩阵的行下标与列下标的和 等于行数-1或列数-1
sum1=0
for i in range(len(s)):
for v in range(len(s[i])):
if (i+v) == len(s)-1:
sum1 += s[i][v]
print(s[i][v])
print('反对角线和为:{}'.format(sum1))
#四边和 矩阵的首行和末行取全部元素,其它行取首列和末列元素
sum2=0
for i in range(len(s)):
if i == 0 or i == len(s) - 1:
for v in range(len(s[i])):
sum2 += s[i][v]
print(s[i][v])
else:
sum2 += s[i][0]
sum2 += s[i][-1]
print('首列为:{}'.format(s[i][0]))
print('尾列为:{}'.format(s[i][-1]))
print('四边之和为:{}'.format(sum2))
#中间元素之和 方法一,矩阵之和减去四边和 方法二,矩阵的首行和末行跳过,其它行跳过首列和末列元素求和
#方法一
sum3 = 0
sum4 = 0
for i in range(len(s)):
for v in range(len(s[i])):
sum3 += s[i][v]
print(s[i][v])
sum4=sum3-sum2
print('矩阵和为:{}'.format(sum3))
print('中间元素和为:{}'.format(sum4))
#方法二
sum5=0
for i in range(len(s)):
if i == 0 or i == len(s) - 1:
continue
else:
for v in range(len(s[i])):
if v==0 or v==len(s[i])-1:
continue
else:
sum5 += s[i][v]
print('中间元素为:{}'.format(s[i][v]))
print('中间元素之和为:{}'.format(sum5))
#习题9,实现数学中多项式求和公式的打印 比如:a6x^6 + a5x^5 + a4x^4 + a3x^3 + a2x^2 + a1x^1 + a0
'''
此题主要检查字符串拼接及range()函数的灵活应用
range(start,stop,step) 从那个数开始,到那个数结束,步长为几
'''
sting= ''
for i in range(6,-1,-1):
if i >=1:
sting += 'a'+str(i) +'x'+'^'+str(i)+'+'
else:
sting += 'a'+str(i)
print(sting)
#习题10,输出n的阶乘
'''
利用递归思想设计算法 n! = n x (n-1) x (n-1)-1
'''
def fac(n):
if not isinstance(n,int) or n<=0:
return 0
elif n==1:
return 1
else:
return n * fac(n-1)
print(fac(-1))
print(fac(0))
print(fac(1))
print(fac(2.5))
print(fac(6))