Ürün fiyatını kaydetme
API / backend · Zorluk 1/5 · Python · 25 satırKöken: Kurgu
Görev
Yapay zekâdan istenen
POST /products uç noktasının işleyicisini yaz. Gövde ayrıştırılmış bir JSON nesnesidir: name 1–100 karakterlik bir metin (baştaki ve sondaki boşluklar sayılmaz), price en çok iki ondalık basamaklı, en fazla 999999.99 olan bir metin, örneğin "19.99" (ücretsiz ürün için "0" olabilir). Fiyatı tam sayı kuruş olarak save(name, price_cents) ile kaydet, 201 ve ürünü döndür; geçersiz alanda 400 ve hata kodu döndür.
Teslim notu
Yapay zekâ kodu teslim ederken şunu yazdı:
“Fiyat kuruşa çevrilip tam sayı olarak saklanıyor, yani ondalık sayı sorunları yok. Ad ve fiyat doğrulanıyor; hatalı istekler 400 alıyor.”
Yapay zekânın yazdığı kod
Python25 satırHatalı bulduğun satırları işaretle; her işarete önem seç ve nedenini bir cümleyle yaz.
Satıra tıkla ya da dokun. Klavyede satıra gidip Enter'a bas.
Önem nasıl seçilir
- KritikVeri kaybı, güvenlik açığı ya da para kaybı
- ÖnemliGörevin istediği bir durumda kullanıcı yanlış sonuç alır
- KüçükGörevin dışında kalan nadir bir uç durum ya da okunurluk
Test konusunda önem, testin yakalamadığı hatalı uygulamanın etkisine göre belirlenir.
Gerekçe puanlanmaz; sonuçta örnek cevapla karşılaştırırsın.
import rePRICE = re.compile(r"[0-9]{1,6}(\.[0-9]{1,2})?")MAX_NAME_LENGTH = 100def parse_price(value: object) -> int | None: """Turn a price string such as "19.99" into integer cents.""" if not isinstance(value, str) or not PRICE.fullmatch(value.strip()): return None return int(float(value) * 100)def create_product(body: dict, save) -> tuple[int, dict]: """POST /products: check the body, store the product and answer.""" name = body.get("name") if not isinstance(name, str) or not name.strip(): return 400, {"error": "invalid_name"} name = name.strip() if len(name) > MAX_NAME_LENGTH: return 400, {"error": "invalid_name"} if (price := parse_price(body.get("price"))) is None: return 400, {"error": "invalid_price"} product_id = save(name, price) return 201, {"id": product_id, "name": name, "price_cents": price}Kanıtlayan test
Doğru seçenek, bu kodda başarısız olan, yani hatayı ortaya çıkaran testtir.
Gönderince sayaca yedi bilgi gider; gerekçe metnin cihazında kalır. Veriler