Python ';浮动';对象可以';不能解释为int,但转换为int不会产生任何输出

Python ';浮动';对象可以';不能解释为int,但转换为int不会产生任何输出,python,for-loop,int,Python,For Loop,Int,所以我试着测试一些东西是否是回文。这是我的密码: 此函数返回较大字符串前半部分的字符串。(“TEST”返回“TE”,“HELLO”返回“HE”) 此函数返回较大字符串后半部分的字符串。(“测试”返回“ST”,“你好”返回“LO”) 此函数用于翻转字符串。(“TEST”返回“TSET”,“HELLO”返回“OLLEH”) 这段代码接受两个3位数的乘积,并检查它是否是回文 for i in range(100,1000): for q in range(100,1000):

所以我试着测试一些东西是否是回文。这是我的密码:

此函数返回较大字符串前半部分的字符串。(“TEST”返回“TE”,“HELLO”返回“HE”)

此函数返回较大字符串后半部分的字符串。(“测试”返回“ST”,“你好”返回“LO”)

此函数用于翻转字符串。(“TEST”返回“TSET”,“HELLO”返回“OLLEH”)

这段代码接受两个3位数的乘积,并检查它是否是回文

for i in range(100,1000):
    for q in range(100,1000):
        a = i*q
        if takeStart(str(a)) == flip(takeEnd(str(a))):
            print(str(a))
运行此代码时,它会输出:

Traceback (most recent call last):
  File "[redacted]", line 39, in <module>
    if takeStart(str(a)) == flip(takeEnd(str(a))):
  File "[redacted]", line 14, in takeStart
    for i in range(a):
TypeError: 'float' object cannot be interpreted as an integer
这只是输出每一个数字。 我测试了每个方法,它们返回空字符串。(我假设),这就是为什么每个数字都通过了回文检查和打印。

首先,使用
range(int(a))
range(int(a),len(s))
将解决您的错误。正如Jon Clements指出的那样,只需使用
/
而不是
/
首先获取整数,就可以更轻松地解决这个问题。但不管怎样,这都不会造成任何问题

您的问题是
range
s以及Python中几乎所有相关的内容都是半开放的。因此,您的
takeStart
函数将返回所有值,这些值不包括中间点,即它为
HELLO
提供
H
TEST提供
T
BIGGERTEST提供
BIGG

只要去掉
a=…
行中的
-1
,就可以解决这个问题

然后它打印出一大堆输出行,所有的回文,我想这就是你打算做的

然而,你仍然不会得到任何奇数长度的回文。例如,使用“MADAM”,即使功能正确,
takeStart(s)
MA
takeEnd(s)
DAM
flip(takeEnd(s))
MAD
,这与
MAD
不同。即使您的函数工作正常,它们也无法解决问题。因此,您的设计和实现中都存在缺陷。如果你想一想,你应该想一想如何让它起作用

而且,一旦你这样做了,你应该意识到,
takeStart
takeEnd
可以简化很多。(提示:在哪些情况下,您真的需要以不同的方式对待奇数和偶数长度?)


当我们这样做的时候,这个:

foo = ""
for i in range(x, y):
    foo += s[i]
return foo
…只是一种冗长、缓慢且容易出错的写作方式:

return foo[x:y]
同样地,您的整个
翻转的
函数只是:

return s[::-1]
Pythons
range()
函数不支持浮点数,但支持numpys
arange()
功能是

要使用
arange()
函数,您需要安装并导入
numpy
软件包。 这里我们将使用
arange()
函数来生成一系列浮点数。
arange()
与内置的
range()
方法具有相同的签名。但是我们可以将浮点型参数作为参数传递给这个函数

import numpy
arange (start, stop, step)
在完整的代码示例中,如下所示:

from numpy import arange

print("Float range using NumPy arange():")

print("\nTest 1:")
for i in arange(0.0, 1.0, 0.1):
    print(i, end=', ')

您是使用Python2还是Python3运行的?作为补充说明,您使这比需要的困难得多。例如,不要一个接一个地循环索引,只需使用一个切片。看起来您使用的是Python 3,其中
a
由于除法操作而变成
float
。。。您可以使用
/
强制整数除法,但如果您想这样做,我没有想太多。。。正如@abarnet所提到的——有更简单的方法来实现这一点(看起来像是一个欧拉挑战…),因为你的观点很好(正常情况下)。我也会扔掉(与你刚才注意到的那些点有关),OP应该真的应该更多地考虑“Fiff-TealMead”,并让PuxEngt和PuxEnter的使用稍微……棒极了。我现在唯一的问题是在函数
flip
中将字符添加到
fliped
时出现越界异常。有什么方法可以让[x:y]的事情倒退吗?@JonClements:同意……不过如果他在写
之前先解决
HEL
/
LLO
问题,就更容易找到简化的方法。@CortneyReagle:是的,完全指定的切片看起来像
[start:end:step]
。默认值是(有效的)
0
len
、和
1
,但您可以指定任何您想要的内容,包括负数。@abarnert我已经有了一个take\u middle函数,但正如您所说,我将其分隔开,以便自己更容易解决问题
return foo[x:y]
return s[::-1]
import numpy
arange (start, stop, step)
from numpy import arange

print("Float range using NumPy arange():")

print("\nTest 1:")
for i in arange(0.0, 1.0, 0.1):
    print(i, end=', ')