2013-04-20 472 views
1

我正在做一個家庭作業的代碼片段。遍歷Python中的區間列表並返回奇數和偶數值?

我想:

  1. 獲取用戶輸入(N)。
  2. 從輸入(n)範圍中列出一個列表。
  3. 遍歷列表。
  4. 計數賠率和Evens。
  5. 返回賠率和伊文思用在其他功能

我難倒,這是據我得到:

def Input(): 
    n = eval(input("Enter number: ")) 

def GetOdds(n): 
    odd_count = 0 
    even_count = 0 
    List_start = List[1] 
    List_cont = List[1:] 

    for i in range(n): 
     ## I know I'll be using something like ## 
       if position % 2 == 0: 
           even_count = even_count+1 
    return even_count 
    return odd_count 
+1

沒有必要爲'eval';只要'int'就足夠了,而且更安全。但究竟是什麼問題? – 2013-04-20 10:09:15

+0

@larsmans我猜Zelle書,你不想得到[這個參數](http://stackoverflow.com/questions/15995787/python-zelle-book-uses-eval-is-it-wrong)重新開始......只爲了清楚我確實同意你的觀點。 – jamylak 2013-04-20 10:26:17

+0

@jamylak:感謝您的鏈接,沒有看到這個問題。有趣的討論。 – 2013-04-20 11:08:55

回答

4

你想要的東西,如:

def GetOddEvenCount(n): 
    odd_count = 0 
    even_count = 0 

    for elem in range(n): 
     if elem % 2 == 0: even_count += 1 
     else: odd_count += 1 
    return odd_count, even_count 

用法示例:

odd_count, even_count = GetOddEvenCount(10) 
print("Odds:", odd_count, "Evens:", even_count) 

輸出:

Odds: 5 Evens: 5 

不過請注意,如果你只返回計數,而不是實際的奇/偶值的列表,那麼這個函數的返回值可以平凡爲O(1)計算時間採取的事實,即任何甚至整數N,則返回值將始終是(N/2, N/2),和任何整數N,則返回值將始終是(floor(N/2), floor(N/2) + 1)

+0

如果你使用'N/2.0'或者使用Python3,你甚至可以在所有情況下返回'(int(floor(N/2.0)),int(ceil(N/2.0)))''。 – glglgl 2013-04-20 10:42:40

1

您可以在return聲明中有多個值。例如

def func(): 
    return 1,2 

x, y = func() 

在這種情況下,該功能將分配x = 1y = 2

所以你的情況讓你return聲明

return even_count, odd_count 

,當你調用該函數使用

even, odd = GetOdds(16) 

和你的奇偶差異和灰您if說法是正確的,你只需要添加一個else子句奇數和改變positioni(或者相反)

if i % 2 == 0: 
    even_count = even_count+1 
else: 
    odd_count = odd_count+1 
2

你可以返回一個字典來獲取所有奇數也是:

def GetOdds(n): 
    d = {'Odds':[],'Evens':[], 'Odd_count':0,'Even_count':0} 
    for i in range(n): 
     if i % 2 == 0: 
      d['Evens'].append(i) 
      d['Even_count'] += 1 
     else: 
      d['Odds'].append(i) 
      d['Odd_count'] += 1 
    return d 

舉個例子:

>>> GetOdds(int(input('Enter a number '))) # Let's do 10 for example 
{'Odds': [1, 3, 5, 7, 9], 'Evens': [0, 2, 4, 6, 8], 'Odd_count': 5, 'Even_count': 5}