【新手】小白用python解小学奥数第二集
本帖最后由 zhang1497 于 2020-8-24 22:29 编辑前言
因为工作的关系,长期教小学数学奥数,最近接触到python,学到了while;for 语句这里,于是就有了这个想法:用python解奥数题
1. 订立制作目标
[*]目标:
[*]打印题目
[*]输出答案
2.制作所需函数打印题目 → print函数
满足的条件 →while循环语句3. 开始制作第一步:打印题目
print("甲、乙、丙三数的和是78,甲数比乙数的2倍多4,"# 老样子题目太长用“”换行
"乙数比丙数的3倍少2。求这三个数。\n") # \n和 下面答题空一行
第二步:制作while循环
sum = 0 # 起始值
while True:
if sum * 3 - 2 + (sum * 3 - 2) * 2 + 4 + sum == 78:
print("答:甲是", b, "乙是", a, "丙是", sum)
break # 循环结束
第三步:补充未定义的a和b
print("甲、乙、丙三数的和是78,甲数比乙数的2倍多4,"# 老样子题目太长用“”换行
"乙数比丙数的3倍少2。求这三个数。\n") # \n和 下面答题空一行
sum = 0 # 起始值
while True:
if sum * 3 - 2 + (sum * 3 - 2) * 2 + 4 + sum == 78:
print("答:甲是", b, "乙是", a, "丙是", sum)
break # 循环结束
sum += 1 # sum +=1 写在后面美观
a = sum * 3 - 2 # a和b需要在循环之后被定义,
b = (sum*3-2)*2+4 #在while循环结束后,定义之前print内a和b的值
4. 第N次运行运行截图:
https://raw.githubusercontent.com/pky2006/photo/master/20200823155609.png
非常成功,没有报错
5.我的第一次错误示范
第一次编写代码(错误示范)
sum = 0
a = sum*3-2 代码执行自上而下
b = (sum*3-2)*2+4 那么a和b就早已赋值了
while True:
ifa + b + sum == 78:
print("甲是",b,"乙是",a,"丙是",sum) 输出0 -2 78 并非答案
break
sum += 1
我的第二次错误示范
sum = 0
while True:
a = sum*3-2 #提示a和b未被定义
b = (sum*3-2)*2+4 #说明a和b需要在循环之前被定义,或者循环之后被定义。
ifa + b + sum == 78: #根据第一次错误示范,a和b应该是在循环之后被定义。
print("甲是",b,"乙是",a,"丙是",sum)
break
sum += 1 #循环+1 直到找到符合条件的答案。
这样应该能够对while进一步加深应用了,这里非常感谢吾友:ukyodz吾友:wuyangteam对我的指导,我对第三行的解释代码不太满意,还能再简写吗?
本帖最后由 wuyangteam 于 2020-8-24 20:49 编辑
```python
sum = 0
# a = 0
# b = 0
while True:
a = sum * 3 - 2
b = (sum*3-2)*2+4
ifa + b + sum == 78:
print("甲是",b,"乙是",a,"丙是",sum)
break
sum += 1
```
这个是对的,python并不一定需要事前先定义,我用的python3.8编译,没有错。那么你可能会问为啥sum要先给个0,因为sum如果事先不给个初值,进入while后,编译器并不知道它是个啥啊,值为多少啊,而a,b都是可以根据sum的值计算出来的。
再次sum += 1这个不是为了好看才放后面的。因为while循环,第一次循环,sum = 0,如果你将sum + =1 这句话,放在前面,例如:
```python
while True:
sum += 1
a = sum * 3 - 2
b = (sum*3-2)*2+4
ifa + b + sum == 78:
print("甲是",b,"乙是",a,"丙是",sum)
break
```
那么第一次循环的时候sum就等于1, 所以放在哪里,与你的逻辑有关,就本题而言,该从0,开始还是1开始呢,无论sum=0,还是1,式子子a+b+sum都不等于78,所以这里,得到的程序输出结果是一样的。 不考虑运算效率的话,单纯把文字语言描绘出来的话可以是这样: if a + b + c == 78 and a == b * 2 + 4 and b == c * 3 - 2:
# 定义abc分别为甲乙丙
a = 0
b = 0
c = 0
for a in range(0,78):
for b in range(0,78):
for c in range(0,78):
# 甲、乙、丙三数的和是78,甲数比乙数的2倍多4,乙数比丙数的3倍少2
if a + b + c == 78 and a == b * 2 + 4 and b == c * 3 - 2:
print("number a is: ", a, "\nnumber b is: ", b, "\nnumber c is: ", c) 不错,支持 支持一下,支持一下 Loker 发表于 2020-8-24 14:11
不考虑运算效率的话,单纯把文字语言描绘出来的话可以是这样: if a + b + c == 78 and a == b * 2 + 4 and ...
学到了,这个逻辑可以,期待还有大神能够简化的。 支持- -不过小学生要是会python写这个,估计奥数题也不在话下了吧啊 学以致用啊 感觉这样一下对while循环的理解深刻了一些 ,我在刚学习按键精灵的DO loop这个循环也是出现了跟你一样的第一次循环的错误示范 微笑着面对奥数题,干了它,哦你给 48 22 8 {:1_904:}
页:
[1]
2