2012-02-28 44 views
2

以下代碼是我模擬彩票的嘗試。在python中使用random.randint幫助

import random 

def lottery(numbers): 
    lottoNumbers = [randint('0,100') for count in range(3)] 

    if numbers == lottoNumbers: 
     print('YOU WIN $10,000') 
    else: 
     print('YOU LOSE,DUN DUN DUNNN!') 
    return numbers 


def main(): 
    numbers = int(input('Enter a number: ')) 
    if numbers == lottoNumbers: 
     numbers = lottery(numbers) 
    else: 
     numbers = lottery(numbers) 




main() 

嗨,大家好我已經得到了這麼多與你給我的幫助。我正在嘗試編寫代碼,以便隨機選擇3個樂透號碼。然後用戶必須輸入3個他/她自己的樂透號碼。如果他們得到全部3個正確的話,那麼他們將贏得全部獎金,如果他們得到3個號碼,但沒有按照正確的順序贏得獎勵。很明顯,如果他們猜測所有的錯誤,那麼印刷聲明就會說明這一點。我感到困惑的是如何編寫代碼,以便用戶可以輸入3個數字來匹配隨機的彩票號碼。我也想在用戶輸入他/她的選擇後打印3個彩票號碼。任何想法傢伙?

感謝您的幫助。

+2

請修正'indentation'。 – kev 2012-02-28 04:37:13

+1

所以你實際上在程序中使用'random','randum'和'randm'這兩個名字?我只能建議反對。 – 2012-02-28 04:39:00

+0

嘿,謝謝Nik。請問爲什麼? – 2012-02-28 19:07:52

回答

2

你似乎有點困惑什麼的參數在函數的作用是。你已經說過你的randm函數使用了「number」參數,但是你並沒有真正在任何地方使用它。下一次出現的數字,你已經指定了一個全新的值,所以任何傳遞給randm的值都沒有被實際使用。

另外,當函數內沒有分配x時,函數正試圖返回x。要麼你已經有了一個名爲x already defined的全局變量,在這種情況下,函數只會返回該變量,否則函數將失敗,因爲它找不到變量x。

下面是我已經完成的一個簡單示例,將三個數字作爲參數傳遞給該函數。

import random 

theirNumbers=[5,24,67] 

