2020-04
15

字符偏移加密

By xrspook @ 13:28:09 归类于: 扮IT

本来我根本没考虑字母以外的那些怎么办,测试过参考答案以后,发现原来字母以外的东西原始输出,于是我也这般弄了,等于再加一个是否字母的判断,折腾。不告诉人家怎么把字符合并成字符串,我就只好准备两个对象二人转连接。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
def rotate_word(something, n): # a-z: 97-122, A-Z: 65-90
    newletter1 = ''
    for letter in something:
        if ord(letter) < ord('A') or ord('Z') < ord(letter) < ord('a') or ord('z') < ord(letter):
            newletter2 = newletter1 + letter
        else:
            if ord(letter) + n > ord('z'):
                newletter2 = newletter1 + chr(ord(letter) + n - 26)
            elif ord('a') > ord(letter) + n > ord('Z'):
                newletter2 = newletter1 + chr(ord(letter) + n - 26)
            else:
                newletter2 = newletter1 + chr(ord(letter) + n)
        newletter1 = newletter2
    return newletter2
something = input('please write something: ')
n = int(input('how many shifts do you want: '))
print('before:', something)
print('after :', rotate_word(something, n))
# please write something: IBM
# how many shifts do you want: -1
# before: IBM
# after : HAL
# please write something: g858^h{O
# how many shifts do you want: 6
# before: g858^h{O
# after : m858^n{U
2020-04
14

一句秒杀一段话

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

还记得初中的时候数学老师跟我说初等数学比高等数学难多了,幸好,我这辈子暂时只学过高等数学,而且几乎都还给大学老师了……

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
# def first(word):
#     return word[0]
# def last(word):
#     return word[-1]
# def middle(word):
#     return word[1:-1]
# def is_palindrome(word):
#     if len(word) <= 1:
#         return True
#     elif first(word) != last(word):
#         return False
#     else:
#         return is_palindrome(middle(word))
def is_palindrome(word):
    return word[::-1] == word
word = input('word is ')
print(is_palindrome(word))
# word is qwerreq
# False
# word is poiuuiop
# True
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
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的翻译不这样。于是就像我之前所描述的那样,我不知道翻译的人知不知道自己在表达些什么。当然,也存在这么一个可能性,翻译的人知道自己在说什么,在他的专业圈圈里,他们的话就是这么讲的。我跟他们不是一路的人,所以他们的脑洞我无法理解。这也就是虽然我们说的是同一种语言,受的也就是那几本教材的教育,但是我们想象出来的东西是不同的。

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

我要冷静沉着去应对。

© 2004 - 2024 我的天 | Theme by xrspook | Power by WordPress