2014-10-26 55 views
1

這是我家庭作業的一部分,我接近最終答案但還不完全。我需要編寫一個函數,將位置1和5之間的奇數寫入列表中。 我做這樣的事情: -in我寫奇數條件的文件域名:在列表中編寫奇數python

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]) 

- 和在其他文件中命名用戶接口我寫的這樣的:

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()函數,我打印requirements.Where我錯了?

+0

'cmd [:cmd.find(「」)]'如果在'cmd'中找不到''''''會出錯。 – khelwood 2014-10-26 14:04:23

回答

3

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( 「從奇」, 「」))

+0

準確地說,這些不是(僅)整數,而是分片索引,因此是錯誤消息。 – georg 2014-10-26 14:17:27

+0

謝謝你的回答。 – Boolean 2014-10-26 19:33:55

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獲取樣式指南。
+0

謝謝您的回答。我發現了錯誤。也感謝提示。 – Boolean 2014-10-26 19:34:59