حالت آفلاین — محتوا از حافظهٔ کش نمایش داده می‌شود
همهٔ تمرین‌ها

صندوق قرعه کشی خانوادگی

تمرین آسان 2096 visibility link download flag

برنامه ای بنویسید که صندوق قرعه کشی خانوادگی را مدیریت کند:

۱. امکان اضافه و حذف کردن عضو وجود داشته باشد

۲. امکان انتخاب تصادفی از بین اعضایی که هنوز در قرعه‌کشی برنده نشدند وجود داشته باشد

۳. اطلاعات در فایل txt یا دیتابیس ذخیره شوند تا با بسته شدن برنامه از دست نروند

این تمرین یه پروژه ست! یعنی پتانسیل اینو داره که خیلی بیشتر روش کار بشه بنابراین ایده اصلی رو از اینجا بردار و خودت بیشتر روش کار کن تا به یه تمرین بزرگتر تبدیل یشه
👨‍💻 21 ساعت قبل کاربر ناشناس این تمرین رو مشاهده کرد

پاسخ‌ها 13

import random
import json
import os

class Lottery:
    def __init__(self, filename='lottery_members.json'):
        self.filename = filename
        self.load_members()

    def load_members(self):
        if os.path.exists(self.filename):
            with open(self.filename, 'r') as file:
                self.members = json.load(file)
        else:
            self.members = []

    def save_members(self):
        with open(self.filename, 'w') as file:
            json.dump(self.members, file)

    def add_member(self, name):
        if name not in self.members:
            self.members.append(name)
            self.save_members()

    def remove_member(self, name):
        if name in self.members:
            self.members.remove(name)
            self.save_members()

    def draw_winner(self):
        eligible_members = [m for m in self.members if m not in self.winners]
        if eligible_members:
            winner = random.choice(eligible_members)
            self.winners.append(winner)
            return winner
        return None

    def reset_winners(self):
        self.winners = []

lottery = Lottery()
lottery.add_member("Ali")
lottery.add_member("Sara")
lottery.remove_member("Ali")
winner = lottery.draw_winner()
print(f"Winner: {winner}")
پاسخ هوش مصنوعی Ai Python
START

import random
import pathlib
import json
import time

def error_manage(type_in, prompt):
while True:
try:
return type_in(input(prompt))
except ValueError:
print("The input is invalid!")

====================

def write(lst1, lst2, lst3, lst4):
with open(file_path1, "w") as f:
json.dump(lst1, f, indent=4)
with open(file_path2, "w") as f:
json.dump(lst2, f, indent=4)
with open(file_path3, "w") as f:
json.dump(lst3, f, indent=4)
with open(file_path4, "w") as f:
json.dump(lst4, f, indent=4)
return

====================

def read():
with open(file_path1, "r") as f:
contents1 = json.load(f)
with open(file_path2, "r") as f:
contents2 = json.load(f)
with open(file_path3, "r") as f:
contents3 = json.load(f)
with open(file_path4, "r") as f:
contents4 = json.load(f)
return contents1, contents2, contents3, contents4

====================

def share_rate(item, lst1, lst2):
share_rate = error_manage(int, f"Enter the share rate of {item}: ")
lst1.append(item + f"({share_rate})")
for i in range(share_rate):
lst2.append(item)
return item, lst1, lst2

====================

def list_print(all, win, oth):
counter = 0
print(f"\nThe all members :")
if all == []:
print("No body")
else:
for i in all:
counter += 1
print(f"{counter}) {i}")

print("\nThe winers in lottery:")
if win == []:
    print("No body")
else:
        for j in win:
            print(j,  end="  ")
        print()

print("\nThe other of members for lottery:")
counter = 0
if oth == []:
    print("No body")
else:
    for k in oth:
        counter += 1
        print(f"{counter}) {k}")
print("\n")

return all, win, oth
==================== ★★★★★★★★★★★★★★★

print("★" * 25)
print("Hello! Welcom to lottery cash program.")
print("★" * 25)
print("\n")

