DrO*_*ine 43 python string palindrome
我正在尝试使用Python检查回文.我的代码非常for密集.
在我看来,从C到Python的最大错误是尝试使用Python实现C逻辑,这使得事情运行缓慢,并且它只是没有充分利用语言.
我在这个网站上看到了.搜索"C-style for",Python没有C风格的循环.可能会过时,但我将其解释为Python有自己的方法.
我试过四处寻找,我找不到最新的(Python 3)建议.如何在不使用for循环的情况下解决Python中的回文挑战?
我在课堂上用C语言完成了这个,但是我想在Python中以个人为基础.问题来自欧拉项目,顺便说一下,伟大的网站.
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
Run Code Online (Sandbox Code Playgroud)
我在这里遗漏了很多代码.五个哈希只是我自己的提醒.
具体问题:
在C中,我会创建一个for循环,将索引0与索引max进行比较,然后使用max-1索引0 + 1,直到某事为止.如何在Python中做到最好?
我的for循环(在范围(999,100,-1)中,这是用Python做错的方法吗?
有没有人对我的职位有任何好的建议,好的网站或资源?我不是程序员,我不想成为一名程序员,我只想学习足够的东西,这样当我写完学士学位论文(电子工程)时,我不必同时学习适用的编程语言在项目中取得好成绩."如何从基本的C转到Python的伟大应用",那种事情.
任何特定的代码都可以很好地解决这个问题,我需要学习好的算法.我正在设想3种情况.如果值为零或单个数字,如果它是奇数长度,如果它是偶数长度.我打算为循环写...
PS:问题是:找到两个3位整数的最高值乘积,它也是一个回文.
Ósc*_*pez 171
确定给定值是否为回文的pythonic方法:
str(n) == str(n)[::-1]
Run Code Online (Sandbox Code Playgroud)
说明:
n等于反向字符串表示n[::-1]片采用反相字符串的护理==Ric*_*dle 25
这种相当不直观的[::-1]语法的替代方法是:
>>> test = "abcba"
>>> test == ''.join(reversed(test))
True
Run Code Online (Sandbox Code Playgroud)
该reversed函数返回相反的字符序列test.
''.join() 将这些角色再次连接起来,两者之间没有任何内容
Jor*_*dez 10
只是为了记录,以及那些寻找更多算法来验证给定字符串是否为回文的人,有两种方法可以实现相同的(使用while和for循环):
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
Run Code Online (Sandbox Code Playgroud)
而......第二个:
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
Run Code Online (Sandbox Code Playgroud)
python的优秀部分是你可以用它做的事情.您不必为字符串使用索引.
以下将工作(使用切片)
def palindrome(n):
return n == n[::-1]
Run Code Online (Sandbox Code Playgroud)
它的作用是简单地反转n,并检查它们是否相等. n[::-1]反转n(-1意味着递减)
"2)我的for循环(在范围(999,100,-1)中,这是用Python做错的方法吗?"
关于上面,你想使用xrange而不是范围(因为范围将创建一个实际列表,而xrange是一个快速生成器)
我对问题3的看法
我在Python之前学过C,我只是阅读文档,并使用控制台玩它.(以及通过做项目欧拉问题:)
如果是回文,代码下面将打印0,否则将打印-1
优化代码
word = "nepalapen"
is_palindrome = word.find(word[::-1])
print is_palindrome
Run Code Online (Sandbox Code Playgroud)
输出: 0
word = "nepalapend"
is_palindrome = word.find(word[::-1])
print is_palindrome
Run Code Online (Sandbox Code Playgroud)
输出: -1
搜索字符串时,返回的值是字符串起始位置的值。
因此,当您执行word.find(word[::-1])此操作时,它会nepalapen在某个位置找到0并[::-1]反转nepalapen,并且仍然nepalapen在该位置,0因此0将其返回。
现在,当我们搜索nepalapend,然后扭转nepalapend到dnepalapen它呈现一个FALSE声明nepalapend被逆转dnepalapen导致搜索无法找到nepalapend导致价值的-1指示字符串没有找到。
如果回文则打印真,否则打印假
word = "nepalapen"
print(word[::-1]==word[::1])
Run Code Online (Sandbox Code Playgroud)
输出: TRUE