这是我的家庭作业的一部分,我接近最后的答案,但尚未完成。我需要编写一个函数,在列表中的位置1和5之间写入奇数。 我做了这样的事情: - 在文件域中我写了奇数的条件:
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
- 然后进行测试:
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])
- 在另一个名为userinterface的文件中,我写了这个:
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!")
- 当我运行整个项目时(我有更多要求,但其他一个是好的),并从[pos]到[pos]写奇数它说我
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(),我在那里打印需求。我错在哪里?
答案 0 :(得分:3)
Python的字符串以方法开头,如下所述:
https://docs.python.org/2/library/stdtypes.html
声明参数是
some_string.startswith(prefix, beginning, end) #where beginning and end are optional integers
并且您提供了前缀和空字符串(cmd.startswith(&#34;奇数来自&#34;,&#34;&#34;)
答案 1 :(得分:0)
我注意到的一些事情:
1)您可以将oddNumber
功能缩短为
def oddNumber(x):
return x%2
2)在测试中,您将函数名称testOdd_Number
重新绑定到某个列表,然后将其传递给oddNumber
函数。是上述相同的功能?然后它不会工作,因为这个函数需要传递一个整数。
不鼓励使用相同的名称来指代两个不同的东西。
实际上,我不知道你的测试代码做了什么或应该做什么。您是否传递了一个列表并期望oddNumber
对其进行修改?
3)你的自定义命令解析器看起来很奇怪,而且很脆弱。也许投资一个真正的解析器? 你应该解耦命令解析和实际计算。
正如brainovergrow指出的,还有你的错误,因为.startswith
不接受字符串作为第二个参数。
一些一般提示:
list(range(9))
代替硬编码[0,1,2,3,4,5,6,7,8]
filter
过滤给定列表的奇数:>>> list(filter(oddNumber, range(9)))
会产生[1, 3, 5, 7]
。list comprehensions
:[x for x in range(9) if x%2]
生成相同的内容。any()
和all()
有用。看看他们。