首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何使用Python逻辑检查回文

如何使用Python逻辑检查回文
EN

Stack Overflow用户
提问于 2013-06-27 06:05:35
回答 33查看 194.9K关注 0票数 50

我正在尝试用Python检查回文。我的代码是非常密集的for-loop。

在我看来,当人们从C语言转向Python时,最大的错误是试图使用Python实现C逻辑,这会使程序运行缓慢,而且没有充分利用这门语言。

我在this网站上看到了。搜索"C-style for",即Python没有C-style for循环。可能已经过时了,但我将其解释为Python有自己的方法。

我试着四处看看,我找不到太多关于这方面的最新(Python 3)建议。如何在不使用for循环的情况下,在Python中解决回文挑战?

我已经在课堂上用C语言完成了这项工作,但我个人想用Python来完成这项工作。问题来自Euler Project,顺便说一句,这是一个很棒的网站。

def isPalindrome(n):
    lst = [int(n) for n in str(n)]
    l=len(lst)
    if l==0 || l==1:
        return True
    elif len(lst)%2==0:
        for k in range (l)
        #####
    else:
        while (k<=((l-1)/2)):
            if (list[]):
                #####   

for i in range (999, 100, -1):
    for j in range (999,100, -1):
        if isPalindrome(i*j):
            print(i*j)
            break

我这里遗漏了很多代码。这五个散列只是对我自己的提醒。

具体问题:

在C中,我会做一个循环,比较索引0和索引max,然后用max-1来索引0+1,直到有什么东西。如何在Python语言中最好地做到这一点?我的循环(在范围(999,100,-1)中,这是一个糟糕的方式在Python语言中做到这一点吗?

  1. 有任何好的建议,好的网站,或资源的人在我的位置?我不是程序员,我也不想成为程序员,我只是想学到足够多的东西,这样当我写学士学位论文(电气工程)时,我就不必在试图在项目中获得好结果的同时学习一种适用的编程语言。“如何从基本的C到Python语言的伟大应用”,诸如此类的东西。
  2. 任何特定的代码来为这个问题做出一个伟大的解决方案也将受到感谢,我需要学习好的算法。我设想了3种情况。如果值是零或一位数,如果它是奇数长度,如果它是偶数长度。我计划为循环写代码……

PS:问题是:找到两个3位整数的最高值乘积,也是一个回文。

EN

回答 33

Stack Overflow用户

回答已采纳

发布于 2013-06-27 06:08:00

一种确定给定值是否为回文的pythonic方法:

str(n) == str(n)[::-1]

解释:

我们正在检查n

  • The的字符串表示形式是否等于n的倒置字符串表示形式。[::-1]

  • 负责对字符串进行反转,之后,我们使用==

比较是否相等

票数 197
EN

Stack Overflow用户

发布于 2013-06-27 06:11:17

对于相当不直观的[::-1]语法,另一种选择是:

>>> test = "abcba"
>>> test == ''.join(reversed(test))
True

reversed函数返回test中字符的相反顺序。

''.join()再次将这些字符连接在一起,中间没有任何东西。

票数 30
EN

Stack Overflow用户

发布于 2016-06-13 13:23:42

为了记录,对于那些寻找更多算法方法来验证给定字符串是否为回文的人来说,有两种方法可以实现相同的目的(使用whilefor循环):

def is_palindrome(word):

    letters = list(word)    
    is_palindrome = True
    i = 0

    while len(letters) > 0 and is_palindrome:       
        if letters[0] != letters[(len(letters) - 1)]:
            is_palindrome = False
        else:
            letters.pop(0)
            if len(letters) > 0:
                letters.pop((len(letters) - 1))

    return is_palindrome

And....the第二个:

def is_palindrome(word):

    letters = list(word)
    is_palindrome = True

    for letter in letters:
        if letter == letters[-1]:
            letters.pop(-1)
        else:
            is_palindrome = False
            break

    return is_palindrome
票数 13
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17331290

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档