Python Taş, kağıt, makas oyunu hep berabere sonuçlanıyor

SynioZ

Decapat
Katılım
6 Şubat 2023
Mesajlar
345
Çözümler
3
Daha fazla  
Sistem Özellikleri
Rx 570
i5 4460
16gb
Cinsiyet
Erkek
Merhaba arkadaşlar, 2 haftadır Python dersi alıyorum ve site benden ödev olarak taş, kağıt, makas oyunu yapmamı istedi. Ancak burada her şeyi yapmama rağmen ne seçersem seçeyim berabere bitiyor. Kodu yaklaşık 1 saat hatayı aradım ancak bulamadım.
Python:
import random as r

randompc = {
    1: 'Taş',
    2: 'Kağıt',
    3: 'Makas'
}
userselect = {
    'rock': 1,
    'paper': 2,
    'scissos': 3,
    'taş': 1,
    'kağıt': 2,
    'makas': 3,
    'tas': 1,
    'kagit': 2

}
usertrue = ['evet', 'yes', 'olur']
userfalse = ['yok', 'hayır', 'no', 'hayir', 'olmaz', 'çık', 'exit', 'cik']

def winandlose(userinput, inputn):
    pcselection = pcrandom()
    pcput = r.randint(1,3)
    if (pcput == 3 and userinput == 1) or (pcput == 1 and userinput == 2) or (pcput == 2 and userinput == 3):
        return f'Sen {inputn} dedin. Bilgisayar {pcselection} dedi.\nTebrikler sen kazandın!'
    elif (pcput == 1 and userinput == 3) or (pcput == 2 and userinput == 1) or (pcput == 3 and userinput == 2):
        return f'Sen {inputn} dedin. Bilgisayar {pcselection} dedi.\nSen kaybettin.'
    else:
        return f'Sen {inputn} dedin. Bilgisayar {pcselection} dedi.\nBerabere.'

def hello():
    n = input('Taş, Kağıt, Makas oynamak ister misiniz?\nSiz: ')
   
    firstput = n.lower()
    while True:
        if firstput in usertrue:
            print('Bunu duyduğuma sevindim!')
            inputn = input('Taş, Kağıt, Makas oyununa hoş geldiniz\nLütfen bir seçim yapın(Taş, Kağıt, Makas vb.)\nSiz: ')
            userinput = inputn.lower()
            userselection = userselect.get(userinput)

            if userselection:
                winandloser = winandlose(userinput, inputn)
                print(winandloser)
                break

        elif firstput in userfalse:
            print('Bunu duyduğuma üzüldüm program kapatılıyor...')
            break
        else:
            break

def pcrandom():
    random = r.randint(1,3)
    return randompc.get(random)


hello()

1707566106105.png


1707566126581.png
 
Son düzenleme:
Buraya atacağınız kodları ekran fotoğrafı şekilinde atmazsanız daha iyi olur. Rica etsem kodu atabilir misiniz?

Hocam tekrar bakar mısınız rica etsem? Düzenledim. RAR halinde paylaşmıştım kodu, direkt paylaşmam söylendi, o yüzden güncelledim.
 
Merhaba, iflerde sıkıntı var.

şu aşağıdaki kodu;

print(pcput)
print(userinput)

sen şunu dedin, bilgisayar bunu dedi diye ifleri yazdığınız yere ekleyip çalıştırırsanız sorunu göreceksiniz.
 
Userinput değil userselection yollayacaksın içeriye. Emin değilim ama bir dene. Taş kağıt makas çok daha kolay şekilde yazılabilmeli ama.

Kod yanlış bu arada. İki farklı randint alıyrosun. PC'nin seçtiğini 2 farklı değer var.
Çalışır duruma getirdim ama bunu daha basit yazmaya çalışmalısın.
Kod:
import random as r


randompc = {

    1: 'Taş',

    2: 'Kağıt',

    3: 'Makas'

}

userselect = {

    'rock': 1,

    'paper': 2,

    'scissos': 3,

    'taş': 1,

    'kağıt': 2,

    'makas': 3,

    'tas': 1,

    'kagit': 2


}

usertrue = ['evet', 'yes', 'olur']

userfalse = ['yok', 'hayır', 'no', 'hayir', 'olmaz', 'çık', 'exit', 'cik']


def winandlose(userinput, inputn):

 

    pcput = r.randint(1,3)

    pcselection = randompc.get(pcput)

 

    if (pcput == 3 and userinput == 1) or (pcput == 1 and userinput == 2) or (pcput == 2 and userinput == 3):

        return f'Sen {inputn} dedin. Bilgisayar {pcselection} dedi.\nTebrikler sen kazandın!'

    elif (pcput == 1 and userinput == 3) or (pcput == 2 and userinput == 1) or (pcput == 3 and userinput == 2):

        return f'Sen {inputn} dedin. Bilgisayar {pcselection} dedi.\nSen kaybettin.'

    else:

        return f'Sen {inputn} dedin. Bilgisayar {pcselection} dedi.\nBerabere.'


def hello():

    n = input('Taş, Kağıt, Makas oynamak ister misiniz?\nSiz: ')

 

    firstput = n.lower()

    while True:

        if firstput in usertrue:

            print('Bunu duyduğuma sevindim!')

            inputn = input('Taş, Kağıt, Makas oyununa hoş geldiniz\nLütfen bir seçim yapın(Taş, Kağıt, Makas vb.)\nSiz: ')

            userinput = inputn.lower()

            userselection = userselect.get(userinput)

            print(inputn,userinput,userselection)

            if userselection:

                winandloser = winandlose(userselection, userinput)

                print(winandloser)

                break


        elif firstput in userfalse:

            print('Bunu duyduğuma üzüldüm program kapatılıyor...')

            break

        else:

            break


hello()
 
Son düzenleme:
Merhaba, iflerde sıkıntı var.

Şu aşağıdaki kodu;

Print(pcput)
Print(userinput)

Sen şunu dedin, bilgisayar bunu dedi diye ifleri yazdığınız yere ekleyip çalıştırırsanız sorunu göreceksiniz.

Hocam dediğinizi yaptım ve hatayı gördüm. Kullanıcıdan alınan veri integer olarak değil string olarak iletiliyor. Buna bir değişken tanımlamıştım sanırım ama kullanmamışım tekrardan deniyorum şimdi.

Hocam dediğinizi yaptım ve hatayı gördüm. Kullanıcıdan alınan veri integer olarak değil string olarak iletiliyor. Buna bir değişken tanımlamıştım sanırım ama kullanmamışım tekrardan deniyorum şimdi.
Hocam 2 defa almasının sebebi random seçilen sayı Taş, Kağıt, Makas çevrilebilmesi için yaptım. Hatayı çözemeyince ChatGPT'de sordum ancak aynı şeyleri söyleyip durdu. İlk dediğinizi bende fark ettim şimdi düzelteceğim.
 
Hocam printle userinput ve pcput değerlerini yazdırdım. Sorun şu ki userinput değeri sayı değeri olarak gelmiyor ben taş yazdıysam eğer taş olarak geliyor. O yüzdende userinput değeri hiçbir zaman 1,2 veya 3'e eşit olamıyor. Yanlış bir şeyler yapmadıysam sorun böyle olması lazım.

Naçizane tavsiyemdir hocam sorun olduğunu düşündüğünüz yerlere Print'le yazdırıp hataları görebilirsiniz. Visual Studio'da satırın sol tarafına kırmızı bir nokta koyup kod o kısma geldiğinde kodu durduruyor ve bu sayede o andaki değerleri görebiliyoruz aynısı Code'da varsa ondan da yapabilirsiniz.
 
Hocam printle userinput ve pcput değerlerini yazdırdım. Sorun şu ki userinput değeri sayı değeri olarak gelmiyor ben taş yazdıysam eğer taş olarak geliyor. O yüzdende userinput değeri hiçbir zaman 1,2 veya 3'e eşit olamıyor. Yanlış bir şeyler yapmadıysam sorun böyle olması lazım.
Evet hocam Count ve Luthienn hocalarım sayesinde düzelttim.

Şükür çalışıyor :D
1707568010929.png
 
Yardım eden herkese teşekkürler ve bir soru daha sormak istiyorum. Sizce kod iyi yazılmış mı? biraz karmaşık sanırım ChatGPT öyle söyledi ama pek güvenmiyorum ona. :D
 

Technopat Haberler

Yeni konular

Geri
Yukarı