3

これは持ち帰りテストの質問でした(Gruhn教授がスタックオーバーフローを容赦なく精査している場合は20分前にメールで送信しました)。最初のコンピュータサイエンスコース、Pythonを使用したイントロ。「Python第2版から始める」という本を使用する。テストは基本的に、独自のモジュールライブラリの作成、ファイルの読み取りと書き込み、およびロジックの試行/除外に関するものでした。

最初の部分では、宝くじのマンバーシミュレーターを作成するように依頼されました。1つは一意でない番号を生成し、もう1つは一意で繰り返しのない番号を生成しました。私がここで見たすべての答えはリストを利用しましたが、それは悲しいことに次の章であり、私たちはそれらを使用することを明示的に禁じられました。

このセクションの私のコード:

import random

def ballPickerOne():
    a = random.randint(1, 59)
    b = random.randint(1, 59)
    c = random.randint(1, 59)
    d = random.randint(1, 59)
    e = random.randint(1, 59)
    f = random.randint(1, 35)

    showNumbers(a,b,c,d,e,f)


def ballPickerTwo():
   a = random.randrange(1,59,2)
   b = random.randrange(1,59,3)
   c = random.randrange(1,59,5)
   d = random.randrange(1,59,7)
   e = random.randrange(1,59,11)
   f = random.randint(1,35)

   showNumbers(a,b,c,d,e,f)


def showNumbers(a,b,c,d,e,f):

   print("Your Numbers ...")
   print()
   print("Ball 1: ", a)
   print("Ball 2: ", b)
   print("Ball 3: ", c)
   print("Ball 4: ", d)
   print("Ball 5: ", e)
   print("Red Ball: ", f)
   print()
   print("Good Luck")

結果を表示するには、showNumbers関数を使用し、その結果の形式で表示する必要がありました。ballPickerTwoは「一意」のものであり、一意性の試行に失敗したときに素数間隔を使用しました。ループを使って遊んでみましたが、showNumbersを使用して生成された数値を表示する方法がわかりませんでした。

4

4 に答える 4

1

これは本当に退屈な方法ですが、リストは使用しません。ランダムで一意の値を選択します。

def ballPickerTwo():

    a = random.randint(1, 59)

    b = a        
    while b == a:
        b = random.randint(1, 59)

    c = b
    while c == b or c == a:
        c = random.randint(1, 59)

    d = c
    while d == c or d == b or d == a:
        d = random.randint(1, 59)

    ...
于 2012-11-23T04:59:36.420 に答える
0

これは、番号のビットを使用して、どの番号がすでに選択されているかを記憶しているという点で、HYRYの回答に似ています。Pythonは任意の数を処理できるため、これは機能します。

import random

def showNumbers(a, b, c, d, e, f):
   print("Your Numbers ...")
   print()
   print("Ball 1: ", a)
   print("Ball 2: ", b)
   print("Ball 3: ", c)
   print("Ball 4: ", d)
   print("Ball 5: ", e)
   print("Red Ball: ", f)
   print()
   print("Good Luck")

def pick(cur_val):
    while True:
        v = random.randint(1, 59)
        m = 2**v
        if (cur_val & m) == 0: # bit not set, v never picked before
            return (cur_val | m), v  # return updated cur_val and bit number now set in it

def ballPickerTwo():
    cur_val = 0
    cur_val, a = pick(cur_val)
    cur_val, b = pick(cur_val)
    cur_val, c = pick(cur_val)
    cur_val, d = pick(cur_val)
    cur_val, e = pick(cur_val)
    cur_val, f = pick(cur_val)

    showNumbers(a, b, c, d, e, f)
于 2012-11-23T06:13:38.337 に答える
0

生成した値を返すだけです。関数でreturnを使用してください。例えば:

def ballPickerOne():
    a = random.randint(1, 59)
    b = random.randint(1, 59)
    c = random.randint(1, 59)
    d = random.randint(1, 59)
    e = random.randint(1, 59)
    f = random.randint(1, 35)
    return a,b,c,d,e,f

showNumbers(a,b,c,d,e,f)

仮に:

from random import sample, randint

def ballPickerOne():
    a,b,c,d,e = sample(range(1,59), 5) 
    f = randint(1,35)
    while f!=a and f!=b and f!=c and f!=d and f!=e:
        f = randint(1,35)
    return a,b,c,d,e,f
于 2012-11-23T04:55:56.547 に答える
0

整数をビットマップとして使用して一意をチェックするのはどうですか?

import random

def showNumbers(a,b,c,d,e,f):
   print("Your Numbers ...")
   print()
   print("Ball 1: ", a)
   print("Ball 2: ", b)
   print("Ball 3: ", c)
   print("Ball 4: ", d)
   print("Ball 5: ", e)
   print("Red Ball: ", f)
   print()
   print("Good Luck")

def ballPickerTwo():
    while True:
        a = random.randint(1, 59)
        b = random.randint(1, 59)
        c = random.randint(1, 59)
        d = random.randint(1, 59)
        e = random.randint(1, 59)
        f = random.randint(1, 35)
        m = 2**a + 2**b + 2**c + 2**d + 2**e + 2**f
        if bin(m).count("1") == 6:
            break
    showNumbers(a,b,c,d,e,f)
于 2012-11-23T05:36:08.133 に答える