-8
votes

Programme basé sur la délivrance d'un livre dans la bibliothèque

La bibliothèque de l'École de sorcellerie de Poudlard et de Wizardry a informatisé son processus d'émission de livres. Les informations pertinentes sont fournies en tant que texte provenant d'une entrée standard en trois parties: des informations sur les livres, des informations sur les emprunteurs et des informations sur les caisse. Chaque partie a un format de ligne spécifique décrit ci-dessous.

Informations sur les livres Format de ligne: numéro d'adhésion ~ titre

Informations sur les emprunteurs Format de ligne: Nom d'utilisateur ~ Nom complet

Informations sur les caisses Format de ligne: Nom d'utilisateur ~ Numéro d'accession ~ Date d'échéance Remarque: la date d'échéance est au format AAAA-MM-DD.

Vous pouvez supposer que les données sont cohérentes en interne. Pour chaque paiement, il existe un nom d'utilisateur et un numéro d'identification correspondant dans les données d'entrée, et aucun livre n'est enregistré simultanément par deux personnes. Chaque section de l'entrée commence par une ligne contenant un seul mot-clé. La première section commence par une ligne contenant des livres. La deuxième section commence par une ligne contenant des emprunteurs. La troisième section commence par une ligne contenant des caisse. La fin de l'entrée est marquée par une ligne contenant de l'endofinput. Écrivez un programme Python pour lire les données décrites ci-dessus et imprimer des détails sur les livres qui ont été vérifiés. Chaque ligne doit décrire à un livre actuellement émis dans le format suivant: Date d'échéance ~ Nom complet ~ Numéro d'accession ~ Titre Votre sortie doit être triée dans l'ordre croissant de la date d'échéance. Pour les livres dus à la même date, trier dans l'ordre croissant de nom complet. Voici une entrée d'échantillon et sa sortie correspondante. Échantillon d'entrée Livres APM-001 ~ Fabrication de potion avancée GWG-001 ~ Fabrication avec goules APM-002 ~ Potion avancée DMT-001 ~ Théorie magique défensive DMT-003 ~ Théorie magique défensive GWG-002 ~ Débardeur avec goules DMT-002 ~ défensive Emprunteurs théoriques magiques SLY2301 ~ Hannah Abbott Sly2302 ~ Euan Abercrombie Sly2303 ~ Stewart Ackerley Sly2304 ~ Bertram Aubrey Sly2305 ~ Avery Sly2306 ~ MALCOLM BADDOCK SLY2307 ~ MARCUS BELBY SLY2309 ~ KATIE BELLY SLY2309 ~ SIRIUS Orion Noir Checkouts SLY2304 ~ DMT-002 ~ 2019-03- 27 SLY2301 ~ GWG-001 ~ 2019-03-27 SLY2308 ~ APM-002 ~ 2019-03-14 SLY2303 ~ DMT-001 ~ 2019-04-03 SLY2301 ~ GWG-002 ~ 2019-04-03 Endofinput Échantillon de sortie 2019-03-14 ~ Katie Bell ~ APM-002 ~ Fabrication de potion avancée 2019-03-27 ~ Bertram Aubrey ~ DMT-002 ~ Théorie magique défensive 2019-03-27 ~ Hannah Abbott ~ GWG-001 ~ Débardeur avec Ghouls 2019 -04-03 ~ Hannah Abbott ~ GWG-002 ~ Débardeur avec Ghouls 2019-04-03 ~ Stewart Ackerley ~ DMT-001 ~ Théorie magique défensive


2 commentaires

5 Réponses :


5
votes

Cela fonctionne. J'ai codé et j'ai eu 6 tests sur 6 passés. J'espère que cela vous aide tous. Codage heureux!

def borrowers_input(b):
    x=input()
    while x!='Checkouts':
        x=x.split('~')
        b.append(x)
        x=input()

def checkouts_input(c):
    x=input()
    while x!='EndOfInput':
        x=x.split('~')
        c.append(x)
        x=input()

def output():
    global books,borrower,checkout
    date=[]
    uname=[]
    name=[]
    Anum=[]
    title=[]
    for i in range(0,len(checkout)):
        date.append(checkout[i][2])

    for i in range(0,len(checkout)):
        uname.append(checkout[i][0])

    for i in range(0,len(uname)):
        for j in range(0,len(borrower)):
            if(uname[i] == borrower[j][0]):
                name.append(borrower[j][1])

    for i in range(0,len(checkout)):
        Anum.append(checkout[i][1])

    for i in range(0,len(Anum)):
        for j in range(0,len(books)):
            if(Anum[i] == books[j][0]):
                title.append(books[j][1])

    final=[]
    for i in range(0,len(checkout)):
        final.append(date[i]+'~'+name[i]+'~'+Anum[i]+'~'+title[i])
    final.sort()
    for i in range(0,len(final)):
        print(final[i])


books=[]
borrower=[]
checkout=[]
x=input()
x=input()
while x!='Borrowers':
    x=x.split('~')
    books.append(x)
    x=input()
borrowers_input(borrower)
borrower.sort()
checkouts_input(checkout)
output()


0 commentaires

0
votes
 str1=input()                           #do check indentation(must!!)

 (lst1,lst2,lst3)=([],[],[])

while str1!="EndOfInput":

if str1=="Books":
    while True:
        str1=input()
        if str1!="Borrowers":
            lst1.append(str1.split('~'))
        else:
            break
if str1=="Borrowers":
    while True:
        str1=input()
        if str1!="Checkouts":
            lst2.append(str1.split('~'))
        else:
            break

