2020-04
13

制表符

By xrspook @ 19:14:09 归类于: 扮IT

题目本身很简单,对我这种新手难就难在完全靠自己去摸索格式。这本书之前根本没说过要怎么输出制表符,一个制表符不能解决问题的时候要连续用2个,幸好这里两个就够了,如果超过16个字符,还得3个或以上制表符。于是明明很简单的print输出里面除了套个必须有的while以外还得来一对if-else分开整除了和有尾数的情况。为什么出题的人就这么喜欢超纲呢?????

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
import math
def mysqrt(a):
    x  = 10
    while True:
        y = (x + a/x) / 2
        if abs(y - x) < 1e-11:
            break
        x = y
    return y
def test_squre_root():
    print('a\tmysqrt(a)\tmath.sqrt(a)\tdiff')
    print('-\t---------\t------------\t----')
    a = 1
    while a < 10:
        if mysqrt(a)%1 == 0:
            print(str(float(a))+'\t'+str(float('%.11f'% mysqrt(a)))+'\t\t'+str(float('%.11f'% math.sqrt(a)))+'\t\t'+str(float('%.11e'% abs(mysqrt(a)-math.sqrt(a)))))
        else:
            print(str(float(a))+'\t'+str(float('%.11f'% mysqrt(a)))+'\t'+str(float('%.11f'% math.sqrt(a)))+'\t'+str(float('%.11e'% abs(mysqrt(a)-math.sqrt(a)))))
        a = a + 1
test_squre_root()
2020-04
12

被微信的暗黑模式亮瞎了

By xrspook @ 12:26:01 归类于: 烂日记

我不知道微信是怎么想的,更新了新版本之后,微信里出现了暗黑模式。之前我一直期待着能有暗黑模式,但是当我有了以后我会发现这也太刺眼了吧!微信的暗黑模式不能直接在微信里面取消掉,我要在手机的系统里选择不用暗黑模式,微信的普通模式才会回来。在系统里用暗黑模式很正常,毕竟系统绝大多数的东西都是可控制的,所以其实当系统推出安全模式的时候,绝大多数的东西都是经过调整的,所以不会让你觉得非常刺眼。我的红米Note7还没有暗黑模式之前,语记就已经有了暗黑模式。语记的暗黑模式看上去很舒服,一直以来我都觉得这很不错,相比于传统的浅色来说,暗黑模式语记爽歪歪。之所以可以这样,是因为语记录入界面的东西并不多,里面就只出现少数几个颜色,一切都很搭。准确来说,语记的录入界面就只有大概5个颜色。一个是深灰色,一个是更深一点的灰色,一个是白色,一个是浅紫色,还有一个是蓝色。蓝色只在语音输入的部分出现。

但是,微信里的暗黑模式,不是这样!语记的录入界面没有花花绿绿的头像,但微信有!纯白色里看到花花绿绿,和深灰色里看到花花绿绿完全是不一样的感觉!有些用户或公众号的头像PS得不好,还有白色底纹你知道吗?暗黑之下就恶心了!比如说广州日报公众号!最要命的是进入对话框的时候,微信居然还一直沿用着他们的荧光绿色,虽然这个荧光绿色已经没有普通模式下的荧光了,但还是非常刺眼你知道吗!这样很要命,白色里面用荧光绿色,感觉还行,但是黑色里面还用略微暗淡的荧光绿色,这不是亮瞎别人的狗眼吗?这样的对话框还叫人家怎么聊下去。那个经典荧光绿的对话框,你起码得把颜色在调暗一点才行啊!码农你码字的时候有在你的界面搞一坨这样的暗淡荧光绿吗!

