2016-03-08 193 views
-3

我想寫一個程序,通過列表中的項目。將這些項目逐件分開,然後爲它們分配一個值。在這種情況下,我使用數字作爲我的項目。我想分配一個prime,even或者其他值。 (表示爲 'P', 'E',或 'o') 示例代碼:如何防止嵌套for循環導致多次返回相同的值?

testCode = '' 
testCodeList = [] 
prime = ['2','3','5','7'] 
even = ['4','6','8'] 
other = ['1','9'] 
list = ['76'] 
for item in list: 
    for num in item: 
     for eve in even: 
      if num == eve: 
       testCode = testCode + 'e' 
      else: 
       for pri in prime: 
        if num == pri: 
         testCode = testCode + 'p' 
        else: 
         for othello in other: 
          if num == othello: 
           testCode = testCode + 'o' 
          else: 
           pass 
print testCode 

這裏是輸出的一個示例:

PPPE

我該如何讓它只給我'pe',就像我想要的一樣? 感謝您的幫助!

+0

你真的希望列表項是字符串嗎? – EduardoCMB

+1

如果只有'7'和'6',這將如何等於'peo'?你在找'pe'嗎? –

+0

這實際上只打印'pppe'。 – TigerhawkT3

回答

0

如果你只是想檢查成員資格,沒有理由使用一堆嵌套循環。使用in運算符。

testCode = '' 
prime = ['2','3','5','7'] 
even = ['4','6','8'] 
other = ['1','9'] 
lst = ['76'] 
for item in lst: 
    for num in item: 
     if num in even: 
      testCode += 'e' 
     if num in prime: 
      testCode += 'p' 
     if num in other: 
      testCode += 'o' 

這導致testCode根據需要被'pe'。請注意,重複添加字符串可能不是執行操作的最佳方式。考慮追加從未使用的list,而是使用testCodeList。此外,命名list意味着您無需使用內置功能list()即可無需額外工作。

+0

感謝您的幫助!我只是一個n00b,在旁邊玩python。這是一個很大的幫助!謝謝! –

1

三個內在的循環,你越過素數,evens和其他人是問題所在。你應該這樣做,而不是:

testCode = '' 
testCodeList = [] 
prime = ['2','3','5','7'] 
even = ['4','6','8'] 
other = ['1','9'] 
list = ['76'] 
for item in list: 
    for num in item: 
     if num in even: 
      testCode = testCode + 'e' 
     elif num in prime: 
      testCode = testCode + 'p' 
     elif num in other: 
      testCode = testCode + 'o' 
     else: 
      pass 

還取決於你的這段代碼的目的,您可能需要使用的功能,以取代evenprimeother名單的聲明/命令來檢查,看看是否數目是事實甚至是黃金或其他。換句話說,例如對於even部分,您可以檢查該數字是否可以被二整除,而不是檢查該數字是否存在於even列表中。這可以通過將if num in even:替換爲if int(num) % 2 == 0:來完成。

+0

謝謝!這是一個很大的幫助! –