簡體   English   中英

在python中使用random.randint幫助

[英]Using random.randint help in python

以下代碼是我嘗試模擬彩票的嘗試。

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個彩票號碼。 有想法嗎?

謝謝大家的幫助。

您似乎對函數中參數的作用感到困惑。 您已經說過,您的randm函數采用參數“ number”,但是實際上您並沒有在任何地方使用它。 下次出現該數字時,您已為其分配了一個全新的值,因此傳遞給randm的任何值實際上都不會使用。

另外,當未在函數中分配x時,該函數嘗試返回x。 您可能已經定義了一個名為x的全局變量,在這種情況下,該函數將僅返回該變量,否則該函數將因找不到變量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!")

您的實現存在一些錯誤,僅舉幾例:

如果嘗試將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!")

我從您的代碼(特別是print())假設您正在使用python 3.x +

嘗試發布您的整個代碼。 在發布時還要注意縮進,那里的函數定義似乎是空的。

我會這樣:

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

讓我們分幾個步驟進行。 您在編寫代碼時應該學習的第一件事是讓單獨的代碼段(函數或對象)完成不同的工作。

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

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!!!!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM