Python :: Aufgabe #3 :: Lösung #4

17 Lösungen Lösungen öffentlich
#3

Lotto - Simulation - 6 aus 49

Anfänger - Python von Gustl - 25.11.2012 um 16:16 Uhr
Schreiben Sie ein Programm, welches 6 Zahlen zwischen 1 und 49 abfrägt. Danach soll das Programm solange 6 Zufallszahlen berechnen bis alle 6 eingegebenen Zahlen übereinstimmen. Natürlich darf eine Zahl nicht zweimal vorkommen.
Dann soll ausgegeben werden nach wie vielen "Spielen" ein 6er erzielt wurde und wie hoch die Chance auf einen 3er, einen 4er und einen 5er war.
#4
vote_ok
von 0 (0 Punkte) - 16.07.2015 um 23:25 Uhr
Jetzt noch ein Programm mit Eingabeaufforderung, Try/Exceptions und CTRL+C-Abbruchbedingungen. Was koennte man noch daran basteln? Zugegeben, ich hatte langeweile ;-)

Quellcode ausblenden Python-Code
#!/usr/bin/env python
#
#   author:      Excpt0r
#
#   use only with attribution, thanks! =)
#

import sys, signal, random

def signal_handler(signal, frame):
    print('You fool pressed Ctrl+C! :)')
    sys.exit(0)

def input():
    numbers = []
    for i in xrange(6):
        while True:
            try:
                signal.signal(signal.SIGINT, signal_handler)
                number = int(raw_input('Enter a number: '))
                if (number < 1 or number > 49 or number in numbers):
                    raise ValueError()
                numbers.append(number)
                break
            except ValueError:
                print('It must be an unique integer (number) from 1 to 49!')
                continue
    return numbers

def gen_numbers():
    gen_numbers = []
    i = 0
    while True:
        val = random.randint(1,49)
        if ( val not in gen_numbers and i < 7):
            gen_numbers.append(val)
            i += 1
        if ( i == 6 ):
            return gen_numbers

def proof_win(numbers1,numbers2):
    right = 0
    same = []
    for i in xrange(6):
        if ( numbers1[i] in numbers2 ):
            right += 1
            same.append(True)
        else:
            same.append(False)
    if ( False in same ):
        return (False, right)
    else:
        return (True, right)

def play(numbers1):
    print "\n"
    loose = True
    i = 0
    j = 1
    three, four, five = 0, 0, 0
    while loose:
        numbers2 = gen_numbers()
        signal.signal(signal.SIGINT, signal_handler)
        if proof_win(numbers1,numbers2)[0]:
            print "\n6 Right! You, Madame or Sir, are a winner!"
            print "\nYour numbers: ", numbers1
            print "\nThe random numbers: ", numbers2
            loose = False
        i += 1
        #if (i % 100000 == 0):
        #    print "Versuch: ", j * 100000
        #    j += 1
        if (proof_win(numbers1,numbers2)[1] == 3):
            three += 1
        elif (proof_win(numbers1,numbers2)[1] == 4):
            four += 1
        elif (proof_win(numbers1,numbers2)[1] == 5):
            five += 1
    print "\nYou won after try: ", i
    print "\nYour change for three right is: ", float(100*three) / i, "%"
    print "\nYour chance for four right is: ", float(100*four) / i, "%"
    print "\nYour chance for five right is: ", float(100*five) /i, "%"

def main():
    print "\n\t This is a Lotto simulation!\n"

    numbers = input()

    play(numbers)

    return 0

if __name__ == "__main__":
    main()

Kommentare:

Für diese Lösung gibt es noch keinen Kommentar

Bitte melden Sie sich an um eine Kommentar zu schreiben.
Kommentar schreiben
2103725

Du scheinst einen AdBlocker zu nutzen. Ich würde mich freuen, wenn du ihn auf dieser Seite deaktivierst und dich davon überzeugst, dass die Werbung hier nicht störend ist.