如何在Python彩票模拟器中节省内存?

-2 投票
1 回答
516 浏览
提问于 2025-04-18 16:37

我做了一个Python的Powerball模拟器,但它占用了我很多内存,导致我的电脑变得很慢。我想知道怎么才能让它用更少的内存。我在想,内存里到底装了什么东西,怎么才能让它不再占满内存,因为这个程序需要长时间运行。谢谢。

from __future__ import division
import random
import time

print "welcome to powerball simulator 1, sans power play. run play_lotto(*amount of jackpots to stop at*)"
time.sleep(5)

def lotto_ticket():
    ticket = [random.randint(1, 59), random.randint(1, 59), random.randint(1, 59), random.randint(1, 59), random.randint(1, 59), random.randint(1, 35)]
    return ticket

def drawing():
    lotto_drawing = [random.randint(1, 59), random.randint(1, 59), random.randint(1, 59), random.randint(1, 59), random.randint(1, 59), random.randint(1, 35)]
    return lotto_drawing

def check_ticket(list1, list2):
    compare = set(list1) & set(list2)
    return len(compare)

def play_lotto(amount_of_jackpots):
    money = 100
    times_played = 0
    tiers_won = {'tier_1': 0, 'tier_2': 0, 'tier_3': 0, 'tier_4': 0, 'tier_5': 0, 'tier_6': 0, 'tier_7': 0}
    GrandPrizes = 0
    while GrandPrizes != amount_of_jackpots:
        ticket = lotto_ticket()
        draw = drawing()
        money -= 2
        times_played += 1
        total_times_won = tiers_won['tier_1'] + tiers_won['tier_2'] + tiers_won['tier_3'] + tiers_won['tier_4'] + tiers_won['tier_4'] + tiers_won['tier_5'] + tiers_won['tier_6'] + tiers_won['tier_7']
        print 'Money: ',money
        if ticket[5] == draw[5]:
            print 'you win $4, matching powerball'
            money += 4
            tiers_won['tier_1'] +=1
            print 'Times teir one has been won: ',tiers_won['tier_1']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 1 and ticket[5] == draw[5]:
            print 'you win $4, one matching number and matching powerball '
            money += 4
            tiers_won['tier_2'] +=1
            print 'Times teir two has been won: ',tiers_won['tier_2']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 2 and ticket[5] == draw[5]:
            print 'you win $7, two matching numbers and powerball'
            money += 7
            tiers_won['tier_3'] +=1
            print 'Times teir three has been won: ',tiers_won['tier_3']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 3:
            print 'you win $7, three matching numbers'
            money += 7
            tiers_won['tier_4'] +=1
            print 'Times teir four has been won: ',tiers_won['tier_4']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 3 and ticket[5] == drawing[5]:
            print 'you win $100, three matching and powerball'
            money += 7
            tiers_won['tier_5'] +=1
            print 'Times teir five has been won: ',tiers_won['tier_5']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 4:
            print 'you win $100, four matching numbers'
            money += 100
            tiers_won['tier_6'] +=1
            print 'Times teir six has been won: ',tiers_won['tier_6']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 4 and ticket[5] == draw[5]:
            print 'you win $10000, four maching and powerball'
            money += 10000
            tiers_won['tier_7'] +=1
            print 'Times teir seven has been won: ',tiers_won['tier_7']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 5:
            print 'you win $1000000, five matching'
            money += 1000000
            tiers_won['tier_8'] +=1 
            print 'Times teir eight has been won: ',tiers_won['tier_8']
            print 'Lotto entries: ', times_played
            print tiers_won
        elif check_ticket(ticket, draw) == 5 and ticket[5] == draw[5]:
            print 'you win the jackpot, $250,000,000!'
            money += 2500000
            GrandPrizes += 1
            print 'Times teir nine has been won: ',GrandPrizes
            print 'Total wins: ', tiers_won['tier_1'] + tiers_won['tier_2'] + tiers_won['tier_3'] + tiers_won['tier_4'] + tiers_won['tier_5'] + tiers_won['tier_6'] + tiers_won['tier_7'] + tiers_won['tier_8'] + GarndPrizes
            print 'Lotto entries: ', times_played
            print 'Win percentage: ', total_times_won/times_played
        else:
            print 'you lose'
            print 'win percentage: ',total_times_won/times_played
            print 'Entries: ', times_played

1 个回答

3

发生的情况是,你的程序在每次循环时都会输出很多行内容,而你很可能是在一个会保存每行输出的命令行界面中运行你的代码。你需要找到一种不同的方式来运行你的代码,或者把输出放到别的地方,比如一个文件里。

撰写回答