同样让人觉得非常要命的还有公众号里的每篇文章背景也统一用上了深色。这样的设计是非常恐怖的!!!为什么会这么说?如果所有文字都是默认形式显示,那还好一点,但是,为了一些警醒的作用,某些字体是设置了颜色的,比如红色、蓝色,以及各种荧光色。设计者在撰写的时候,默认的背景是浅色的,为了卖萌装嫩所以他们用了粉嫩的浅色,但在暗黑模式之下,那根本是亮瞎人的节奏你们有想过吗?要避免这种恐怖状况发生,微信必须有套算法自动转换公众号文章里的自定义颜色,使之适配暗黑,但没有,现在根本没有!同样,让人觉得很突兀的还有不少表情包的背景颜色是白色的,因为正常来说,不经过特殊处理,文章的背景是白色的,但是,在暗黑模式之下,想一想某篇文章里有无数多个白色方框,那是一个什么感觉!

其实微信暗黑模式这个东西他们已经测试了好长时间了,我感觉从第一批小白鼠算起,已经过了起码半年,但是这一趟微信更新,全部人都默认用上以后,效果简直让人骂街。用上MIUI 11以后,我的系统也换上暗黑模式,虽然我的手机不是amoled屏幕,所以其实暗黑模式不能为我省电。系统设置界面,我早就已经是暗黑模式了,那个东西感觉还不错。微信自己的设置页面,暗黑的情况其实还行的,但是他们根本无法控制公众号里面花花绿绿的各种自定义颜色。所以,是不是要每个公众号自己其实也有一个设置选项,选择默认浅色还是深色为他的背景呢?他们往后的创作也要基于那个设定。在微信想出一个万全之策之前,起码他们要在设置里给我们留一个手动选择要不要暗黑模式的选项,而不是让我们一律跟随系统。

不作死就不会死啊微信!!!!!

2020-04
11

辗转相除法

By xrspook @ 20:51:51 归类于: 扮IT

题目是这样的

Exercise 5: The greatest common divisor (GCD) of a and b is the largest number that divides both of them with no remainder. One way to find the GCD of two numbers is based on the observation that if r is the remainder when a is divided by b, then gcd(a, b) = gcd(b, r). As a base case, we can use gcd(a, 0) = a. Write a function called gcd that takes parameters a and b and returns their greatest common divisor.

为什么从前我学最大公约数的时候就不是用这个方法呢?如果数字很大,这个应该很快吧,以前我们用的是质因数分解法,我一直没用过其它方法。这里用的是辗转相除法,也叫欧几里德算法,估计在外国这是基础算法,否则Excel也不会有GCD(A, B)这个求最大公约数的公式……

深感自己的无知……

1
2
3
4
5
6
7
8
9
10
11
12
def gcd(a, b): # 可以在Excel里用GCD(a, b)函数测试结果
    if b == 0:
        return a 
    else:
        return gcd(b, a%b) # b不断取代a,b不断被a%b取代
a = int(input('a is '))
b = int(input('b is '))
print(gcd(a, b))
# result
# a is 1024
# b is 480
# 32
2020-04
11

到底要做些什么

By xrspook @ 18:18:23 归类于: 烂日记

昨天我在完成Think Python 2的试题的时候,发现了一个非常严重的问题——我不知道那道题到底我在叫做什么!

造成这样,原因有很多方面。首先有可能因为翻译的人只是把单词从英文变成中文,语序没有调整。我不知道,他那样表述,他自己知不知道自己在说些什么,他真的能够根据他自己的描述把习题解答出来吗?我做翻译的时候,如果遇到一些我搞不懂的东西,我会在那里纠结,先是自己纠结,然后是找各种资料,还是不行的话,我会求助于别人。如果这些方法都没能解决问题的时候,可以的话,我会把那一段跳过。跳过这种事只能用在纯文字翻译的时候,视频翻译是根本不可能做到的。我会跟朋友商量出一个我们都觉得可行的方式,把那东西表达出来。有可能那不是作者的原意,但是按照我们的翻译,联系上下文,语义是通的,没有逻辑问题,没有理解缺陷。所以非常有可能看我翻译出来的东西,你会被我的思路带乱了,但非常有可能你察觉不到原来原文是另外一个意思。所以别人看过我的翻译后,觉得那很顺,至于好不好,我不敢包。

