Python ';浮动';对象可以';不能解释为int,但转换为int不会产生任何输出
所以我试着测试一些东西是否是回文。这是我的密码: 此函数返回较大字符串前半部分的字符串。(“TEST”返回“TE”,“HELLO”返回“HE”) 此函数返回较大字符串后半部分的字符串。(“测试”返回“ST”,“你好”返回“LO”) 此函数用于翻转字符串。(“TEST”返回“TSET”,“HELLO”返回“OLLEH”) 这段代码接受两个3位数的乘积,并检查它是否是回文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):
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]
Pythonsrange()
函数不支持浮点数,但支持numpysarange()
功能是
要使用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=', ')