好久没更了,主要是五一放假小摆一波
这些是字符串的基本操作,需要注明的一点是:
字符串本身并不支持单点修改,切记切记
这个题就是基础应用了
ID = input() #ID表示学号
########## Begin ##########
if len(ID) != 8: #如果学号不是8位
print('不是8位')
if ID.startswith('20') == False: #如果学号未以20开头
print('未以20开头')
if ID[2 : 4] != '18' and ID[2 : 4] != '19' and ID[2 : 4] != '20': #如果学号3、4位不正确
print('第3、4位不正确')
for i in ID: #对于学号中的每一位x
if (i in '0123456789') == False : #如果x不是数字字符
print(i, '不是数字')
########## End ##########
print('检查完成')
在进制转换中,我们需要频繁的使用 s t r str str函数和 e v a l eval eval函数,前者用来将数字变成字符串,后者来得到字符串中的值。
我们往往用 i n t int int来保存十进制,其余所有进制一律用 s t r i n g string string
########## Begin ##########
def DecToBin_int(d) :
b = ''
while d :
b = str(d % 2) + b
d = d // 2
return b
########## End ##########
d = int(input())
print(DecToBin_int(d))
这种处理负数的,我们中心思想可以总结为两步:变成正数需要的,处理正数到负数之间需要的。
这个题当然是容易的,如果是负数就是变成正数处理好了之后加个负号即可。
########## Begin ##########
def DecToBin_int(d) :
b = ''
while d :
b = str(d % 2) + b
d = d // 2
return b
def Dispose(x) :
if x > 0 :
return DecToBin_int(x)
elif x == 0 :
return 0
else :
return '-' + DecToBin_int(-x)
########## End ##########
d = int(input())
print(Dispose(d))
有点莫名其妙,突然就变成递归了
########## Begin ##########
def F(x) :
if x == 1 or x == 2 :
return 1
else :
return F(x - 1) + F(x - 2)
########## End ##########
n = int(input())
print(F(n))
这个题的想法是精彩的,我们也就顺便聊几句
空间换时间是容易理解的,就是把东西存起来,以此来节省重复计算需要的时间。就像这个题一样,我们搞一个数组,如果他被计算过,我们就是直接访问;如果没被计算过,就计算它。
那么有没有时间换空间呢?其实就是上面过程的逆过程,有些东西存起来太大了,但是算起来又比较容易,我们就每次用的时候重新算。
回到这个题。
我们理解了空间换时间之后,题目里的数组真的有必要吗?
你会发现,如果想计算 f i b n fib_n fibn,前 n − 1 n-1 n−1项的值你就必须都知道,否则 f n f_n fn的值就算不出来
那我们可以从第一项开始,一直算到第 n n n项。
但是,每次计算的时候只会用到 i − 1 , i − 2 i-1,i-2 i−1,i−2,其实我们可以只存三个数 f i b i − 1 , f i b i − 2 , f i b i fib_{i-1},fib_{i-2},fib_i fibi−1,fibi−2,fibi每次都更新这三个数即可,可以做到在只保存 3 3 3个数的情况下完成 O ( n ) O(n) O(n)时间内计算 f i b n fib_n fibn,具体的代码实现就交给读者了。
cache = [1, 1] #用于存储已算出的项,第i号元素对应第i+1项,最开始时存放了第1、2项
def F(n):
if len(cache)>=n: #先到列表中查询,若列表中包含了F(n)
return cache[n-1] #则直接返回F(n)
else: #否则计算F(n)
Fn = F(n-1)+F(n-2) #计算F(n)的方法与之前相同
cache.append(Fn) #将计算结果存入列表,以便后续直接使用
return Fn #返回计算结果
n = int(input())
print(F(n))
没啥好说的,一个递归就行
########## Begin ##########
def f(x) :
if x == 1:
return '1'
else :
return f(x // 2) + str(x % 2)
########## End ##########
d = int(input())
print(f(d))
跟上面那对儿一样,就是加一个处理负数和零
def f(d):
if d==1:
return '1'
else:
return f(d//2)+str(d%2)
########## Begin ##########
def DecToBin_int(x) :
if x < 0 :
return '-' + f(-x)
if x == 0 :
return '0'
return f(x)
########## End ##########
d = int(input())
print(DecToBin_int(d))
这个题其实就是 P y t h o n Python Python的强大之处。它会把你可能用到的所有函数都封装好,这就是典型的空间换时间。
d = int(input())
########## Begin ##########
b = bin(d)
b = b.replace('0b', '')
########## End ##########
print(b)
这个 0 b 0b 0b不是偶然现象,只要使用这个 b i n bin bin函数就会这样子,之后我们在用这种方式转换进制的时候也要记得去掉。