鱼C论坛

 找回密码
 立即注册
查看: 2029|回复: 9

[已解决]定义

[复制链接]
发表于 2017-5-25 12:39:32 | 显示全部楼层 |阅读模式

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

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

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)
        i = i+1
if flag == 1:
    print('阶梯数是:',x)
else:
    print('在程序限定的范围内找不到答案!')

前面定义的x = 7,i = 1,flag = 0,,为什么要这么定义?
最佳答案
2017-5-25 13:54:24
本帖最后由 thexiosi 于 2017-5-25 14:00 编辑

我先谈下自己对这道题的理解(见下面的代码):
“ if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):”等效于 “有一个长台阶,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;若每步上7阶,最后不剩。”这个if是核心语句。
小甲鱼老师的算法比我的好:(1)根据题意,仅计算7的倍数 x=7 (2) 设定了运算范围,避免了可能的bug
如果下面的代码思路看懂了,再看小甲鱼老师的代码,就会容易理解思路了。

x = 1
flag = 0
while flag == 0:
    if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):
        flag = 1
    else:
        x = x + 1
print("台阶数是",x)

补充:
flag = 0是while语句的循环条件,当x满足条件后,flag置为1,while循环结束
x=1 x是台阶数

可能说的不是很清楚,不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2017-5-25 13:54:24 | 显示全部楼层    本楼为最佳答案   
本帖最后由 thexiosi 于 2017-5-25 14:00 编辑

我先谈下自己对这道题的理解(见下面的代码):
“ if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):”等效于 “有一个长台阶,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;若每步上7阶,最后不剩。”这个if是核心语句。
小甲鱼老师的算法比我的好:(1)根据题意,仅计算7的倍数 x=7 (2) 设定了运算范围,避免了可能的bug
如果下面的代码思路看懂了,再看小甲鱼老师的代码,就会容易理解思路了。

x = 1
flag = 0
while flag == 0:
    if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) and (x % 6 == 5) and (x % 7 == 0):
        flag = 1
    else:
        x = x + 1
print("台阶数是",x)

补充:
flag = 0是while语句的循环条件,当x满足条件后,flag置为1,while循环结束
x=1 x是台阶数

可能说的不是很清楚,不好意思
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-25 17:40:35 | 显示全部楼层
thexiosi 发表于 2017-5-25 13:54
我先谈下自己对这道题的理解(见下面的代码):
“ if (x % 2 == 1) and (x % 3 == 2) and (x % 5 == 4) a ...

这个明白,,,但是小甲鱼老师写的那个代码,,,


x = 7
i = 1

就不明白是什么意思,,,,x也是台阶数吗?

那么i= 1又代表什么?

flag只有1和0 ?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-25 20:38:08 | 显示全部楼层
这是一种编程的习惯,设立初值,你肯定要问怎么设定:
首先要明白初值的确定十分重要,如果一个变量没有赋初值就使用的话很危险的,你不知道变量里面存放的是什么内容
其次就是初值的设立主要是考虑意思清楚和方便,有时也是一种习惯,比如说flag一帮作为标志,用来判断,最初你初值设置成0(假),那么如果你想要的开关触发发了你就把flag置为1(真),同理你也可以反过来:最初初值设置成1(真),那么你想要的开关触发了你就把flag置为0(假)。只是因为习惯的原因我们一般喜欢最先把标志置为0(假)
同理你可以考虑一下i 和 x 的设置原因,一般i用来作为循环。

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
枫丹白露666 + 1 + 1 支持楼主!

查看全部评分

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

使用道具 举报

发表于 2017-5-26 09:51:20 | 显示全部楼层
答:一个一个回答哈
一、
flag只是一个变量名,可以赋予flag任意类型的值,这里flag初始赋值0,仅仅当"if (x%2 == 1) and (x%3 == 2) and (x%5 == 4) and (x%6 == 5):"成立时,才会赋值为1,当变量flag值为1时,执行打印语句"print('阶梯数是:',x)"
二、
i也是变量名,初始赋值为1,i在"while i <= 100:"循环语句中作为一个循环条件,当i > 100后,循环结束,因为flag此时值仍为0,随后执行打印语句"print('在程序限定的范围内找不到答案!')"
三、
结合代码,变量x对应阶梯数,之所以一直是7的倍数,主要是从算法优化考虑,依据题意:"若每步上7阶,最后不剩"得出

希望对你有帮助 :)

评分

参与人数 1荣誉 +1 鱼币 +1 收起 理由
枫丹白露666 + 1 + 1 感谢楼主无私奉献!

查看全部评分

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

使用道具 举报

 楼主| 发表于 2017-5-26 13:24:29 | 显示全部楼层
thexiosi 发表于 2017-5-26 09:51
答:一个一个回答哈
一、
flag只是一个变量名,可以赋予flag任意类型的值,这里flag初始赋值0,仅仅当"if ...

我想问一下,,,,while i《= 100,,,,,这个100可以换吧?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-26 21:25:47 | 显示全部楼层
枫丹白露666 发表于 2017-5-26 13:24
我想问一下,,,,while i《= 100,,,,,这个100可以换吧?

恩,当然可以了,设定100只是为了限定计算范围
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-27 13:05:53 | 显示全部楼层
thexiosi 发表于 2017-5-26 21:25
恩,当然可以了,设定100只是为了限定计算范围

为什么要设计这么一个范围?    这个i  有什么作用?   只是为了限制吗?


     如果设定500也可以吗?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2017-5-27 20:27:23 | 显示全部楼层
枫丹白露666 发表于 2017-5-27 13:05
为什么要设计这么一个范围?    这个i  有什么作用?   只是为了限制吗?

sure,当然啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2017-5-31 13:04:06 | 显示全部楼层

好的,谢谢
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-5-16 03:02

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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