我遇到的Think Python 2的翻译不这样。于是就像我之前所描述的那样,我不知道翻译的人知不知道自己在表达些什么。当然,也存在这么一个可能性,翻译的人知道自己在说什么,在他的专业圈圈里,他们的话就是这么讲的。我跟他们不是一路的人,所以他们的脑洞我无法理解。这也就是虽然我们说的是同一种语言,受的也就是那几本教材的教育,但是我们想象出来的东西是不同的。

如果是翻译上的问题,大概我把原文看一看,也就懂了。之所以让我觉得那些东西羞涩难懂的另外原因是数学这种东西我已经放下好久了。虽然我每天都还在用的数学,但并不是那种高端的模式。我想都没想过用简单几句编程语言就能实现那些定理。那些我知道又或者不知道的定理。当我还是学生,仍然必须面对那些东西的时候,我都不知道原来定理是这么定义出来的。虽然我知道那东西怎么用。或者那说的是一种我已经很早就知道的东西,但表述的那个方式刚好跟我一直以来认识的的方式完全不同。情况就像是,虽然我们要到达的是同一个山峰,但是我之前是从南面上的,他们却是从北面上的,我从来都没走过那条路。所以,光从路上的风景,以及登山的难度,我根本想象不出原来那座山就是那座山。但我又知道那座山就是那座山,因为从坐标位置看来,山顶就是我熟悉的那个地方。过去好长时间,编程的时候老师都不会丢出定理,叫我们去实现。通常我遇到的题目是一些隐含着定理,但更多的看上去是现实的应用题。在没有抓手的时候,我莫名地觉得有点慌。

我要冷静沉着去应对。

2020-04
10

判断a是不是b的幂

By xrspook @ 23:59:43 归类于: 扮IT

Think Python 2第六章的某道原题是这样的:

Exercise 4: A number, a, is a power of b if it is divisible by b and a/b is a power of b. Write a function called is_power that takes parameters a and b and returns True if a is a power of b. Note: you will have to think about the base case.

版本A的中文翻译

练习4:一个数字a为b的权(power),如果a能够被b整除,并且a/b是b的权。写一个叫做is_power 的函数接收a和b作为形式参数,如果a是b的权就返回真。注意:要考虑好基准条件。

版本B的中文翻译

习题6-4:当数字a能被b整除,并且a/b是b的幂时,它就是b的幂。编写一个叫is_power的函数,接受两个参数a和b,并且当a是b的幂时返回True。注意:你必须要想好基础情形。

研究这道题到底在说什么,我纠结了起码1个小时。什么叫做权?幂来幂去,还有“它”,你真的知道那指代的是什么?我相信翻译这本书的人都一定是编程老手,但你们真的有琢磨过中文表述是否恰当吗?幸好我没买人民邮电出版社出版的Think Python 2中文版,貌似从某些页面看来,翻译也会让我非常吐槽。

还是直接看英文原文比较好懂,那段话我会这么翻译:

如果a能被b整除,且a/b是b的幂,那么a是b的幂(例如:2**3=8,即2的3次幂等于8,a=8, b=2)。编写一个名叫is_power的函数,以a和b为形式参数接收数据,如果a是b的幂,返回True。注意:要考虑好基准条件。

研究这道题在说什么研究了好长时间,随便输入几个显而易见的测试数据也挺顺利, 但要把情况想周全貌似很不简单。a == 0的情况有人想到了,但万一作死的写了b == 0呢!测试过好几个网友的编程,b == 0几乎全部挂了…… 我承认,这样测试过分了。

1
2
3
4
5
6
7
8
9
10
11
12
def is_power(a, b):
    if a == 0 or b == 0 or a%b != 0: # a和b的特殊情况先杀死
        return False
    elif a == 1 or a == b: 
        return True
    else:        
        return is_power(a/b, b) # 被除数a为0会死循环,除数b不能为0
a = 4 # int(input('a is '))
b = 2 # int(input('b is '))
print('a =', a)
print('b =', b)
print(is_power(a, b))
© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress