学习Python第三天
今天都在练习代码,熟悉代码,并且优化昨天的作业,在学习过程中发现滋生存在的错误,
课后作业
因为我也在学习过程中,所以也会存在一些问题
第一题,
主要找到分解 隔,十,百位的各个数字,然后带入公式即可
for i in range(100, 1000):
x1 = (i // 100) ** 3#整除100即可得到百位上的数字
x2 = ((i % 100) // 10) ** 3#i对100求余,得到十位百位,然后整除10,得到十位上的数字
x3 = (i % 10) ** 3i#直接整除10,得到个位数
if x1 + x2 + x3 == i:
print(i)
# 补充练习,将一个多位数各个位置上的数字颠倒位置1234---->4321
num = int(input('请输入一个多位数'))
x = num
total = 0
while x > 0:
x, y = x // 10, x % 10
total = total * 10 + y
print(total)
#思路如下,以一个数举例
12345
12345 / 10 = 1234------>5 5* 10
1234 / 10 = 123-------->4 (5*10 +4)*10
123 / 10 = 12---------->3 ((5*10 +4)*10+3)*10
12 / 10 = 1------------>2 (((5*10 +4)*10+3)*10+2)*10
1 / 10 =0-------------->1 (((5*10 +4)*10+3)*10+2)*10+1
第二题,
首先确定质数的性质,不存在自身和1以外的因子(别问为什么先讲这个题,看完你就知道了)
num = int(input('请输入一个正整数'))
is_prime = True
for i in range(2,num):
if num % i == 0:
is_prime = False
break
# 确定不是质数就可以终止循环
if num > 1 and is_prime = True #1不是质数
print(f'{num}是质数')
print(f'{num}不是质数')
#补充练习
#寻找一百以内的质数
#思路:首先循环1到100,再循环判断这个数是不是质数
for i in range(2, 101):# 1不是质数,从二开始
is_prime = True
for j in range(2, i):#判断是不是质数的问题
if i % j == 0:
is_prime = False
break
if is_prime:
print(i, end=' ') # 用空格 隔开
#补充练习
#打印九九乘法表
n = 9
for i in range(1, n+1):
for j in range(1, i + 1):
f = i * j
print(f'{j} * {i} = {f}', end='\t')#格式化输出乘法表 end = '\t'用于输出对齐
print()#换行
第三题
-
输入三角形三条边长度,如果能构成三角形,计算三角形面积,如果不能的、构成三角形,重新输入,直到3可以构成三角形
思路:利用海伦公式计算
while True#不确定循环次数,用while循环 a = float(input('输入第一条边长=')) b = float(input('输入第二条边长=')) c = float(input('输入第三条边长=')) if a + b > c and a + c > b and b + c > a: p = (a + b + c) / 2 area = (p * (p - a) * (p - b) * (p - c)) ** (1 / 2) print(f'该三角形面积为{area}') break#求出三角形面积,终止循环 else: print('请重新输入边长')
第四题
-
多次循环求阶乘,带入公式
-
这个题理解起来还是相对简单的
-
但是还有一种更为便捷的方法,利用math包里的函数直接求得阶乘
#方法一 m = int(input('请输入一个正整数m = ')) n = int(input('请输入一个正整数(小于m)n = ')) x1 = 1 x2 = 1 x3 = 1 for i in range(1, m + 1): x1 *= i pass for j in range(1, n + 1): x2 *= j pass for q in range(1, m - n + 1): x3 *= q pass print(x1 / x2 / x3) #方法二 improt math#导入包 m = int(input('请输入一个正整数m = ')) n = int(input('请输入一个正整数(小于m)n = ')) # 直接运用包中的函数进行格式化输出 print(math.factorial(m) / math.factorial(n) / math.factorial(m - n)) #方法二 from math import factorial as f #这一步可分解为:from math 从math包中 improt factorial 导入该函数 as f 将该函数简化为用f表示 m = int(input('请输入一个正整数m = ')) n = int(input('请输入一个正整数(小于m)n = ')) print(f(m) / f(n) / f(m - n))
第五题
for i in range(2, 10001):#循环2 到10000,1本身是质数,可以不用管 temp = 1 #定义一个变量进行,从1开始累加,因为每个数都有1这个因子 for j in range(2, i):#他的因子都小于自身,所以只需要循环2到i即可 if i % j == 0: #满足条件:能够被i整除,就进行累加 temp += j if temp == i: #满足完美数条件,将其输出 print(i)
今天是疯狂练题的一天
- 一百块钱买一百只鸡, 百钱百鸡问题
- 假设大公鸡五块钱一只,老母鸡三块钱一只,小鸡仔一块钱三只,一百块钱要买一百只鸡
思路:循环嵌套
买大公鸡,老母鸡,小鸡仔的钱加起来等于100
大公鸡,老母鸡,小鸡仔加起来一百只
就像以前学的三元一次方程
#初始代码 for i in range(0, 20):#公鸡最多买20只 for j in range(0, 33):#老母鸡最多买 for k in range(0, 99)#小鸡仔最多买99只 if k % 3 == 0 and 5 * i + 3 * j + k * 1 / 3 == 100 and i + j + k == 100:带入条件 print(f'购买公鸡{i}只, 母鸡{j}只,小鸡{k}只') #改良版 for i in range(0, 20): for j in range(0, 33): # 减少循环次数 k = 100 - i - j if k % 3 == 0 and 5 * i + 3 * j + k * 1 / 3 == 100 and i + j + k == 100: print(f'购买公鸡{i}只, 母鸡{j}只,小鸡{k}只')
-
五个人晚上去捕鱼,捕到不计其数的鱼,累到不行要去睡觉,第二天,A第一个醒来,把鱼分成五份, 扔掉多余的一条,拿着自己的一份就走了,B第二个醒来,不知道A已经走了,做了和A一样的事情,扔掉一条刚好分成五份,拿走了自己的,CDE相继醒来也各自做了和AB两人一样的事情(忍不住吐槽,怎么会有那么憨的人,这样都能逮到鱼)求他们至少捕到多少鱼
-
思路
-
最少的肯定是一条, 虽然不够分,但是但是方便计算
-
因为不确定需要循环的次数,所以用whil循环
-
定义一个终止循环的钥匙is_enough = Ture,当满足条件是用break终止循环
-
然后在while循环中用for循环判断鱼的数量
-
当鱼的数量符合条件时退出for循环(鱼需要分五次,所以只需要五次循环,但是五次都没有分出来就重新进行for循环)
-
for循环满足则is_enough满足条件输出fish,用break终止while循环,程序结束
fish = 1 while True: is_enough = True total = fish for _ in range(5): if (total -1 ) % 5 == 0: total = (total - 1) // 5 * 4 else: is_enough = Flase pass if is_enough: print(fish) break else: fish += 1
课后练习
- 计算机产生一个1到100的随机数,输入自己猜的数字
计算机给出对应提示"大一点",”小一点“,或 ”恭喜你猜对了,直到猜中为止“
如果猜的次数超过七次,温馨提示”智商余额不足“ - 输入十个大于0的整数,1到100之间,找到送平均值,最大值,
- 答案明天讲解
- 计算机产生一个1到100的随机数,输入自己猜的数字
import random
answer = random.randrange(1, 101)
while True:
is_right = True
for _ in range(7):
gass = int(input('你猜它是几'))
if answer == gass:
print('恭喜你猜对了')
break
elif gass > answer:
print('小一点')
is_right = False
pass
else:
print('大一点')
is_right = False
if is_right:
break
else:
print('智商余额不足')
x = 0
count = 0
x1 = 100
for _ in range(10):
a = int(input('请输入一个整数'))
count += a
if a >= x:
x = a
elif a <= x1:
x1 = a
avg = count / 10
print(f'最大值为{x},平均数为{avg}, 最小值为{x1}')