2012-10-08 83 views
0

所以我正在製作一個視頻播放器,可以根據一些加權概率自動選擇下一個視頻。視頻進入時,它會從csv中讀取所有元標記,然後在概率滾動後查找下一個匹配項。我將所有各種元標籤檢查程序與if語句和for循環一起編程,但客戶端只是要求爲每個過濾器設置打開和關閉開關,而且我無法圍繞最有效的方式接近問題。繞過in-line if語句? Python

我還是比較環保的Python,所以我想在嘗試做最糟糕的事情之前,我會問。我想知道(如果沒有辦法做到這一點,我還不知道),如果在打開和關閉開關中斷並更改變量之前更好,例如打開開關時,每種可能顏色的列表都會分配給變量顏色,以便它始終通過,並且沒有視頻從顏色中被拒絕,從而保持相同的基本格式。

下面是我所進行的簡化版本,爲了方便閱讀。在它之前,該方案得到所有它從CSV需要的變量,並最終打印後,即通過那些被添加到不錯的選擇列表被隨機拉:

for eachrow in table: 
    Answer = False 
    for eachcell in eachrow: 
     if color == req_color: 
      if speed == req_speed: 
       if exclusion == req_exclusion: 
        print ('No pass!') 
       else: 
        Answer = True 
        print ('All attributes match') 
    if Answer: 
     print ('This passes') 

乾杯!

+4

我不清楚你在問什麼。 – cdhowie

+0

賦值'if exclusion = exclusion:'將不起作用。改用'if exclusion_1 = exclusion_2:'代替。將價值與自身進行比較也是有限的可用性。 – glglgl

+0

@glglgl:'if foo = bar:'根本不起作用;賦值不是一個表達式。 – geoffspear

回答

2

也許您在尋找continue

continue語句用於告訴Python跳過當前循環塊中其餘的語句並繼續循環的下一次迭代。

http://docs.python.org/reference/simple_stmts.html#continue

+0

我正在使用繼續和打破之前。但是,它會在內聯設置中工作,還是會在for循環結束之前繼續跳出for循環? –

+0

將繼續退出當前正在運行的for循環,因此如果在該循環中還有其他項目需要處理,它們將不會被處理。如果你在一個嵌套循環內,那麼該循環將繼續。 http://en.wikibooks.org/wiki/Python_Programming/Flow_control#Breaking.2C_continuing_and_the_else_clause_of_loops –

0

這聽起來像你想使用continue。繼續有點像中斷,除了中斷終止循環,繼續跳過當前循環的其餘部分並開始下一個循環。

我真的不能告訴你正在嘗試做的,但你可以嘗試這樣的:

testsToRun = ['speed','color'] 
for row in table: 
    Answer = False 
    for cell in row: 
     if cell['color'] == color and 'color' in testsToRun: 
      print ('No pass!') 
      continue 
     if cell['speed'] == speed and 'speed' in testsToRun: 
      print ('No pass!') 
      continue 
     if cell['exclusion'] == exclusion and 'exclusion' in testsToRun: 
      print ('No pass!') 
      continue 
     Answer=True 
     print ('All attributes match') 
    if Answer: 
     print ('This passes') 
+0

這比我的看起來更清潔,謝謝,但是我將如何控制每一個的開關?通過將它們包含在testsToRun中,如果該過濾器的開關處於打開狀態? –

+0

@ElburzSorkhabi我用一種我認爲可讀的方式編寫它,但是每次運行測試時都會執行字符串比較,如果您運行了很多這些測試,那麼時間做比較可能是重要的,並且是一種更有效的方法應該使用。我不太瞭解您的情況,因此根據您存儲要運行的測試的方式,可能有更好的方法來完成此操作。這就是說,運行的測試是'testsToRun'中的測試 – Matt

0

感謝您的意見,每個人。我通過回到定義變量的位置來解決問題。我將它設置爲當它關閉時,它將所有可能的變量發送給if,以便它在關閉時始終通過。這種方式當開關打開並且需要用戶輸入時,它選擇性地通過。我想過其他的選擇,但是由於這個原型必須有一個快速的轉身時間,這似乎是最好的選擇。

再次感謝!