Partage
  • Partager sur Facebook
  • Partager sur Twitter

Personne disparue France-IOI

18 janvier 2019 à 10:52:22

Bonjour,

Je suis bloquée sur un problème de France IOI, ça m'énerve !!!! ;-)

Voici le sujet :

Un personnage important de la cité n'est pas rentré chez lui hier soir et tout le monde est à sa recherche. Or tout habitant de la ville a un numéro unique qui lui est associé et doit signer une sorte de registre quand il sort de la ville. Vous souhaitez savoir si le registre a été signé, auquel cas il faudra étendre les recherches à l'extérieur de la ville.

Ce que doit faire votre programme :

On vous donne un entier, le numéro d'une personne recherchée, puis un entier tailleListe, et enfin tailleListe entiers parmi lesquels vous devez chercher le numéro de la personne. Si le numéro est présent dans la liste (il peut l'être plusieurs fois) vous devez afficher le texte "Sorti de la ville" sinon "Encore dans la ville".

Exemple

entrée :

42
5
1
7
172
2
41

sortie :

Encore dans la ville
***

Alors, voici ce que j'obtiens... je n'arrive pas à avoir un retour avec une réponse unique pour la personne recherchée... j'ai toujours une liste ou si je mets les conditions tout à gauche la réponse est unique mais fausse. HELP !!!

Voici le code (avec liste de l'exemple ci-dessus et avec la personne recherchée=7) :

persrech=7
tailleliste=5
liste=[1,7,172,2,41]

for loop in range(tailleliste):
    listepers = int(liste[loop]) 
    estsorti=(listepers==persrech)

    if estsorti:
        print("Est sorti de la ville")
    if not (estsorti):
        print("Encore dans la ville")

Voici la sortie :

Encore dans la ville
Est sorti de la ville
Encore dans la ville
Encore dans la ville
Encore dans la ville

Pourriez-vous m'aider, svp ?

Merci !

-
Edité par bdemontbeillard 18 janvier 2019 à 10:55:00

  • Partager sur Facebook
  • Partager sur Twitter
18 janvier 2019 à 11:21:15

tu veux savoir si le chiffre 7 est présent dans la liste du coup ? 

if persrech in liste:
    print( "sorti de la ville")



-
Edité par loumierex 18 janvier 2019 à 11:21:45

  • Partager sur Facebook
  • Partager sur Twitter
HOPE
18 janvier 2019 à 11:28:21

Merci j'ai essayé mais si je code sans un exemple de liste, ça ne marche pas...

C'est un exercice pour utiliser des variables booléenne... (True et False), je n'y arrive pas...

En fait je veux juste isoler le résultat de la personne recherchée (sorti de la ville ou encore dans la ville) parmi la liste de personnes donnée... je ne veux pas le résultat pour chacune des personnes de la liste...

ça paraît tout bête mais impossible !

Voici mon code initial :

persrech=int(input())
tailleliste=int(input())
for loop in range(tailleliste):
    listepers = int(input())
    estsorti=(listepers==persrech)
    if estsorti:
        print("Est sorti de la ville")
    if not (estsorti):
        print("Encore dans la ville")

-
Edité par bdemontbeillard 18 janvier 2019 à 11:40:58

  • Partager sur Facebook
  • Partager sur Twitter
24 février 2019 à 22:21:34

Bonsoir, 

Je suis sur le même exercice... mon code est le suivant : 

num_Pers_Recherchee = 42

Taille_Liste = 6

num_Liste = [5, 1, 7, 172, 2, 41]

if num_Pers_Recherchee in num_Liste :

    print("Sorti de la ville")

else :

    print("Encore dans la ville")

Il n'est pas bon non plus et ne me donne que 38% de réussite, tandis qu'avec ce code : 

num_Pers_Recherchee = int(input())
num_Liste = [int(input()),]
if num_Pers_Recherchee in num_Liste :
print("Encore dans la ville")
else :
print("Sorti de la ville")
J'arrive à 63%...
Du coup, je cherche encore.
  • Partager sur Facebook
  • Partager sur Twitter
25 février 2019 à 14:52:20

Ce sont les int(input()) qui ne sont pas bon, déjà tu ne parse pas Taille_Liste.

personne_recherchee = input()
taille_liste = int(input())
personnes_sorties = set()
for _ in range(taille_liste):
    personnes_sorties.add(input())

if personne_recherchee in personnes_sorties:
    print('Sorti de la ville')
else:
    print('Encore dans la ville')

Et puis sys.stdin c'est encore mieux, tu peux commencer tous tes programmes France IOI par les lignes 1 à 3 de ce code :

import sys

lines = sys.stdin.readlines()

personne_recherchee = lines[0]
la_taille_on_sen_fout = lines[1]
personnes_sorties = set(lines[2:])


if personne_recherchee in personnes_sorties:
    print('Sorti de la ville')
else:
    print('Encore dans la ville')



-
Edité par thelinekioubeur 25 février 2019 à 14:55:05

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
25 février 2019 à 15:44:14

print(("Encore dans la ville","Sorti de la ville")[int(input())in[int(input())for _ in range(int(input()))]])

-
Edité par Anonyme 25 février 2019 à 15:44:40

  • Partager sur Facebook
  • Partager sur Twitter
25 février 2019 à 17:30:13

Que voilà un exemple de clareté, c'est limpide, vraiment ^,^

  • Partager sur Facebook
  • Partager sur Twitter

typage structurel ftw

25 février 2019 à 20:51:23

Joli one-line.

Si on part là dedans on peut faire encore plus court :

i=input;print(("Encore dans", "Sorti de")[int(i())in[int(i()) for _ in range(int(i()))]]+" la ville")

et moins clair :

import zlib,base64;exec(zlib.decompress(base64.b64decode('eJzLtM3MKygtsS4oyswr0dBQcs1Lzi9KVUhJzCtW0lEKzi8qyVRISVXSjAZJZ2poambmwZlp+UUK8QqZeQpFiXnpqRowYc3YWG0lhZxEhbLMnBygVi4AlbYf1w==')))




-
Edité par thelinekioubeur 25 février 2019 à 20:53:59

  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 février 2019 à 0:11:53

Dans le même genre mais avec un petit exploit bien connu :

import base64,pickle;pickle.loads(base64.b64decode(b'gANjYnVpbHRpbnMKZXhlYwpxAFhtAAAAcHJpbnQoKCJFbmNvcmUgZGFucyBsYSB2aWxsZSIsIlNvcnRpIGRlIGxhIHZpbGxlIilbaW50KGlucHV0KCkpaW5baW50KGlucHV0KCkpZm9yIF8gaW4gcmFuZ2UoaW50KGlucHV0KCkpKV1dKXEBhXECUnEDLg=='))
  • Partager sur Facebook
  • Partager sur Twitter
27 février 2019 à 22:16:12

Bonsoir, 

Merci à tous pour vos réponses plus ou moins limpides !;-D

J'ai finalement pu trouver le bon résultat ! 

Merci thelinekioubeur pour les explications plus détaillées ;-)

