簡體   English   中英

為什么我的代碼不適用於所有回文?

[英]Why won't my code work for all palindromes?

我一直在寫一些代碼來取一個字符串並檢查它是否是回文。 除了“axya”或以相同字母開頭和結尾的任何其他非回文外,它似乎適用於大多數事物。 我究竟做錯了什么?

代碼是用python編寫的。

str = str.replace(' ','')
str = list(str)
var_a = 0
var_b = 0
var_c = 0

while var_a < len(str) - 1:
  var_b = str[var_a]
  if len(str) - var_a == len(str) - 1:
    var_c = str[len(str) -2]
  else:
    if len(str) - var_a < len(str) - 1:
      var_a = var_a + 1
      var_c = str[len(str) - var_a]
    else:
      var_c = str[len(str) - 1]\
  if var_b == var_c:
    return 'true'
  else:
    return 'false'
  var_a += 1

注意這部分:

while var_a < len(str) - 1:
  # ...
  if var_b == var_c:
    return 'true'
  else:
    return 'false'

函數返回無論var_b等於或等於var_c ,所以循環只迭代一次,這就是為什么它只測試開始和結束字符。 如果它們是相同的,你應該繼續循環測試其余的字符。

雖然肯定有辦法用循環來做到這一點,但是沒有必要這樣做:

>>> a = "racecar"
>>> a == a[::-1]
True
>>> b = "axya"
>>> b == b[::-1]
False
>>> 

[]是字符串和列表的優秀運算符。 string[::-1]將返回反轉的字符串。 檢查這是否與字符串前進相同,你有一個回文!

實際上回答你的問題:P

在檢查所有信件之前,你正在返回'false'

  if var_b == var_c:
    return 'true'
  else:
    return 'false'

應該更像是:

# if these letters are different, the word is not a palindrome
if var_b != var_c:
  return 'false'
else:
  pass # keep looping

你的程序不應該返回true,直到循環從var_a到達終點結束,而不會發現任何差異。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM