当前位置: 首页 > 后端技术 > Python

Python自学日记4串

时间:2023-03-26 01:09:09 Python

1.for循环使用for循环遍历字符由于很久没用for循环,有点生疏了,所以其实写了下面的代码fruit='banana'len(fruit)index=0forindex",line3forindex=0:#注意必须是大于等于0,不大于0,否则少一次比较ifword1[i]!=word2[j]:returnFalsei+=1j-=1returnTrueis_reverse('stp','pots')4.Trouble之前写过回文函数比较,这次通过[::-1]defis_palindrome(word):ifword==word[::-1]:returnTruereturnFalseis_palindrome('helleh')标题中有人把这个函数写成一行。说到一行,我首先想到的是使用lambda函数。想了想,写了下面的代码:line2is_palindrome=lambdaword:(Trueifword==word[::1],False)^SyntaxError:invalidsyntaxresultsinerror嗯,网上查了一下,lambdas不能用if语句。后面有机会再详细补充lambdas的用法以及和def函数的区别。5.练习:ROT13字符串旋转加密写一个函数rotate_word,接收一个字符串和一个Integer作为参数,返回一个新的字符串,其中的字母按照给定的整数值旋转,'A'移动3个位置就是'D','Z'移动1个位置是'A'.defrotate_word(word,num):new_word=''forletterinword:new_word.append(chr(ord(letter)+num))returnnew_wordrotate_word('a',1)AttributeErrorTraceback(最近调用last)in5new_word.append(chr(ord(letter)+num))6returnnew_word---->7rotate_word('a',1)inrotate_word(word,num)3new_word=''4forletterinword:---->5new_word.append(chr(ord(letter)+num))6returnnew_word7rotate_word('a',1)AttributeError:'str'objecthasnoattribute'append'第一次写入直接如上,报错提示str不能使用append,改成'+'defrotate_word(word,num):new_word=''forletterinword:new_word=new_word+(chr(ord(letter)+num))#这个位置改了returnnew_wordrotate_word('Z',1)但是输出结果应该是'A',但是却显示'[',显然不熟悉Unicode,我也不确定关于这个话题。首先,我测试了'a'和'A'的Unicode值,为了让Z加1变成A,需要进行一些计算,先从初始值减去一个字母,如果是大写,减去A的值,然后加上要移动的值,加上26,然后取26的余数,余数加上初始值得到最后一个字母的Unicode,再转成一个字母。这里有一个注意大写对应首字母A,小写对应首字母adefrotate_word(word,num):new_word=''forletterinword:ifletter.isupper():start=ord('A')#ord函数将字母转换为Unicode点的整数elifletter.islower():start=ord('a')#chr函数将数字代码转换成字符new_word=new_word+(chr((ord(letter)-start+num+26)%26+start))returnnew_wordrotate_word('melon',-10)I有在一行中写一系列操作的坏习惯。反汇编起来可能更容易,看下面的代码就是答案。importstringdefrotate_letter(letter,n):"""将字母旋转n位。不改变其他字符。letter:单字母字符串n:int返回:单字母字符串"""ifletter.isupper():start=ord('A')elifletter.islower():start=ord('a')else:返回字母c=ord(letter)-starti=(c+n)%26+startreturnchr(i)defrotate_word(word,n):"""将单词旋转n位。word:stringn:integerReturns:string"""res=''forletterinword:res+=rotate_letter(letter,n)ret