学习Python第三天
今天都在练习代码,熟悉代码,并且优化昨天的作业,在学习过程中发现滋生存在的错误,
课后作业
因为我也在学习过程中,所以也会存在一些问题
第一题,
主要找到分解 隔,十,百位的各个数字,然后带入公式即可
for i in range(100, 1000):
x1 = (i // 100) ** 3
x2 = ((i % 100) // 10) ** 3
x3 = (i % 10) ** 3i
if x1 + x2 + x3 == i:
print(i)
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
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
m = int(input('请输入一个正整数m = '))
n = int(input('请输入一个正整数(小于m)n = '))
print(f(m) / f(n) / f(m - n))
第五题 for i in range(2, 10001):
temp = 1
for j in range(2, i):
if i % j == 0:
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之间,找到送平均值,最大值,
- 答案明天讲解
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}')
|