这是我家庭作业的一部分,我已经接近最终答案了,但还不是很清楚。我需要编写一个函数,将奇数写在列表中位置1和5之间。我做了这样的事情:-in一个文件域,我写下奇数的条件:
def oddNumber(x):
"""
this instruction help us to write the odd numbers from the positions specificated
input: x-number
output:-True if the number is odd
-False otherwise
"""
if x % 2==1:
return True
else:
return False-then测试:
def testOdd_Number():
testOdd_Number=[0,1,2,3,4,5,6,7,8]
oddNumber(testOdd_Number,0,6)
assert (testOdd_Number==[1,3,5])
oddNumber(testOdd_Number,0,3)
assert (testOdd_Number==[3])在另一个名为-and的文件中,我写道:
elif(cmd.startswith("odd from ", "")):
try:
cmd=cmd.replace("odd from ", "")
cmd=cmd.replace("to ", "")
i=int(cmd[:cmd.find(" ")])
j=int(cmd[cmd.find(" "):])
if (i>=len(NumberList) or i>j or j>=len(NumberList) or i<0 or j<0):
print("Invalid value(s).")
else:
for m in range(i-1,j):
if oddNumber(NumberList[m]):
print (NumberList[m])
except:
print("Error!") 我运行整个项目(我有更多的要求,但其他的都很好),并写-when从位置到位置它说我
Traceback (most recent call last):
File "C:\Users\Adina\My Documents\LiClipse Workspace\P1\userinterface.py", line 94, in <module>
run()
File "C:\Users\Adina\My Documents\LiClipse Workspace\P1\userinterface.py", line 77, in run
elif(cmd.startswith("odd from ", "")):
TypeError: slice indices must be integers or None or have an __index__ method我忘了说我还有一个函数main(),在那里我打印requirements.Where,我错了吗?
发布于 2014-10-26 22:07:15
Python的字符串startswith方法,描述如下:
https://docs.python.org/2/library/stdtypes.html
说明参数是
some_string.startswith(prefix, beginning, end) #where beginning and end are optional integers并且您提供了前缀和空字符串( cmd.startswith("odd from ","") )
发布于 2014-10-26 23:44:49
我注意到了一些事情:
1)您可以将oddNumber函数缩短为
def oddNumber(x):
return x%22)在测试中,将名为testOdd_Number的函数重新绑定到某个列表,然后将其传递给oddNumber函数。这是与上面描述的相同的函数吗?那么它就不能工作了,因为这个函数需要传递一个整数。
不鼓励使用相同的名称来指代两个不同的事物。实际上,我不知道你的测试代码做什么或者应该做什么。您是否正在传递一个列表,并期望oddNumber对其进行适当的修改?
3)您的自定义命令解析器看起来...奇怪,脆弱。也许投资一个真正的解析器?你应该将命令解析和实际计算解耦。
正如brainovergrow指出的,这也是你的错误,因为.startswith不接受字符串作为第二个参数。
一些一般性的提示:
[0,1,2,3,4,5,6,7,8]
list(range(9))代替硬编码您可以使用filter来过滤给定列表的奇数:>>> list(filter(oddNumber, range(9)))结果[1, 3, 5, 7].
>>> list(filter(oddNumber, range(9))):[x for x in range(9) if x%2]结果相同。
,
https://stackoverflow.com/questions/26573739
复制相似问题