鱼C论坛

 找回密码
 立即注册
查看: 1234|回复: 11

[已解决]关于python第006讲课后练习

[复制链接]
发表于 2018-1-15 21:30:49 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
爱因斯坦的阶梯:
小甲鱼给的参考答案如下,有几个疑问的地方
x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5):
        flag = 1
    else:
        x = 7 * (i+1) # 根据题意,x一定是7的整数倍,所以每次乘以7
    i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

疑问1:为什么给x的赋值是7,可以试别的12345吗?为什么
疑问2:在解决一个问题前总是需要赋好几个值,初学者自己怎么才能知道要为哪些东西赋值,赋几个值?通常都是看了答案琢磨了很久才想明白,自己就是想不到要这样
疑问3:为什么要while i <= 100, 这里为什么一定是100呢
疑问4:为什么这里不可以是if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7==9)呢?我试过python运行提示错误,这是什么原因呢?

请大神指教,谢谢!
最佳答案
2018-1-16 18:10:26
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 200:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7 == 0):
  6.         flag = 1
  7.         break
  8.         
  9.     i += 1
  10.     x += 1
  11. if flag == 1:
  12.     print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')
复制代码


首先你的x 没有改变所以你的程序结束了x 仍然是7
其次你的程序变成了遍历100以下的数找答案,但是答案是100以上,所以起码设为200。小甲鱼的为什么100 就可以了呢,因为他的程序是找7 的倍数,也就是说他的程序是遍历700 以下找答案
再者在if 找到答案后你却没有停止程序,让程序一直运行下去了,导致出来的结果不正确,所以我加了break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2018-1-16 01:24:56 | 显示全部楼层
本帖最后由 8306最硬 于 2018-1-16 02:27 编辑

Q1. 当然可以啊,但是根据题意,阶数必定是7的倍数,x 作为判断的第一个数,赋值为7 很合理啊。不过就算赋值为12345也完全没有影响,因为7 并不是答案。
Q2. em...其实我猜小甲鱼也不是一做题就能把所有变量写上去的,正常人都是想到要用了才回头在前面给它赋个值吧,又没有规定必须一气呵成,反正我是这样的况且大壮也说了,我们不一样~每个人的思维不同,你又何苦逼自己的思维去接近答案呢
Q3. 还是根据题意,你想想阶数是不是有无穷多个可能,如果不设置上限100程序就跑飞了,停不下来~ 当然你可以设成1000或更多,答案也会更多
Q4. 可以啊,语法没有错误,但是注意if 语句最后要加: 我猜你是没加才报错的。不过(x%7==9)是什么鬼,题目也没这条件,加了反而算不出答案了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 08:41:34 | 显示全部楼层
为什么给X赋值为7楼上已经说了我就不多说了,我来说说为什么 I <= 100
因为这是个循环语句,如果一直为真则它会一直循环出现死循环,后面的break语句你还没学到,所以小甲鱼只能在你已学知识的范围内给它加一个条件(这里的100换成200,300都可以),满足这个条件会执行,当不满足条件时则会跳出循环
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 11:10:58 | 显示全部楼层
疑问1:经小甲鱼分析,这个数肯定是7的倍数,其实我也是看一眼,也不会分析,so你也可以不要7的倍数,每个数都试一遍,就是时间长点而已。
疑问2:在解决一个问题前总是需要赋好几个值,初学者自己怎么才能知道要为哪些东西赋值,赋几个值?通常都是看了答案琢磨了很久才想明白,自己就是想不到要这样。
  再厉害的高手也不会直接就上手写,都要思考下步骤,考虑清楚了才能写程序,所以你这个行为是很正常的行为,区别在于老手考虑时间短一些,因为他们比较熟练了,而新手考虑时间长一点而已。
疑问3:只是个范围而已,你也可以加大,没说一定是100.
疑问4:(x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5)这个条件是x对相关数取模运算的余数等于条件满足True,你最后那个条件x%7==9,是打算让一个数除以7最后的余数大于9吗?这怎么可能,计算机当然会报错了,要是还不明白,那么计算机都在嘲笑你的智商了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-16 17:26:40 | 显示全部楼层
8306最硬 发表于 2018-1-16 01:24
Q1. 当然可以啊,但是根据题意,阶数必定是7的倍数,x 作为判断的第一个数,赋值为7 很合理啊。不过就算赋 ...

