Listeler ile ilgili basit bir program

drawn = int(input("Enter your six numbers: "))
bets = [3, 7, 11, 42, 34, 49]
hits = 0

for number in bets:
    if number in drawn:
        hits += 1

print(hits)

Kullanıcıdan 6 rakam girmesini istiyorum, ve girilen bilgiye göre bets içerisinden kaç tanesinin tuttuğunu gösteren bir program yazdım. Hata veriyor.
drawn = [1,3,11,34,66,99]
şeklinde yaparsam sorun kalmıyor. Ama ben kullanıcının elindeki rakamları girmesini istiyorum. Hata mesajı ise şöyle:

Traceback (most recent call last):
File “main.py”, line 1, in
drawn = int(input("Enter your numbers: "))
ValueError: invalid literal for int() with base 10: ‘5,7,42,123,34’

teşekkürler

Merhabalar,

input fonksiyonu kullanıcının girdiği değeri (sonunda bastığı enter’ı (i.e. “\n”) görmezden gelerek) string olarak geri döndürüyor, değil mi? Siz de mesela 5,7,42,123,34 giriyorsunuz, bu "5,7,42,123" olarak size geri dönüyor. Fakat siz bu dönen string’i komple tek bir int'e çevirmeye yelteniyorsunuz fakat olmuyor. Yapmanız gereken int'ten ziyade list'e çevirmek. Yani [5, 7, 42, 123] elde etmek. Benden bu kadar :d
İpucu: cevap drawn = list(input("Enter your six numbers: ")) değil :d

Aslında bunu denemiştim ve sizin de dediğiniz gibi cevap değil. Peki cevap ne? :slight_smile:

string’lerin split metodu:
https://python-istihza.yazbel.com/karakter_dizilerinin_metotlari1.html#split-rsplit-splitlines
https://docs.python.org/3.7/library/stdtypes.html#str.split

1 Beğeni

.split() metodu denedim fakat başarılı olamadım. Şöyle programa çözüm buldum en sonunda. Sizin önerdiğiniz yöntem ile çözüm nedir? Merak içerisindeyim.

drawn = []
for i in range(6):
    x = int(input("Bir değer giriniz: "))
    drawn.append(x)
bets = [3, 7, 11, 42, 34, 49]
hits = 0

for number in bets:
    if number in drawn:
        hits += 1
print(hits)
user_inp = input("Enter your six numbers: ")
drawn = user_inp.split(",")
1 Beğeni
user_inp = input("Enter your six numbers: ")
drawn = user_inp.split(",")
bets = [3, 7, 11, 42, 34, 49]
hits = 0
for number in bets:
    if number in drawn:
        hits += 1

print(hits)

Dediğiniz gibi yaptım fakat sonuç hits=0 çıkıyor. Yani tutmadı yazıyor sizin üstteki düzeltmeye göre.

Evet kusura bakmayın, string’i split’ledik yine string’lerden oluşan bir liste geldi elimize, yani
drawn = ["5", "7", "42", "123", "34"] oluyor.

Burada (en az) iki farklı yol ile istediğinizi elde edebiliriz:
1- bets'teki sayıları dolaşıp drawn'da var mı diye bakmak yerine, drawn'daki elemanları dolaşıp bets'te var mı diye bakabiliriz, tam bakarken de int'e çevirerek bakarız, yani

for inp in drawn:
    if int(inp) in bets:
        hits += 1

2- user_inp'i split’ledikten sonra elemanlarını int'e map ederiz,
drawn = [5, 7, 42, 123, 34] olmuş olur:

user_inp = input("Enter your six numbers: ")
raw_drawn = user_inp.split(",")
drawn = list(map(int, raw_drawn)) 
# veya list-comprehension ile: drawn = [int(inp) for inp in raw_drawn]

Bu sefer yazdığınız loop aynı kalabilir veya asıl gezdiğiniz listeyi yine değiştirebilirsiniz.

1 Beğeni

Böyle işlemler için ast.literal_eval da kullanılabilir.

>>> ast.literal_eval("[1, 2, 3, 5]")
[1, 2, 3, 5]
2 Beğeni