2016-01-27 227 views
2

我在排序變量/列表時遇到問題,然後能夠跨功能傳輸它們。我仍然很新的python,可能會錯過一些非常基本的東西。但是我已經過了好幾個小時了。通過函數傳遞變量/列表

我需要創建一個程序,它會生成20個隨機整數,並指出每個數字是奇數還是偶數。我需要按升序對兩個原始整數進行排序,並將它們傳遞給random.randint函數,但遇到了麻煩,任何幫助將不勝感激。

這就是我到目前爲止。

import random 

def userinput(): 

    global number1 
    global number2 

    number1 = int(input("Enter First Integer: ")) 
    number2 = int(input("Enter Second Integer: ")) 

userinput() 

def numbersorting(): 

    global both 
    both = [(number1),(number2)] 
    sorted(both) 

numbersorting() 

def random_gen(): 

    global num 
    i = 0 

    for i in range(20): 
     num = random.randint(number1,number2) 

    def get_num(): 
     return values.pop 


    def odd_even(): 
     if num % 2 == 0: 
      print("Random Number", num, "is even") 
     else: 
      print("Random Number", num, "is odd") 
    odd_even() 

random_gen() 
+2

你的縮進有點搞砸了將代碼粘貼到問題中。你能解決它,所以我們知道代碼的意圖? –

+1

停止使用全球。 –

+0

是更好的縮進 – calmce

回答

0

嘗試both.sort()

sorted返回一個新的列表。

sort()已完成。

0

你在找這樣的嗎?

我編輯你的代碼是什麼我明白你的問題是工作...

你想用戶輸入2個數字來設定上限和下限各隨機數。那麼你想要在該範圍內生成20個隨機數,並找出每個數是偶數還是奇數?

import random 

def random_gen(number1, number2): 
    for i in range(20): 
     num = random.randint(number1,number2) 

     if num % 2 == 0: 
      print("Random Number", num, "is even") 
     else: 
      print("Random Number", num, "is odd") 


number1 = int(input("Enter First Integer: ")) 
number2 = int(input("Enter Second Integer: ")) 

random_gen(number1, number2) 

你有幾個問題與您現有的代碼:

  1. 壓痕(固定在編輯)
  2. 不必要使用全局變量。如果您需要這種類型的功能,您應該考慮將變量傳遞到每個函數中,而不需要它。
  3. 許多函數也是不必要的。例如,您不需要get_num()odd_even()函數,因爲您只需在循環中執行那些操作即可。即使在我剛剛發佈的情況下,您甚至不需要random_gen()函數 - 您可以將所有代碼移到用戶輸入之後。我只是把它留在那裏,以顯示我的意思是用#2以上的點#
1

那麼它似乎並不清楚在問題上你真的想做什麼,但使用全局是一個非常糟糕的做法。

但是你可以用返回你需要instace值的方法: 如果需要返回2號這是更好地使用這種方法,用戶輸入:

def get_numeric_input(label): 
    try: 
     return int(input(label)) 
    except NameError: 
     print "Please enter a number" 
     return get_numeric_input(label) 

有了這個功能,您可以從用戶獲取數字值。

使用它可以在2個一個值一樣

def get_user_input(): 
    n = get_numeric_input("Enter First Integer: ") 
    m = get_numeric_input("Enter First Integer: ") 
    return [n, m] 

現在你已經從用戶返回2個值,並使用排序方法列表的功能你有這些值進行排序

def get_sorted_values(l): 
    return l.sort() 

檢查有關在Python中排序的信息https://wiki.python.org/moin/HowTo/Sorting

使用隨機數字,因爲你所描述的是好的,但也嘗試使用is_odd和is_even函數在任何其他函數之外,您將可以重複使用它們多次。

+0

'return l.sort()'是一個錯誤。它將返回None並對原始列表進行排序。你可能意味着'返回排序(l)'。 'l'(小L)通常是一個不好的變量名,因爲它看起來有點像'1'或'I'(大我),這取決於字體。 –

0
from random import randint 


def user_input(): 
    number1 = int(input("Enter First Integer: ")) 
    number2 = int(input("Enter Second Integer: ")) 

    if number1 > number2: 
     number1, number2 = number2, number1 

    return number1, number2 


def odd_even(num): 
    if num % 2 == 0: 
     print("Random Number " + str(num) + " is even") 
    else: 
     print("Random Number " + str(num) + " is odd") 


def random_gen(): 
    number1, number2 = user_input() 
    for i in range(20): 
     num = randint(number1, number2) 
     odd_even(num) 

random_gen() 

您通常想盡量避免使用全局變量。這只是一個很好的編程練習,因爲如果你不仔細地跟蹤它們,它們可能會變得相當混亂並導致問題。就整理你的兩個整數而言,我認爲那個if語句是一種更加pythonic的做事方式。那麼,我認爲至少比較容易。另外,在Python中,您不需要聲明for循環變量,因此不需要行i=0。另外,我敢肯定,這是一個任務,但在現實生活中,你會想運行一個例外條款,其中你會說像

while True: 
    try: 
     number1 = int(input("Enter First Integer: ")) 
     number2 = int(input("Enter Second Integer: ")) 
     break 
    except ValueError: 
     print("Oops! Try entering an integer!") 

希望幫助!

0

通過將變量傳遞給函數並從函數返回新值來避免全局變量。

import random 


def userinput(): 

    number1 = int(input("Enter First Integer: ")) 
    number2 = int(input("Enter Second Integer: ")) 
    return number1, number2 


def numbersorting(nums): 

    return sorted(nums) 


def random_gen(hi, lo): 

    return random.sample(range(hi, lo), 20) 


def odd_even(num): 
    if num % 2 == 0: 
     print("Random Number %d is even" % num) 
    else: 
     print("Random Number %d is odd" % num) 


nums = userinput() 
sortnum = numbersorting(nums) 
randoms = random_gen(*sortnum) 
[odd_even(n) for n in randoms] 

符合您的原始函數名稱。

您應該知道list.sortsorted之間的區別。如果你有一個清單li,那麼li.sort()排序,這是它改變了原來的清單,並返回None。所以return li.sort()總是錯的。另一方面return sorted(li)是好的,但只是sorted(li)是一種浪費的排序,因爲結果被扔掉。