zhang1497 发表于 2020-8-23 22:46

【新手】小白用python解小学奥数第一集

本帖最后由 zhang1497 于 2020-8-23 22:49 编辑

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

[*]打印题目
[*]输出答案

2.制作所需函数打印题目 → print函数
答案 → range函数
满足的条件 → for循环语句3. 开始制作第一步:打印题目
print("两根同样长的铁丝,第一根剪去18厘米,第二根剪去26厘米,"                        #题目太长用“”换行      
      "余下的铁丝第一根是第二根的3倍。原来两根铁丝各长多少厘米?\n")               #和答题的时候空一行第二步:制作判断条件
for number in range(100):                                                                   #这里我判断答案不会超过100,当然也可以设置1000等等。   
   if number > 26 and (number-18)/(number-26) == 3:                  #满足答案的两个条件,一是要大于26,二是余下的第一根是第二根的3倍。第三步:输入答案
print("两根同样长的铁丝,第一根剪去18厘米,第二根剪去26厘米,"      
   "余下的铁丝第一根是第二根的3倍。原来两根铁丝各长多少厘米?\n")
for number in range(100):
    if number > 26 and (number-18)/(number-26) == 3:      
       print("答案:原来两根铁丝各长",number,"厘米。")

这个题目可以用while 语句完成吗?求大神指导4. 第一次运行运行截图:
https://raw.githubusercontent.com/pky2006/photo/master/20200823155609.png
非常成功,没有报错谢谢观看,求指导,排版、语句的选择等等。(我是复制其他大神的排版,但是达不到黑色背景,代码高亮,以及复制代码的超链接)

Loker 发表于 2020-8-27 14:04

ukyodz 发表于 2020-8-24 07:40
没用?不会没用啊
sum只是个变量名,高亮可能是你软件自定义高亮了,函数的调用是函数名加括号
至于为 ...

a = 27
while(a-18)/(a-26) != 3 and a < 200:
    a = a + 1
print(a)
四行就可以,不一定非得while true:lol

ukyodz 发表于 2020-8-24 03:10

本帖最后由 ukyodz 于 2020-8-24 03:14 编辑

不愧是教奥数的,楼主做事很认真,在所学有限的情况下就能编写出一套合乎逻辑的程序
关于求某个数其实有个特定编程算法,就是SUM=0,然后按照“”SUM=SUM 算数符号 数字“依次运算,因为设定上限这种事在数字过大之后就变得很难了,用你的思路换while的话可以这样写:
sum = 0
while True:#永远循环下去,除非遇见break跳出
    if sum>26 and (sum-18)/(sum-26) == 3:
      print(sum)
      break#一旦算出结果则跳出循环,不再继续运算浪费内存
    sum+=1

我想了一下,也许楼主还没学到某些命令,我还是加个注释

ukyodz 发表于 2020-8-24 08:09

zhang1497 发表于 2020-8-24 07:49
谢谢耐心指导,打代码有时候和解奥数一样,方法都有很多种,尽量让自己学习到最简单的那一个方法。

不客气,其实你一开始打的代码才是有意思的,思维固化就无趣了,你就按照你的来,反正固定的套路你迟早会,但是如果能自己在造轮子中获得一些独特的体悟反而是你自己的宝贵经验

ukyodz 发表于 2020-8-24 07:40

zhang1497 发表于 2020-8-24 07:03
谢谢,我一开始用whlie 写,总是报错,可能还没有理解透,所以无奈之下用了for和range(100)。实际中确实 ...

没用?不会没用啊
sum只是个变量名,高亮可能是你软件自定义高亮了,函数的调用是函数名加括号
至于为什么要加后面,其实无所谓,但是这是一种逻辑,既然你说是必定大于26的整数,那肯定就是27开始嘛,假如我优化一下刚才的代码,节约点计算内存,变成:
sum = 27
while True:
    if (sum-18)/(sum-26) == 3:
      print(sum)
      break
    sum+=1

如你所知,python是逐行解释的语言,这时如果如果sum+=1直接在while True:下一行,那万一27是正解,不就永远算不出了?
这只是一种稳妥的方式,并不是一定要加后面或者加前面,而是根据你实际情况做出加在哪里的最优选择

flasher 发表于 2020-8-23 22:51

以前没接触过while for之类的吗?好奇你是什么专业的

zhang1497 发表于 2020-8-23 22:58

flasher 发表于 2020-8-23 22:51
以前没接触过while for之类的吗?好奇你是什么专业的

我就是小白,刚学python没几天。我实在想不出用while 怎么打代码,尝试了很多次都失败了。

bigdawn 发表于 2020-8-23 23:02

这个不用python都可以直接算出来吧。

fanvalen 发表于 2020-8-23 23:08

zhang1497 发表于 2020-8-23 22:58
我就是小白,刚学python没几天。我实在想不出用while 怎么打代码,尝试了很多次都失败了。

while true:
就好

向往诗和远方 发表于 2020-8-24 01:12

还可以这样增加教学

锋霜 发表于 2020-8-24 02:13

感谢分享,

flashman6820 发表于 2020-8-24 05:33

学无止境,期待下一题奥数的解法。

ljx198686 发表于 2020-8-24 06:59

和数学联系在一起,可以做量化
页: [1] 2 3 4
查看完整版本: 【新手】小白用python解小学奥数第一集