问答题
0. Python 的 floor 除法使用 “//” 实现,那 3.0 // 2.0 会显示什么内容呢?
答:Python 会义无反顾地执行 floor 除法原则,答案是:1.0。
4. 请用最快速度说出答案:not 1 or 0 and 1 or 3 and 4 or 5 and 6 or 7 and 8 and 9
答:答案是:4
not or and 的优先级是不同的:not > and > or
我们按照优先级给它们加上括号:(not 1) or (0 and 1) or (3 and 4) or (5 and 6) or (7 and 8 and 9)
== 0 or 0 or 4 or 6 or 9
== 4
大家还记得“短路逻辑”吗?3 and 4 == 4,而 3 or 4 == 3。
所以答案是:4
5. 还记得我们上节课那个求闰年的作业吗?如果还没有学到“求余”操作,还记得用什么方法可以“委曲求全”代替“%”的功能呢?
答:用“if year/400 == int(year/400)”这样的方式来“委曲求全”。
动动手
0. 请写一个程序打印出 0~100 所有的奇数。
答:代码如下:
for i in range(0,100):
if i%2==0:
continue
else:
print(i, end=' ')
运行结果如下:
2. 爱因斯坦的难题
爱因斯坦曾出过这样一道有趣的数学题:有一个长阶梯,若每步上2阶,最后剩1阶;若每步上3阶,最后剩2阶;若每步上5阶,最后剩4阶;若每步上6阶,最后剩5阶;只有每步上7阶,最后刚好一阶也不剩。
题目:请编程求解该阶梯至少有多少阶?
答:这道题我一开始写的代码是这样的:
x=0
while True:
if (x%2==1)and(x%3==2)and(x%5==4)and(x%6==5)and(x%7==0):
print(x)
break
x=x+1
后来看小甲鱼的代码发现我写的代码效率比较低所以就修改了一下,如下:
i=1
x=7 #由题意可得i的取值应该为7的倍数
while True:
if (x%2==1)and(x%3==2)and(x%5==4)and(x%6==5)and(x%7==0):
print(x)
break
i=i+1
x=x*i #这样赋值可以提高效率,如果每次+1效率太低
然后运行了半天也没出结果,肯定是哪出问题了,否则不会这么慢,找了半天错,才发现 x 赋值表达式不对,像 x=x*i 这样的话会导致 7 的 某些倍数直接被跳过导致正确答案被漏下了。 最后正确代码如下:
i=1
x=7
while True:
if (x%2==1)and(x%3==2)and(x%5==4)and(x%6==5):
print(f"阶梯数为:{x}")
break
i=i+1
x=7*i
运行结果为119。