吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1934|回复: 13
收起左侧

[Python 转载] 【新手】小白用python解小学奥数第二集

[复制链接]
zhang1497 发表于 2020-8-24 12:06
本帖最后由 zhang1497 于 2020-8-24 22:29 编辑

前言
因为工作的关系,长期教小学数学奥数,最近接触到python,学到了while;for 语句这里,于是就有了这个想法:用python解奥数题

1. 订立制作目标
  • 目标:
    • 打印题目
    • 输出答案


2.制作所需函数
打印题目 → print函数
满足的条件 →while循环语句

3. 开始制作第一步:打印题目
[Python] 纯文本查看 复制代码
print("甲、乙、丙三数的和是78,甲数比乙数的2倍多4,"  # 老样子题目太长用“”换行
      "乙数比丙数的3倍少2。求这三个数。\n")         # \n和 下面答题空一行


第二步:制作while循环
[Python] 纯文本查看 复制代码
sum = 0                                       # 起始值
while True:
    if sum * 3 - 2 + (sum * 3 - 2) * 2 + 4 + sum == 78:
        print("答:甲是", b, "乙是", a, "丙是", sum)
        break                                            # 循环结束


第三步:补充未定义的a和b
[Python] 纯文本查看 复制代码
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次运行运行截图:
运行结果.png

非常成功,没有报错



5.我的第一次错误示范
[Python] 纯文本查看 复制代码
第一次编写代码(错误示范)
sum = 0
a = sum*3-2                    代码执行自上而下
b = (sum*3-2)*2+4              那么a和b就早已赋值了
while True:
    if  a + b + sum == 78:
        print("甲是",b,"乙是",a,"丙是",sum)    输出0 -2 78 并非答案
        break
    sum += 1


我的第二次错误示范
[Python] 纯文本查看 复制代码
sum = 0
while True:
    a = sum*3-2                     #提示a和b未被定义
    b = (sum*3-2)*2+4               #说明a和b需要在循环之前被定义,或者循环之后被定义。
    if  a + b + sum == 78:          #根据第一次错误示范,a和b应该是在循环之后被定义。
        print("甲是",b,"乙是",a,"丙是",sum)
        break
    sum += 1                        #循环+1 直到找到符合条件的答案。


这样应该能够对while进一步加深应用了,这里非常感谢吾友:ukyodz  吾友:wuyangteam对我的指导,我对第三行的解释代码不太满意,还能再简写吗?

免费评分

参与人数 3吾爱币 +6 热心值 +3 收起 理由
张小凡。 + 1 + 1 热心回复!
Zeno___Lee + 2 + 1 用心讨论,共获提升!
苏紫方璇 + 3 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

wuyangteam 发表于 2020-8-24 20:42
本帖最后由 wuyangteam 于 2020-8-24 20:49 编辑
sum = 0
# a = 0            
# b = 0           
while True:
    a = sum * 3 - 2
    b = (sum*3-2)*2+4
    if  a + 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 这句话,放在前面,例如:

while True:
    sum += 1
    a = sum * 3 - 2
    b = (sum*3-2)*2+4
    if  a + b + sum == 78:
        print("甲是",b,"乙是",a,"丙是",sum)
        break

那么第一次循环的时候sum就等于1, 所以放在哪里,与你的逻辑有关,就本题而言,该从0,开始还是1开始呢,无论sum=0,还是1,式子子a+b+sum都不等于78,所以这里,得到的程序输出结果是一样的。

Loker 发表于 2020-8-24 14:11
不考虑运算效率的话,单纯把文字语言描绘出来的话可以是这样: if a + b + c == 78 and a == b * 2 + 4 and b == c * 3 - 2:
[Python] 纯文本查看 复制代码
# 定义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)
ilavac 发表于 2020-8-24 12:29
头像被屏蔽
reson 发表于 2020-8-24 13:25
提示: 作者被禁止或删除 内容自动屏蔽
没想到吧 发表于 2020-8-24 14:03
支持一下,支持一下
 楼主| zhang1497 发表于 2020-8-24 14:15
Loker 发表于 2020-8-24 14:11
不考虑运算效率的话,单纯把文字语言描绘出来的话可以是这样: if a + b + c == 78 and a == b * 2 + 4 and ...

学到了,这个逻辑可以,期待还有大神能够简化的。
l943644670 发表于 2020-8-24 14:29
支持- -不过小学生要是会python写这个,估计奥数题也不在话下了吧啊
lsy832 发表于 2020-8-24 14:29
学以致用啊   感觉这样一下对while循环的理解深刻了一些 ,我在刚学习按键精灵的DO loop这个循环也是出现了跟你一样的第一次循环的错误示范
旋风中的小聪明 发表于 2020-8-24 14:45
微笑着面对奥数题,干了它,哦你给
halfone 发表于 2020-8-24 14:50
48 22 8
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-26 02:00

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表