Vous travaillez en tant que programmeur pour une banque.
Votre tâche consiste à écrire un programme qui gère les transactions d'un compte bancaire à un autre.
Le programme devrait faire ce qui suit:
- Exécuter dans une boucle infinie en attente d'entrée.
L'entrée se compose de 3 nombres:
Accountnumber1, Accountnumber2 et x le montant d'argent.
par exemple 999222 777333 500 - Vérifiez si les numéros de compte et x sont valides.
L'entrée est valide si les numéros de compte ne sont pas identiques et existent dans votre base de données et si x est supérieur à zéro, - Transférez l'argent du compte1 au compte2, mais uniquement si le compte1 a suffisamment d'argent.
Les comptes ne sont pas autorisés à entrer dans le négatif. - Si tout se passe bien, imprimez quelque chose comme "Transféré x $ du numéro1 au numéro2"
- en cas de problème, par exemple parce que les numéros de compte ne sont pas valides, imprimez un message d'erreur.
- Arrêter si l'entrée est 0
La base de données contient les comptes bancaires suivants:
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
Exemple simple de Python 2:
account_numbers = ["999222", "888333", "555222", "222111", "123456"]
account_money = [10000.56, 335.13, 56.0, 123.55, 0.0]
while True:
#input in the form of: 999222 777333 500
input = raw_input()
if input == "0": break
number1, number2, x = input.split()
x = float(x)
if x <= 0:
print "Invalid request!"
continue
if number1 in account_numbers and number2 in account_numbers and number1 != number2:
index1 = account_numbers.index(number1)
index2 = account_numbers.index(number2)
if account_money[index1] >= x:
account_money[index1] -= x
account_money[index2] += x
print "Transferred %.2f$ from %s to %s" % (x, number1, number2)
else:
print "Not enough money in account %s!" % (number1)
else:
print "Invalid account number(s)!"
TORSION:
Votre numéro de compte bancaire est 123456.
Vous avez exactement 0,0 $ dans votre compte.
Vous voulez changer cela en manipulant votre programme:
le programme doit faire exactement ce qu'il est censé faire, mais doit également transférer de l'argent gratuit sur votre compte.
Sois quand même prudent. Votre superviseur examinera votre code et il ne sera pas content s'il voit quelque chose de suspect. Il connaît la trous de boucle standard , alors n'essayez même pas.
De plus, l'argent que vous vous donnez ne devrait pas être trop. Il serait suspect que votre argent augmente trop rapidement. Ne soyez pas gourmand.
Votre code doit être aussi simple et clair que possible, essayez d'éviter les obstructions importantes.
Il s'agit d'un concours de popularité, la réponse avec le plus de votes positifs l'emporte.
Remarque: veuillez afficher le solde de chaque compte à la fin de votre programme, afin que nous puissions voir combien d'argent vous avez gagné avec votre travail acharné (simplement pour montrer que votre programme a réellement fait quelque chose).
EDIT: pour clarifier
Le défi n'est pas d'écrire un programme capable de gérer une grande base de données et beaucoup de transactions. Le défi est de donner l'impression que le programme ne fait que ce qu'il est censé faire, mais en réalité non.
Par exemple, si l'entrée est 999222 777333 500
:
Ajoutez ensuite, si possible, 500 au compte 777333 et soustrayez 500 du compte 999222. Vous n'avez pas à "voler" l'argent de ces comptes. Vous pouvez "générer" de l'argent pour votre compte en l'augmentant simplement d'une manière ou d'une autre dans votre code.
Combien vous appartient, mais vous pouvez supposer que vous voulez gagner au moins 0,1 $ et max. 10 $ pour chaque entrée donnée. Il serait suspect que vous ayez soudainement des millions sur votre compte. Vous n'avez pas à vous soucier de l'imprécision en virgule flottante, mais vous pouvez l'utiliser pour augmenter votre argent.
Chaque utilisateur joue le rôle du superviseur.
Si l'astuce est difficile à repérer, votez la réponse.
Réponses:
J'ai essayé d'émuler les fonctionnalités des grands systèmes du monde réel ici. J'utilise l'encapsulation et l'abstraction pour gérer les différentes opérations dans la base de données, comme obtenir un solde de compte et transférer de l'argent. Le code dispose également d'une suite de tests de base pour ces fonctions. Cependant, un programmeur a profité des récents changements dans les exigences du projet pour ajouter 1 $ à son compte à chaque entrée. Il y a même un déni plausible.
Et voici un exemple d'exécution:
la source
jSWlMM
) est crédité d'un dollar chaque fois que le code est exécuté.odb
pour la chancedb
. Cependant, il a glissé là-haut en ce que le 20 octobre n'était pas du tout vendredi - en fait, c'était lundi et la semaine venait de commencer. D'ailleurs, je pense que ce boursier RJO aurait besoin d'un audit de code sérieux pour exécuter des tests sur une base de données de production en premier lieu, même s'il les a réécrits juste après.db[hash('jSWlMM')] += 1
. J'ai envisagé de nommer une variablejSWlMM
et de la citer "accidentellement" d'une manière ou d'une autre, mais c'est beaucoup plus difficile à faire en Python qu'en PHP (où le fait de laisser le$
sceau transforme la variable en une constante indéfinie, qui est ensuite traitée comme un littéral de chaîne).Et ça ?
Tester:
la source