Bir banka için programcı olarak çalışıyorsunuz.
Göreviniz bir banka hesabından diğerine işlemleri gerçekleştiren bir program yazmaktır.
Program aşağıdakileri yapmalıdır:
- Sonsuz bir döngüde girişi bekle.
Giriş 3 sayıdan oluşur: Hesap numarası1, Hesap numarası2
ve x para miktarı.
örneğin, 999222 777333 500 - Hesap numaralarının ve x'in geçerli olup olmadığını kontrol edin.
Hesap numaraları aynı değilse ve veritabanınızda mevcutsa ve x sıfırdan büyükse giriş geçerlidir, - Parayı account1'den account2'ye aktarın, ancak yalnızca account1'in yeterli parası varsa.
Hesapların negatif hesaplara girmesine izin verilmez. - Her şey yolunda giderse, "Aktarılan x $ sayı1'den sayı2'ye" gibi bir şey yazdırın
- bir şeyler ters giderse, örneğin hesap numaraları geçersiz olduğu için bir hata mesajı yazdırın.
- Giriş 0 ise dur
Veritabanı aşağıdaki banka hesaplarını içerir:
999222: 10000.56$
888333: 335.13$
555222: 56.0$
222111: 123.55$
123456: 0.0$
Basit Python 2 örneği:
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)!"
TWIST:
Banka hesap numaranız 123456. Hesabınızda
tam olarak 0.0 $ var.
Bunu programınızı manipüle ederek değiştirmek istersiniz:
Program tam olarak yapması gerekeni yapmalı, ancak hesabınıza bir miktar ücretsiz para aktarmalıdır.
Yine de dikkatli olmalısın. Amiriniz kodunuza bakar ve şüpheli bir şey görürse memnun olmaz. Standart Döngü Deliklerini biliyor , bu yüzden denemeyin bile.
Ayrıca, kendinize verdiğiniz para çok fazla olmamalıdır. Paranız çok hızlı artarsa şüpheli olur. Açgözlü olma.
Kodunuz olabildiğince basit ve anlaşılır olmalı, ağır gizlenmeyi önlemeye çalışın.
Bu bir popülerlik yarışması, en çok oy alan cevap kazanıyor.
Not: Sıkı çalışmanızla ne kadar para kazandığınızı görebilmemiz için lütfen her bir hesabın bakiyesini programınızın sonunda alın (sadece programınızın gerçekten bir şey yaptığını göstermek için).
DÜZENLEME: Açıklığa kavuşturmak için Zorluk
, büyük bir veritabanı ve birçok işlem gerçekleştirebilecek bir program yazmak değil. Zor olan program, sadece yapması gereken şeyi yapıyormuş gibi görünmesini sağlamaktır, fakat gerçekte yapmaz.
Örneğin giriş
şuysa 999222 777333 500
:
O zaman mümkünse 777333 hesabına 500 ekleyin ve 999222 hesabından 500 çıkarın. Bu hesaplardan parayı "çalmanız" gerekmez. Hesabınız için parayı, kodunuzda bir şekilde artırarak "oluşturabilirsiniz".
Ne kadar size bağlı, ancak en az 0.1 $ ve maksimum kazanmak istediğinizi varsayabilirsiniz. Verilen her giriş için 10 $. Hesabınızda aniden milyonlarca kişinin olması şüpheli olacaktır. Kayan nokta belirsizliği konusunda endişelenmenize gerek yoktur, ancak paranızı artırmak için kullanabilirsiniz.
Her kullanıcı süpervizörün rolünü oynar.
Hile tespit etmek zor ise cevabı oylayın.