我甚至开始怀疑后面的文章副标题是不是应该都叫《令人头大的数学》,没有错,今天依然学的是数学。

今天第一节课学的是布尔值,简单来说就是“and”、“or”、“not”三个运算符,以及一个函数bool。

想输出为false的对象也不容易,一共就这几个。true就数不清了。

其中and是两边数字均为“真”时,输出true。比如 2>1 and 9>8,那么就会输出true,反之输出false。or是一边为真就行,比如2>1 or 2<1,结果依然是true。not就是杠精,你的结果是true,它就非输出个false,反之就非要输出个false。

bool函数就是给参数转化为布尔值并输出。比如bool(1>2)就输出false。目前还没发现这个函数的作用……

今天的第一个动手作业是判断输入的年份是不是闰年。

year = input('请输入一个年份:') #设定year变量的值为用户输入的值。

while not year.isdigit(): #循环验证:如果用户输入的值不是十进制数字。
    year = input("抱歉,您的输入有误,请输入一个整数:") #提示用户输入有误,并重新输入
    year = int(year) #将 year 转换成整数 
if int(year) % int(400) == 0:# 如果 year 能被 400 整除 
    print("是闰年")# 打印 year 是闰年
else: #如果不能
    if int(year) % int(4) == 0 and int(year) % int(100) !=0: # 如果 year 能被 4 整除,但不能被 100 整除(and表示两个条件要同时满足) #:
        print("是闰年")# 打印 year 是闰年 #
    else: #如果不能
        print("不是闰年")# 打印 year 不是闰年 #

这个作业还是比较简单的,比较卡的地方还是字符串和值的对比上,我加了一堆int来定义变量。否则就会报错,无法对比。

TypeError: not all arguments converted during string formatting 或者是 TypeError: unsupported operand type(s) for -: 'str' and 'int'

第二节课就比较麻烦了,是比较运算符的优先级,天地良心,这玩意儿背起来怕是会死人吧。

不过我感觉还好,毕竟我就没打算真背下来,用到的时候再查吧……

作业内容是:

爱因斯坦曾出过这样一道有趣的数学题:
有一个长阶梯,若每步上 2 阶,最后剩 1 阶;若每步上 3 阶,最后剩 2 阶;若每步上 5 阶,最后剩 4 阶;若每步上 6 阶,最后剩 5 阶;只有每步上 7 阶,最后刚好一阶也不剩。
请问阶梯有几级?

这个题目是我做的第一个与参考答案不一样题目。

#参考答案:
steps = 7
i = 1
FIND = False

while i < 100:
    if (steps % 2 == 1) and (steps % 3 == 2) and (steps % 5 == 4) and (steps % 6 == 5):
        FIND = True
        break
    else:
        steps = 7 * (i + 1)
    i = i + 1

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

因为小甲鱼给的其实是填空题,所以有几个部分我就没弄懂有啥用。比如为什么要定义steps为7?else为什么要填入7*(i+ 1)?

后来看小甲鱼的答案才知道,因为7一定可以被整除,所以答案一定是7的倍数。直接定义7的倍数就好了。

but,我数学能力<=0啊!这么复杂我不会啊,所以我采用的是最蠢的+1法。

i = 1 #定义i为1
FIND = False #定义FIND为False

while i < 1000: #循环函数:当i小于1000的时候进行循环
    if i % 2 == 1 and i % 3 == 2 and i % 5 == 4 and i % 6 == 5 and i % 7 == 0: # 假如i满足这些条件 
        FIND = True #FIND的值为True
        break #循环结束
    else: #如果不满足条件
        print(i + 1)# 显示当前i的值是多少
    i = i + 1 #i+1继续循环

if FIND == True: #如果上述循环结论为True
    print('阶梯数是:', i) #打印阶梯数是: + i的值
else: #如果上述循环结束还没有找到满足条件的值
    print('在程序限定的范围内找不到答案!') #显示在程序限定的范围内找不到答案

虽然说答案是一样的,但很显然,人家的计算更高效。以前上学的时候,计算机老师说:“不管用什么办法,总之能实现就行。”这句话只能说理论上没错,但实际上如果有更高效的方式,又何必用歪门邪道,祈祷瞎猫碰到死耗子呢?

总之,今天的课相对还是比较简单的(如果运算符优先级那张表……)。同时也明确感受到,越到后面,薄弱的数学基础就越拖后腿。这就有点难受了。

胭惜雨

2020-12-20

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据