def checkNumbers(theirNumbers): 
    lottoNumbers = [] 
    for count in range(3) 
      lottoNumbers.append(random.randint(0,100) 
    winning = True 
    for number in theirNumbers: 
    if not each in lottoNumbers: winning=False 
    if winning == True: print("Winner!") 
1

嘗試發佈您的整個代碼。發佈時還要注意縮進,看起來你的函數的定義是空的。

我會做這樣的:

import random 

def lottery(): 
    win = True 
    for i in range(3): 
    guess = random.randint(1,100) 
    if int(raw_input("Please enter a number...")) != guess: 
     win = False 
     break 

    return win 
+0

然後,如果用戶錯過猜測遊戲丟失。如果他不會錯過任何他獲勝的。您可以隨時更改代碼以使程序打印某些消息而不是返回布爾值。 – wocoburguesa 2012-02-28 04:41:55

2

有幾件事情錯了你實現,僅舉幾例:

,如果你想比較功能randm的輸出爲x,則需要包括在返回值功能,像這樣:

def randm(): 
    return return_value 

你似乎是打印所有的值,但不會將其存儲,最終你將只與最後一個結束,你應該嘗試將它們存儲在像這樣的列表:

list_name = [randint(0,100) for x in range(x)] 

這將在列表中生成randint(0,100)x次,這將允許您稍後訪問所有值。

來修復你的代碼儘可能靠近你正嘗試儘可能我會做:

import random 

def randm(user_numbers): 
    number = [] 
    for count in range(3): 
     number.append(random.randint(0, 100)) 
    print(number) 
    return user_numbers == number 

if randm(x): 
    print('WINNER') 

如果您正在尋找這樣的任務非常Python的方式, 你可能想嘗試是這樣的:

from random import randint 

def doLotto(numbers): 
    # make the lotto number list 
    lottoNumbers = [randint(0,100) for x in range(len(numbers))] 

    # check to see if the numbers were equal to the lotto numbers 
    if numbers == lottoNumbers: 
     print("You are WinRar!") 
    else: 
     print("You Lose!") 

我從你的代碼(打印()明確)假設你是使用Python 3.X +

1

讓這麼做在幾個步驟。 你應該在編寫代碼時學習的第一件事就是讓單獨的代碼段(函數或對象)做不同的工作。

首先,讓我們創建功能,使彩票:

def makeLottery(slotCount, maxNumber): 
    return tuple(random.randint(1,maxNumber) for slot in range(slotCount)) 

接下來,讓我們創建函數來詢問用戶的猜測:

def askGuess(slotCount, maxNumber): 
    print("take a guess, write {count} numbers separated by space from 1 to {max}".format(count = self.slotCount, max = self.maxNumber)) 
    while True: #we will ask user until he enter sumething suitable 
     userInput = raw_input() 
     try: 
      numbers = parseGuess(userInput,slotCount,maxNumber) 
     except ValueError as err: 
      print("please ensure your are entering integer decimal numbers separated by space") 
     except GuessError as err: 
      if err.wrongCount: print("please enter exactly {count} numbers".format(count = slotCount)) 
      if err.notInRange: print("all number must be in range from 1 to {max}".format(max = maxNumber)) 

     return numbers 

在這裏我們使用的是其他功能和自定義異常類,允許創建它們:

def parseGuess(userInput, slotCount,maxNumber): 
    numbers = tuple(map(int,userInput.split())) 
    if len(numbers) != slotCount : raise GuessError(wrongCount = True) 
    for number in numbers: 
     if not 1 <= number <= maxNumber : raise GuessError(notInRange = True) 
    return numbers 

class GuessError(Exception): 
    def __init__(self,wrongCount = False, notInRange = False): 
     super(GuessError,self).__init__() 
     self.wrongCount = wrongCount 
     self.notInRange = notInRange 

最後功能來檢查解決方案和使用者如果他會贏:

def checkGuess(lottery,userGuess): 
    if lottery == userGuess : print "BINGO!!!!" 
    else : print "Sorry, you lost" 

正如你可以看到許多功能在這裏使用普通的數據工作。所以應該建議您收集編在一個班裏整個代碼,讓我們做吧:

class Lottery(object): 
    def __init__(self, slotCount, maxNumber): 
     self.slotCount = slotCount 
     self.maxNumber = maxNumber 
     self.lottery = tuple(random.randint(1,maxNumber) for slot in range(slotCount)) 

    def askGuess(self): 
     print("take a guess, write {count} numbers separated by space from 1 to {max}".format(count = self.slotCount, max = self.maxNumber)) 
     while True: #we will ask user until he enter sumething suitable 
      userInput = raw_input() 
      try: 
       numbers = self.parseGuess(userInput) 
      except ValueError as err: 
       print("please ensure your are entering integer decimal numbers separated by space") 
       continue 
      except GuessError as err: 
       if err.wrongCount: print("please enter exactly {count} numbers".format(count = self.slotCount)) 
       if err.notInRange: print("all number must be in range from 1 to {max}".format(max = self.maxNumber)) 
       continue 

      return numbers 

    def parseGuess(self,userInput): 
     numbers = tuple(map(int,userInput.split())) 
     if len(numbers) != self.slotCount : raise GuessError(wrongCount = True) 
     for number in numbers: 
      if not 1 <= number <= self.maxNumber : raise GuessError(notInRange = True) 
     return numbers 

    def askAndCheck(self): 
     userGuess = self.askGuess() 
     if self.lottery == userGuess : print "BINGO!!!!" 
     else : print "Sorry, you lost" 

終於可以檢查它是如何工作的:

>>> lottery = Lottery(3,100) 
>>> lottery.askAndCheck() 
take a guess, write 3 numbers separated by space from 1 to 100 
3 
please enter exactly 3 numbers 
1 10 1000 
all number must be in range from 1 to 100 
1 .123 asd 
please ensure your are entering integer decimal numbers separated by space 
1 2 3 
Sorry, you lost 
>>> lottery = Lottery(5,1) 
>>> lottery.askAndCheck() 
take a guess, write 5 numbers separated by space from 1 to 1 
1 1 1 1 1 
BINGO!!!! 
+0

我還沒有在我的課中得到這個代碼中使用的一些功能..一旦我做了,我會參考這個爲其他任務。謝謝。 – 2012-02-28 19:56:06