1

isPalindrome(x)こんにちは、百の桁が一の桁と等しい場合は True を返し、それ以外の場合は false を返す 3 桁の整数のPython 関数に取り組んでいます。ここで文字列を使用する必要があることはわかっています。これが私が持っているものです。

def isPal(x):
    if str(1) == str(3):
        return "True"

    else:
        return "False"

これstr(0)は単位の位でstr(2)、百の位です。私が得ているのはFalseだけですか?ありがとう!

4

11 に答える 11

6

配列アクセスは[]ではなくで行われます()。また、数百と単位を探している場合は、配列のインデックスが 0 であることを思い出してください。コードの短縮バージョンを次に示します。

def is_pal(num):
    return num[0] == num[2]

>>> is_pal('123')
False
>>> is_pal('323')
True

数値をパラメーターとして受け取り、それを文字列に変換することができます。

def is_pal(num):
    x = str(num)
    return x[0] == x[2]

文字列がその逆に等しいかどうかを簡単に確認できることに注意してください。これは、任意の桁数で機能します。

>>> x = '12321'
>>> x == x[::-1]
True
于 2012-07-31T13:40:31.100 に答える
3

あなたの問題はそれとstr(1) == '1'ですstr(3) == '3'。また、実際の値と値を使用する代わりに、文字列値を読み取っ'True'て返します。'False'TrueFalse

もっと簡単な関数を提案させてください。

def isPal(x):
    s = str(x)          # convert int to str
    return s == s[::-1] # return True if s is equal to its reverse

s[::-1]文字列の逆を作成します。例:'foo'[::-1] == 'oof'。これは、拡張スライス表記のために機能します。

于 2012-07-31T13:44:45.450 に答える
3

str(1)整数値 1 の文字列を作成します。これは整数値 3 の文字列値と等しくないため、常に False になります。

「True」と「False」の文字列ではなく、Trueandを返す必要があります...False

これは、上記を考慮して目指しているものです...(任意の長さで機能します)

def pal(num):
    forward = str(num)
    backward = ''.join(reversed(forward))
    return forward == backward
于 2012-07-31T13:42:37.897 に答える
1

str()値をにキャストしますstr。各キャラクターにアクセスしたい。いくつかの異なる手法をベンチマークすることをお勧めします。

>>> t1 = timeit.Timer(stmt="""\
... def isPal(x):
...     return x//100 == x%10
... isPal(434)
... isPal(438)
... """)
>>> t2 = timeit.Timer(stmt="""\
... def isPal(x):
...     return str(x)[0] == str(x)[2]
... isPal(434)
... isPal(438)
... """)
>>> print "%.2f usec/pass" % (1000000 * t1.timeit(number=100000)/100000)
0.97 usec/pass
>>> print "%.2f usec/pass" % (1000000 * t2.timeit(number=100000)/100000)
2.04 usec/pass

したがって、modテクニックは機能しているように見えます。

def isPal(x):
    return x//100 == x%10
于 2012-07-31T13:44:56.520 に答える
1

除算とモジュロがうまくいくのに、なぜ人々が文字列のアイデアに固執しているのかわかりません:

def isPal(x):
    return (x/100)%10 == x%10

数字が999(OPが述べたように3桁)以下の場合は、次のように簡略化されます

def isPal(x):
    return x/100 == x%10
于 2012-07-31T13:48:53.030 に答える
0

Python構文をまだ勉強する必要があるようです

これがあなたが必要とするものを達成する方法です:

>>> def isPal(x):
...     x_as_str = str(x)
...     if len(x_as_str) != 3:
...         raise Exception("{} is not of length 3".format(x))
...     return x_as_str[0] == x_as_str[2]
...
>>> isPal(42)
Traceback (most recent call last):
  File "<input>", line 1, in <module>
  File "<input>", line 4, in isPal
Exception: 42 is not of length 3
>>> isPal(420)
False
>>> isPal(424)
True
于 2012-07-31T13:43:45.640 に答える
0

str(1)数値の文字列表現を与えるだけです1

>>> x = 357
>>> str(1)
'1'

必要なのは、の文字​​列表現の最初のインデックスxです。

>>> x = 357
>>> str(x)    #string representation of x
'357'
>>> str(x)[0] #first index of that
'3'
>>> str(x)[2] #third index of that
'7'
>>> str(x)[0]==str(x)[2] #compare 1st and last
False
>>> x = 525
>>> str(x)[0]==str(x)[2] #compare 1st and last
True
于 2012-07-31T13:41:07.003 に答える
0

1 番と 3 番を比較しますが、入力変数のインデックスを比較する必要はありません。

x = 1000
def isPal(x):
    return str(x[-1]) == str(x[-3]):
于 2012-07-31T13:41:29.387 に答える
0

str(x)あなたがそれに渡すものの文字列値を提供するので、あなたの場合は string"1"または string"3"です。しかし、実際に必要なのは、指定された番号の 1 桁目と 3 桁目にアクセスすることです。したがって、最初にその数値を文字列に変換し (たとえば、str(num) を使用)、文字列のインデックスが 1 ではなく 0 で始まることを考慮する必要があります。したがって、作業コードは次のようになります。

def isPal(x):
  if str(x)[0] == str(x)[2]:
    return 'true'
  else:
    return 'false'

出力:

> isPal(101)
true
> isPal (203)
false
于 2012-07-31T13:40:43.107 に答える
0

これに対するより小さな解決策は次のとおりです。

def isPalindrome(x):    
    return str(x) == str(x)[::-1]

これは、単語と整数値に対して機能します。

于 2016-06-06T11:28:50.263 に答える