溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶服務(wù)條款》

如何利用Python判斷整數(shù)是否是回文數(shù)

發(fā)布時(shí)間:2022-05-18 11:54:44 來源:億速云 閱讀:463 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要介紹“如何利用Python判斷整數(shù)是否是回文數(shù)”,在日常操作中,相信很多人在如何利用Python判斷整數(shù)是否是回文數(shù)問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對(duì)大家解答”如何利用Python判斷整數(shù)是否是回文數(shù)”的疑惑有所幫助!接下來,請(qǐng)跟著小編一起來學(xué)習(xí)吧!

方法一:逐位判斷

原理: 用一個(gè)while循環(huán),將一個(gè)數(shù)每次都取出首位和末位,判斷是否相等,只要有一次不相等退出即可。

回文數(shù)的判斷條件:加入一個(gè)變量位數(shù),如果這個(gè)數(shù)是奇數(shù),位數(shù)為1時(shí),即最中間那一位數(shù),此時(shí)退出即可,同理,偶數(shù),位數(shù)為0時(shí),退出。

問題:

  • 如何判斷位數(shù)

  • 如何逐位取值

優(yōu)點(diǎn): 思路簡單

解決:

判斷位數(shù)下面程序即可

	y=x
    weishu=0
    while x:
        weishu+=1
        x=x//10

先將判斷的x賦值給y,當(dāng)x不為0時(shí),表明現(xiàn)在x還有位數(shù),位數(shù)+1,x/10減少一位,但要記住,用地板除(//)直接得到int整數(shù),否則用/會(huì)出現(xiàn)浮點(diǎn)數(shù)

逐位取值:

		a=y//(10**(weishu-1))
        b=y%10
        if a!=b:
            print("不是回文數(shù)。")
            break
        weishu-=2
        y=y//10
        y=y%(10**weishu)

取得首位只要地板除以相應(yīng)的位數(shù),把首位后面的數(shù)舍去,比如一個(gè)五位數(shù),地板除10000(10的4次方,所以是位數(shù)-1),就會(huì)得到首位,末尾比較簡單,只要對(duì)10取模得到余數(shù)就是各位,a是首位,b是末位。

判斷首尾相等后,先將位數(shù)-2,然后將首尾的數(shù)字都給刪掉,刪掉末位//10即可,刪掉首位:如果是五位數(shù),現(xiàn)在刪掉末位后是四位數(shù),地板與1000取模即可

然后是判斷如何判斷退出循環(huán)

如上文,判斷位數(shù)最后的值即可

最后判斷負(fù)數(shù)和個(gè)位數(shù)即可

實(shí)現(xiàn)代碼如下:

x=int(input("請(qǐng)輸入一個(gè)整數(shù):"))
if x<0:
    print("不是回文數(shù)。")
elif not x//10:
    print("是回文數(shù)。")
else:
    y=x
    weishu=0
    while x:
        weishu+=1
        x=x//10
    while True:
        a=y//(10**(weishu-1))
        b=y%10
        if a!=b:
            print("不是回文數(shù)。")
            break
        weishu-=2
        if weishu==1:
            print("是回文數(shù)。")
            break
        if not weishu:
            print("是回文數(shù)。")
            break
        y=y//10
        y=y%(10**weishu)

方法二:得到顛倒后的數(shù)判斷

原理: 每一個(gè)回文數(shù)從中間切開前后都是相等的,所以得到一個(gè)回文數(shù)后面的數(shù)與前面的數(shù)比較即可

那么問題來了,如果是奇位數(shù),怎么判斷?

解決: 只要最后得到的前面的數(shù)或者后面的數(shù)除去末位數(shù)與另一個(gè)相等即可,因?yàn)槠嫖粩?shù)中間的數(shù)不用管,其他的數(shù)相等就可以,所以刪去末位判斷是否相等

難點(diǎn): 如何得到后面的數(shù)?

每次將后面的數(shù)乘上10,然后加上前面數(shù)的末位,前面的數(shù)地板除10消除末位即可

如何判斷后面的數(shù)已經(jīng)取好了,即退出循環(huán)的判斷條件是:

就是當(dāng)后面的數(shù)已經(jīng)大于等于前面的數(shù)就可以退出循環(huán)了

優(yōu)點(diǎn): 代碼簡單

實(shí)現(xiàn)程序如下:

	hou=0
    while(x>hou):
        hou=hou*10+x%10
        x//=10
    if x==hou or x==(hou//10):
        print("是回文數(shù)。")
    else:
        print("不是回文數(shù)。")

最后判斷負(fù)數(shù)和末位是0但不是0的數(shù),他們一定不是回文數(shù),因?yàn)殚_頭不能是0

個(gè)位數(shù)此程序能夠判斷,后面的數(shù)就是此個(gè)位數(shù),地板除10之后和前面一樣都是10,即回文數(shù)

最終程序:

x=int(input("請(qǐng)輸入一個(gè)整數(shù):"))
if x<0 or(x%10==0 and x!=0):
    print("不是回文數(shù)。")
elif not x//10:
    print("不是回文數(shù)。")
else:
    hou=0
    while(x>hou):
        hou=hou*10+x%10
        x//=10
    if x==hou or x==(hou//10):
        print("是回文數(shù)。")
    else:
        print("不是回文數(shù)。")

方法三:字符串處理

原理: 字符串其實(shí)是序列,我們只要將字符串倒過來判斷是否和原字符串相等就可以了

反轉(zhuǎn)可以用x[::-1]

實(shí)現(xiàn)代碼如下

x=input("請(qǐng)輸入一個(gè)整數(shù):")
if x==x[::-1]:
    print("是回文數(shù)。")
else:
    print("不是回文數(shù)。")

要是你說還能不能更高級(jí)一點(diǎn),還可以用條件表達(dá)式這樣寫

x=input("請(qǐng)輸入一個(gè)整數(shù):")
print("是回文數(shù)。") if x==x[::-1] else print("不是回文數(shù)。")

但是如果他給你一個(gè)09890也會(huì)報(bào)錯(cuò),具體解決可以先轉(zhuǎn)化為int,再轉(zhuǎn)化為str

最終成品:

x=int(input("請(qǐng)輸入一個(gè)正整數(shù):"))
x=str(x)
print("是回文數(shù)。") if x==x[::-1] else print("不是回文數(shù)。")

到此,關(guān)于“如何利用Python判斷整數(shù)是否是回文數(shù)”的學(xué)習(xí)就結(jié)束了,希望能夠解決大家的疑惑。理論與實(shí)踐的搭配能更好的幫助大家學(xué)習(xí),快去試試吧!若想繼續(xù)學(xué)習(xí)更多相關(guān)知識(shí),請(qǐng)繼續(xù)關(guān)注億速云網(wǎng)站,小編會(huì)繼續(xù)努力為大家?guī)砀鄬?shí)用的文章!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

AI