在列表python中写奇数

时间:2014-10-26 13:56:58

标签: python

这是我的家庭作业的一部分,我接近最后的答案,但尚未完成。我需要编写一个函数,在列表中的位置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(),我在那里打印需求。我错在哪里?

2 个答案:

答案 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()有用。看看他们。
  • 您的命名方案更一致,也不是pythonic。请阅读PEP8以获取样式指南。