不好意思,第四个问题之前手滑答错了,我想问的是,根据题意跨9阶余0阶,所以为什么不可以是 if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7==0):呢?我的代码是这样写的,但是系统提示在给定的范围内找不到答案:

x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7 == 0):
        flag = 1
        
    i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

请大神指教!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-16 17:27:14 | 显示全部楼层
冰封雪舞 发表于 2018-1-16 11:10
疑问1:经小甲鱼分析,这个数肯定是7的倍数,其实我也是看一眼,也不会分析,so你也可以不要7的倍数,每个 ...

不好意思,第四个问题之前手滑答错了,我想问的是,根据题意跨9阶余0阶,所以为什么不可以是 if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7==0):呢?我的代码是这样写的,但是系统提示在给定的范围内找不到答案:

x = 7
i = 1
flag = 0

while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7 == 0):
        flag = 1
        
    i += 1

if flag == 1:
    print('阶梯数是:', x)
else:
    print('在程序限定的范围内找不到答案!')

请大神指教
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 18:10:26 | 显示全部楼层    本楼为最佳答案   
  1. x = 7
  2. i = 1
  3. flag = 0

  4. while i <= 200:
  5.     if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5) and (x%7 == 0):
  6.         flag = 1
  7.         break
  8.         
  9.     i += 1
  10.     x += 1
  11. if flag == 1:
  12.     print('阶梯数是:', x)
  13. else:
  14.     print('在程序限定的范围内找不到答案!')
复制代码


首先你的x 没有改变所以你的程序结束了x 仍然是7
其次你的程序变成了遍历100以下的数找答案,但是答案是100以上,所以起码设为200。小甲鱼的为什么100 就可以了呢,因为他的程序是找7 的倍数,也就是说他的程序是遍历700 以下找答案
再者在if 找到答案后你却没有停止程序,让程序一直运行下去了,导致出来的结果不正确,所以我加了break
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-16 20:23:25 | 显示全部楼层
8306最硬 发表于 2018-1-16 18:10
首先你的x 没有改变所以你的程序结束了x 仍然是7
其次你的程序变成了遍历100以下的数找答案,但是答案 ...

十分感谢!!现在彻底明白了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2018-1-16 20:26:28 | 显示全部楼层
8306最硬 发表于 2018-1-16 18:10
首先你的x 没有改变所以你的程序结束了x 仍然是7
其次你的程序变成了遍历100以下的数找答案,但是答案 ...

另外还有一个问题想请教,就是小甲鱼的代码里是采用 x = 7 * (i+1),这样是肯定比 x += 1 这样更加高效的对吗?因为听小甲鱼的课他还提醒我们要用最高效的方法写编程
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 20:35:38 | 显示全部楼层
sleepyme1123 发表于 2018-1-16 20:26
另外还有一个问题想请教,就是小甲鱼的代码里是采用 x = 7 * (i+1),这样是肯定比 x += 1 这样更加高效的 ...

对的,小甲鱼的程序把非7倍数的数都排除了,自然会高效一些
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-16 20:45:33 | 显示全部楼层
学渣瑟瑟发抖
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2018-1-17 09:15:01 | 显示全部楼层
sleepyme1123 发表于 2018-1-16 20:26
另外还有一个问题想请教,就是小甲鱼的代码里是采用 x = 7 * (i+1),这样是肯定比 x += 1 这样更加高效的 ...

针对flag=1如果程序不停止,x继续加1情况,最后导致打印的X不是你需要的情况把程序略微改动下
x = 7
i = 1
flag = 0
t=[]
while i <= 100:
    if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6==5): #and (x%7 == 0):
        flag=1
        t.append(x)        
    i += 1
    x=i*7
if flag == 1:
    print('阶梯数是:',t)
else:
    print('在程序限定的范围内找不到答案!')
   
这种情况下就不会出错了,另外你添加的(x%7 == 0)这个条件就等于是说限制了这个数必须是7的倍数,name下边你就别x+=1了,你直接x=x*i多好啊!程序一下子就少跑6遍。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-3-28 21:00

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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