-
Edité par Mary.E 27 février 2019 à 22:16:41

  • Partager sur Facebook
  • Partager sur Twitter
17 juillet 2019 à 9:58:33

Bonjour,

Quelques mois après ces échanges, je suis également bloquée sur le sujet pour la même raison que bdemontbeillard

Je ne sais pas comment stocker le résultat 'true' (le numéro est bien apparu dans la liste) pour que la boucle l'enregistre au lieu de l'écraser par le numéro suivant.

Du coup si le numéro recherché n'apparait pas en dernier dans la boucle, j'affiche toujours la condition 'false'.

L'exercice demande d'afficher une ligne et non pas une ligne par numéro sorti. Pouvez-vous m'aiguiller?

Voici mon code:

Merci

-
Edité par Ln56b 17 juillet 2019 à 10:12:18

  • Partager sur Facebook
  • Partager sur Twitter
17 juillet 2019 à 10:15:16

Bah il y a la solution plus haut, tu as juste à tester si numRech est dans inputs :

numRech=42
tailleListe=5
inputs=[5,1,7, 42, 8]

if numRech in inputs:
    print("Sorti de la ville")
else:
    print("Encore dans la ville")


Edit : ah bah tu as édité ton message donc le mien ne veut plus rien dire ^^

-
Edité par thelinekioubeur 17 juillet 2019 à 10:17:12

  • Partager sur Facebook
  • Partager sur Twitter
17 juillet 2019 à 10:20:37

désolée l'exemple de code que j'ai envoyé porte à confusion, j'ai mis les inputs pour tester. En réalité on ne les a pas donc le code ressemble à ça

-
Edité par Ln56b 17 juillet 2019 à 10:23:10

  • Partager sur Facebook
  • Partager sur Twitter
17 juillet 2019 à 11:42:16

Merci de placer ton code dans des balise et non pas de donner un screenshot qui obligerait à recopier ton code si on veut l'essayer.

La logique de ton code est incorrecte. En effet, ce n'est pas parce que leVoila est False qu'il est encore dans la ville. En outre, tu dois produire un seul affichage.

Tu peux procéder de plusieurs façons. Vu que de toute évidence tu débutes, je te conseille d'utiliser la technique du drapeau (regarde mon cours de découverte si tu veux d'autres exemples). Je reprends ta variable status qui va jouer le rôle de drapeau:

personne=input()
n=int(input())

# le drapeau
status="Encore dans la ville"

for _ in range(n):
    nro=input()

    if ???:
        # on change le drapeau
        # ton code
       
    
print(status)
  • Partager sur Facebook
  • Partager sur Twitter
18 juillet 2019 à 11:04:16

Merci PascalOrtiz pour le tuyau, j'ai pu résoudre le sujet grâce à la méthode "drapeau" en remplaçant True / False par les textes à afficher, parfait!

  • Partager sur Facebook
  • Partager sur Twitter
16 avril 2020 à 13:15:30 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


17 avril 2020 à 8:16:21

Si tu considères qu'initialement la personne est dans la ville : 

Tu recherches le nombre d'occurrences. Si c'est pair il est dehors (ou 0) il est dans la ville. Si c'est impair, il est dehors ?

-
Edité par raoullevert 17 avril 2020 à 8:16:59

  • Partager sur Facebook
  • Partager sur Twitter
20 septembre 2020 à 18:21:46 - Message modéré pour le motif suivant : Merci d'utiliser le bouton code du forum pour insérer votre code


20 septembre 2020 à 18:26:14

Bonjour,

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Je ferme ce sujet. En cas de désaccord, me contacter par MP.

  • Partager sur Facebook
  • Partager sur Twitter