python自學日記4 字串

2021-09-28 14:58:14 字數 4877 閱讀 7493

使用for迴圈遍歷字元

由於好久沒用for迴圈了,有點生疏,竟然寫成了下面**

fruit=

'banana'

len(fruit)

index=

0for index<

len(fruit)

:print

(fruit[index]

) index+=

1

file 「」, line 3

for index報錯是肯定的了,這是把for迴圈和while迴圈雜糅了,還是應該注意下for迴圈和while迴圈的區別

fruit=

'banana'

len(fruit)

index=

0while index<

len(fruit)

:print

(fruit[index]

) index+=

1

這個是能正常列印的,但是while確實不適合做遍歷迴圈,用for會更簡單一些

for char in fruit:

print

(char)

這裡記錄兩個replace和strip

#str.replace(old,new[,count]) 表示裡面的是可選,count,表示只替換前count次出現

word=

'banana'

word.replace(

'na'

,'se'

)word.replace(

'na'

,'se',1

)#只替換了第乙個na

#str.strip([chars]) 預設移除前後的空格,輸入chars則移除chars

' hello '

.strip(

)'www.example.com'

.strip(

'cmowz.'

)

#strip從開頭和結尾分別向中間篩選,遇到第乙個非chars則停止

a='#.......section 3.2.1 issue #32.......'

a.strip(

'.#!'

)#從此結果看出,中間的 .和#都沒有被移除,因為前面都有不是chars的部分

輸出結果是:『section 3.2.1 issue #32』

def

is_reverse

(word1,word2):if

len(word1)

!=len

(word2)

:return

false

i=0 j=

len(word2)-1

#注意需要減一,否則會超出下標範圍

while j>=0:

#注意要大於等於0,而不是大於0,否則會少比較乙個

if word1[i]

!=word2[j]

:return

false

i+=1 j-=

1return

true

is_reverse(

'stp'

,'pots'

)

def

is_palindrome

(word)

:if word==word[::

-1]:

return

true

return

false

is_palindrome(

'helleh'

)

題目中有些用一行把這個函式寫出來,說到一行我首先想到就是用lambda函式,思來想去寫出了如下**:

is_palindrome=

lambda word:

(true

if word==word[::

1],false

)is_palindrome(

'hello'

)

file "", line 2

is_palindrome=lambda word:(true if word==word[::1],false)

^syntaxerror: invalid syntax

結果就報錯了嘛,上網查了下lambda是不能用if語句的,後面有機會詳細補充下lambda的用法以及其和def函式的區別

編寫乙個函式rotate_word,接收乙個字串以及乙個整數作為引數,並返回乙個新字串,其中字母按照給定的整數值輪轉位置,『a』移動3個位置是』d』,『z』移動1個位置是』a』.

def

rotate_word

(word,num)

: new_word=

''for letter in word:

chr(

ord(letter)

+num)

)return new_word

rotate_word(

'a',

1)

attributeerror                            traceback (most recent call last)

6 return new_word

----> 7 rotate_word('a',1)

in rotate_word(word, num)

3 new_word=''

4 for letter in word:

6 return new_word

7 rotate_word('a',1)

def

rotate_word

(word,num)

: new_word=

''for letter in word:

new_word=new_word+

(chr

(ord

(letter)

+num)

)#這個位置改動

return new_word

rotate_word(

'z',

1)

但是輸出結果預期是』a』,但顯示的是』[』,這顯然是對unicode不熟悉,以及對題目沒有把握好,首先我測了下』a』和』a』的unicode值,為了能使z加1變成a,需要經過一些計算,先把乙個字母減掉初始值,如果是大寫的減a的值,然後加要移動的值,再加26,然後對26取餘,得出來的餘數再加初始值就得到最終字母的unicode了,然後再轉換為字母即可,這裡有個注意的地方,大寫對應初始是a,小寫對應初始是a。

def

rotate_word

(word,num)

: new_word=

''for letter in word:

if letter.isupper():

start=

ord(

'a')

#ord函式將字母轉換為unicode點的整數

elif letter.islower():

start=

ord(

'a')

#chr函式將數值編碼轉換為字元

new_word=new_word+

(chr((

ord(letter)

-start+num+26)

%26+start)

)return new_word

rotate_word(

'melon',-

10)

我這有個不好的毛病就是習慣把一系列運算寫到一行,拆解一下或許更容易看

下面是答案的**

import string

defrotate_letter

(letter, n)

:"""rotates a letter by n places. does not change other chars.

letter: single-letter string

n: int

returns: single-letter string

"""if letter.isupper():

start =

ord(

'a')

elif letter.islower():

start =

ord(

'a')

else

:return letter

c =ord(letter)

- start

i =(c + n)%26

+ start

return

chr(i)

defrotate_word

(word, n)

:"""rotates a word by n places.

word: string

n: integer

returns: string

"""res =

''for letter in word:

res += rotate_letter(letter, n)

return res

if __name__ ==

'__main__'

:print

(rotate_word(

'cheer',7

))

答案用了兩個函式,而且都寫好了文件字串,顯得比較容易讀,以後也應該學著寫文件字串。

Python自學筆記9 字串

1 字串就是字元的串,hello,word print hello,word hello,word print hello,word hello,word 可以看出單純的字串輸出,單引號和雙引號是一樣的。2 字串中有單引號或雙引號的,需要用另一種引號區分如。print i m a coder 或者p...

Python基礎4 字串

python字串是由數字 字母 下劃線組成的一串字元,我們可以使用引號來建立字串。如 str helloworld 在python中沒有char型別,單個字元也作為string使用 python的字串列表有2種取值順序 a.自左向右,預設索引從0開始,索引長度最長為字串長度 1 b.自右向左,預設索...

Python學習4 字串

1.python字串 python沒有字元,所有的都叫做字串,用單引號表示。2.python中字串,列表,元祖的相似性 1 訪問,都是用str i 來訪問第i 1個元素。2 切片,str i j 來擷取其中的一部分。3 拼接,若要向其中插入一部分,都要使用str i str2 str i 但是此過程...