if str1=="Checkouts":
    while True:
        str1=input()
        if str1!="EndOfInput":
            lst3.append(str1.split('~'))
        else:
            break
l1=dict(lst1)
l2=dict(lst2)
l3=sorted(lst3,key=lambda t:t[0])
ll=[]

for i in range(len(l3)):
  ll.append([((l3[i][2],l2.get(l3[i][0]),l3[i][1],l1.get(l3[i][1])))])

  fl=sorted(ll, key=lambda t:t[0])
  for j in range(len(fl)):
     for k in fl[j]:
        print(k[0],k[1],k[2],k[3],sep="~")

0 commentaires

-1
votes
x=0       #do check indentation(must!!)
users={}
books={}
checkouts={}
while(True):
   s=input()
   if(s=="EndOfInput"):
      break
   if(s=="Books"):

        x=1
        continue
   if(s=="Borrowers"):

        x=2
        continue
   l=s.split("~")
   if(s=="Checkouts"):
        x=3
        continue
   if(x==1):

        books.__setitem__(l[0],l[1])
   if(x==2) :

        users.__setitem__(l[0],l[1])
   if(x==3):
        if(l[2]  not in checkouts.keys()):
            checkouts.__setitem__(l[2],[[users[l[0]],str(l[1]),books[l[1]]]])
        else:
            checkouts[l[2]].append([users[l[0]],str(l[1]),books[l[1]]])
for i in sorted(checkouts.keys()):
      checkouts[i].sort()
      for j in range(len(checkouts[i])):
         print(i,(*checkouts[i][j]),sep="~")

0 commentaires

0
votes

Voici ma proposition pour le code:

l=[]

due_date=[]

full_name=[]

while True:

    x=input()
    l.append(x)
    if x=="EndOfInput":
            inde=l.index("Books")
            inde2=l.index("Borrowers")
            inde3=l.index("Checkouts")
            l1=l[inde:inde2:1]
            l2=l[inde2:inde3:1]
            l3=l[inde3:len(l)-1:1]
            d1={l1[0]:l1[1::]}
            d2={l2[0]:l2[1::]}
            d3={l3[0]:l3[1::]}
            break


for e in d3.values():

    for j in e:
        x=j.split("~")
        x1=x[0] 
        x2=x[2] 
        for e1 in d2.values():
            for j1 in e1:
                xx=j1.split("~")
                xx1=xx[1]  
                if x1 in xx[0]:
                    due_date.append(x2)
                    full_name.append(xx1)

asscnu_title=[]

for e in d3.values():

    for j in e:
        x2=j.split("~")
        x2=x2[1]  
        for e1 in d1.values():
            for j1 in e1:
                if x2 in j1:
                    asscnu_title.append(j1)   

full_names=[]

for e in full_name:

    full_names.append("~{}".format(e))

asscnu_titles=[]

for e in asscnu_title:

    asscnu_titles.append("~{}".format(e))

final=zip(due_date,full_names,asscnu_titles)

final=list(final)

final.sort()

for e in final:

    print("".join(e))


0 commentaires

0
votes
#sorting the checkouts list in date order.
for i in range(len(lst)-1):
        l=lst[i].find("2019")
        for j in range(i+1,len(lst)):
            if lst[i][l:] > lst[j][l:]:
                (lst[i],lst[j])=(lst[j],lst[i])
    return lst

#sorting the names.
def sortn(lst):
    for i in range(len(lst)-1):
        for j in range(i+1,len(lst)):
            if lst[i][8:] > lst[j][8:]:
                (lst[i],lst[j])=(lst[j],lst[i])
    return lst

#sorting the duplicates in date according to the question.
def check_dup(lst1,lst2,lst3):
    l=lst1[0].find("2019")
    for i in range(len(lst1)-1):
        for j in range(i+1,len(lst1)):

            #if dates are same then check names
            if lst1[i][l:]==lst1[j][l:]:
                for k in range(len(lst2)):
                    if lst2[k][:7]==lst1[i][:7]:
                        n1=k
                    if lst2[k][:7]==lst1[j][:7]:
                        n2=k

                if n1>n2:
                    (lst1[i],lst1[j])=(lst1[j],lst1[i])

            #if the names are also same then check
            if lst1[i][:8]==lst1[j][:8] and lst1[i][15:]==lst1[j][15:]:
                for k in range(len(lst3)):
                    if lst3[k][:7]==lst1[i][8:15]:
                        m1=k
                    elif lst3[k][:7]==lst1[j][8:15]:
                        m2=k
                if m1>m2:
                    (lst1[i],lst1[j])=(lst1[j],lst1[i])
    return lst1

s=input()
s=input()
Books=[]
while ( s != 'Borrowers' ) :
    Books.append( s )
s=input()

Books.sort()                                   

Borrowers=[]
s=input()
while ( s != 'Checkouts' ) :
Borrowers.append( s )
s=input()

Borrowers=sortn(Borrowers)
s=input()
checkouts=[]
while(s != 'EndOfInput'):
    checkouts.append(s)
    s=input()

checkouts=sortl(checkouts)

checkouts=check_dup(checkouts,Borrowers,Books)

#printing acc to question.
for i in checkouts:
    l=checkouts[0].find("2019")
    print(i[l:],end="~")
    for j in Borrowers:
        if i[:7]==j[:7]:
            print(j[8:],end="~")
            break

    for k in Books:
        if i[8:15]==k[:7]:
            print(k)
            break

0 commentaires