folder_path = pathlib.Path("../python/cash")
folder_path.mkdir(parents=True, exist_ok=True)

file_path1 =f"{folder_path}/test1.json"
file_path2 =f"{folder_path}/test2.json"
file_path3 =f"{folder_path}/test3.json"
file_path4 =f"{folder_path}/test4.json"

try:
contents1, contents2, contents3, contents4 = read()
list_print(contents1, contents2, contents4)
except:
first_list = ["Taha", "Masumeh", "Mohaddeseh", "Motahhareh"]
all_members1 = []
winners_list1 = []
list_for_lottery1 = []
other_members1 = ["Taha", "Masumeh", "Mohaddeseh", "Motahhareh"]
print("" * 30)
print("Notice: 1 rate = 1.000.000 R")
print("" * 30)
print()
for item in first_list:
item, all_members, list_for_lottery = share_rate(item, all_members1, list_for_lottery1)

copy_list = list_for_lottery.copy()

write(all_members1, winners_list1, list_for_lottery1, other_members1)
contents1, contents2, contents3, contents4 = read()
list_print(contents1, contents2, contents4)

all_members = contents1
winners_list = contents2
list_for_lottery = contents3
copy_list = list_for_lottery.copy()
other_members = contents4

while True:
add_del_lot = input("\nfor add or delete from members, please enter + or - and for lottery enter 'l' and for exit press return botom: ")

if add_del_lot != "+" and add_del_lot != "-" and add_del_lot != "l" and add_del_lot != "":
    print("input is invalid! Try again.")
    continue

if add_del_lot == "-":
    del_number = error_manage(int, "Please enter the number of member to remove: ")
    if del_number > len(all_members):
        print("The input number is invalid! Try again")
        continue

    del_member = all_members.pop(del_number - 1)
حذف قسمت پرانتزی جلوی اسامی
    par_index = del_member.index("(")
    del_member = del_member[: par_index]

    if del_member in other_members:
        other_members.remove(del_member)
    else:
        winners_list.remove(del_member)

    for i in range(len(list_for_lottery)):
        if del_member in list_for_lottery:
            list_for_lottery.remove(del_member)

    print(f"\ndelet member is : {del_member}")
    write(all_members, winners_list , list_for_lottery, other_members)
    list_print(all_members, winners_list, other_members)

elif add_del_lot == "+":
    add_member = input("Please enter the name of member to add: ")
    share_rate(add_member, all_members, list_for_lottery)

    other_members.append(add_member)       
    write(all_members, winners_list , list_for_lottery, other_members)
    list_print(all_members, winners_list, other_members)

elif add_del_lot == "l":
    if other_members == []:
        other_members = winners_list
        winners_list = []

    if list_for_lottery == []:
        list_for_lottery = copy_list

    random_item = random.choice(list_for_lottery)
    print()
    for i in reversed(range(4)):
        if i > 0:
            print(i, end='>>>', flush = True)
            time.sleep(1)
        else:
            print('Start')

    print()
    print("★" * 25)
    time.sleep(1)
    print("★" * 20)
    time.sleep(1)
    print("★" * 15)
    time.sleep(1)

    for i in range(len(list_for_lottery)):
        if random_item in list_for_lottery:
            list_for_lottery.remove(random_item)
    other_members.remove(random_item)
    winners_list.append(random_item)

    end_time = time.time() + 5
    visible = True
    matn = f"This member win to lottery : {random_item}"        
    while time.time() < end_time:
        if visible:
            print(f"\r{matn}", end = "", flush = True)
        else:
            print("\r", " " * (len(matn)-1), end = '', flush = True)        
        visible = not visible
        time.sleep(1)
    print()

    print("★" * 15)
    print("★" * 20)
    print("★" * 25)
    time.sleep(2)

    write(all_members, winners_list , list_for_lottery, other_members)
    list_print(all_members, winners_list, other_members)

elif add_del_lot == "":
    print("\n\n" + 30 * "*")
    print("The program finished. Goodbye!")
    break
END
import random

class Lottery:
    def __init__(self):
        self.list_people=[] # ليس تمام اعظا
        self.people=[] # افراد برنده نشده
        self.winners=[] # تاريخچه افراد برنده شده

    def add_person(self ,name):
        if len(name)<3:
            return "name is invalid"

        if name in self.list_people:
            return f'{name} is already in list'

        self.people.append(name)
        self.list_people.append(name)
        self.save_name(name)
        self.save_rest(name)
        return f"{name} added successfully"
    def add_winners(self,name):
        with open('winners.txt' , 'a')as f:
            f.write(f"{name}\n")
    def save_name(self,name):
        with open ("user.txt" , 'a') as f:
            f.write(f'{name}\n')
    def refresh_name(self):
        with open ("user.txt" , 'w') as f:
          for name in self.list_people:
            f.write(f'{name}\n')
    def save_rest(self,name):
        with open ("rest.txt" , 'a') as f:
            f.write(f'{name}\n')
    def refresh_rest(self):
        with open ("rest.txt" , 'w') as f:
          for name in self.people:
            f.write(f'{name}\n')        
    def pop_person(self ,name):
        if name not in self.list_people:
            return f'{name} is not in list'
        try:
            self.people.remove(name) ## براي اينکه اگر در ليست افراد باقي مانده نبود به ارور نخورد

        except:
            pass
        self.list_people.remove(name)
        self.refresh_name()
        self.refresh_rest()
        return f"{name} removed successfully"

    def draw_winner (self):
         if len(self.people)==0:    ## اگر ليست افراد برنده نشده تمام شدند
             if len(self.list_people)==0:
                 return "list is empty"
             self.people.extend(self.list_people)  ## دوباره ليست رو بروز ميکند
             for name in self.people:        
                 self.save_rest(name)
         winner=random.choice(self.people) 
         self.winners.insert(0 , winner)
         self.add_winners(winner)
         self.people.remove(winner)
         self.refresh_rest()
         return f"winner is {winner}"
    def get_winners(self):
        return self.winners
    def get_list_people(self):
        return self.list_people
    def get_rest_people(self):
        return self.people
def menu():
    lottery=Lottery()
    with open("rest.txt" , 'r')as f:
        for name in f:
            lottery.people.append(name.strip())
    with open('user.txt' , 'r')as f:
        for name in f:
            lottery.list_people.append(name.strip())
        if len(lottery.people)==0:
            lottery.people.extend(lottery.list_people)
    with open('winners.txt' , 'r')as f:
        for name in f:
            lottery.winners.insert(0,name.strip())        
    print("1:add person")
    print("2:pop person")
    print("3:draw_winner")
    print("4:show last winners")
    print("5:show res people")
    print("6:show users")
    print("7:show history winners")
    print("q:exit")
    while (comment:=(input("choose:").strip().lower()))!='q':
        if comment=='1':
            print(lottery.add_person((input("enter the name:")).strip().lower()))
        elif comment=='2':
            print(lottery.pop_person((input("enter the name:")).strip().lower()))
        elif comment=='3':
            print(lottery.draw_winner())
        elif comment=='4':
            winners=lottery.get_winners()
            try:
               many=input("How many of the last ones do you want to see?")
               if len(winners)<int(many):
                  many=len(winners)
            except:
                print("invalid input")
                continue
            for num , name in enumerate(winners , start=1):
                print(f"{num}:{name}")
                if num==int(many):
                    break

        elif comment=='5':
            people=lottery.get_rest_people()
            for num , name in enumerate(people , start=1):
                print(f"{num}:{name}")

        elif comment=='6':
            people=lottery.get_list_people()
            for num , name in enumerate(people , start=1):
                print(f"{num}:{name}")
        elif comment=='7':
            winners=lottery.get_winners()
            for num , name in enumerate(winners , start=1):
                print(f"{num}:{name}") 
        else:
            print("invalid input")

if __name__=='__main__':
    menu()

ارسال جواب

جوابت را با Markdown بنویس و ثبت کن

×
بستن