2016-04-04 11 views
-1

Bu soru daha fazla olduğunu rağmen kontrol değişkeni değişmez bir "Ben ANDOLSUN çalışması gerekir MY KOD" ... siz "Sesimin kısmına bakarsanızSTR karşılaştırması python'da gerçekten nasıl çalışır? Kodum doğru gibi görünüyor ama Python farklı kullanıcı girişlerine

Rock, Paper, Scissors "python'un temellerini öğrenmeye çalışırken yazdığım oyunlar, kullanıcının giriş strini bir sayıya dönüştüren bir bölüm var. Nedense

playerChoice = input('Rock, paper, scissors: ') 
if playerChoice is ('Rock'or'rock'): 
    playerChoiceNum = 0 
    print ('PLAYER CHOICE IS ROCK') 
if playerChoice is 'Paper' or 'paper': 
    playerChoiceNum = 1 
    print ('PLAYER CHOICE IS PAPER') 
if playerChoice is 'Scissors' or 'scissors' or 'Scissor' or 'scissor': 
    playerChoiceNum = 2 
    print ('PLAYER CHOICE IS SCISSORS') 

, piton playerChoiceNum için '0' olursa olsun bir giriş olarak yazdıklarınızla her zaman ayarlar. == Karşılaştırma işlecini 'yerine' yerine kullanmak yerine kullanıyorum.

Bazen playerChoiceNum = 2 takılıp karar verir ve bunu bana nasıl piton aslında hakkında daha fazla öğretecek hissediyorum bazen = 0.

merak ediyorum bu neden oluyor için playerChoiceNum yapıştı dil olarak işlev görür, ama benim için yaşam, neler olduğunu anlayamaz. Herhangi bir yardım mutluluk duyacaktır!

Kendiniz için çalıştırmayı denemek isterseniz, tam "oyun" kodum.

from random import randint 
playerScore = 0 
while playerScore < 3: 
    print('hey person, please choose rock, paper or scissors to try and beat the computer 3 times') 
    playerChoice = input('Rock, paper, scissors: ') 
    if playerChoice is ('Rock'or'rock'): 
     playerChoiceNum = 0 
     print ('PLAYER CHOICE IS ROCK') 
    if playerChoice is 'Paper' or 'paper': 
     playerChoiceNum = 1 
     print ('PLAYER CHOICE IS PAPER') 
    if playerChoice is 'Scissors' or 'scissors' or 'Scissor' or 'scissor': 
     playerChoiceNum = 2 
     print ('PLAYER CHOICE IS SCISSORS') 

    computerChoiceNum = randint(0,2) 

    if computerChoiceNum == 0: 
     print('COMPUTER HAS CHOSEN ROCK') 
    elif computerChoiceNum == 1: 
     print('COMPUTER HAS CHOSEN PAPER') 
    elif computerChoiceNum == 2: 
     print('COMPUTER HAS CHOSEN SCISSORS') 

    if playerChoiceNum == computerChoiceNum: 
     print('DRAW') 
    if playerChoiceNum == 0 and computerChoiceNum == 1: 
     print('COMPUTER WINS') 
    if playerChoiceNum == 0 and computerChoiceNum == 2: 
     print('PLAYER WINS') 
     playerScore+=1 
    if playerChoiceNum == 1 and computerChoiceNum == 2: 
     print('COMPUTER WINS') 
    if playerChoiceNum == 1 and computerChoiceNum == 0: 
     print('PLAYER WINS') 
     playerScore+=1 
    if playerChoiceNum == 2 and computerChoiceNum == 0: 
     print('COMPUTER WINS') 
    if playerChoiceNum == 2 and computerChoiceNum == 1: 
     print('PLAYER WINS') 
     playerScore+=1 
    print('DEBUG INFO:\n' 
      'Player Choice: ' + str(playerChoice)+'\n' + 
      'Player Choice Number Conversion: ' + str(playerChoiceNum)+'\n' + 
      'Computer Choice: ' + str(computerChoiceNum)+'\n' + 
      'Player Score: ' + str(playerScore)+'\n') 
+0

Bu, yaygın bir çaylak hatası gibi görünüyor, ancak elden ne arayacağınızı bilmek zor olduğu için yeni başlayanlar için hata yapamazsınız. Ancak, yinelenen soru ve cevapları dikkatle okumalısınız. Python iyi çalışıyor, ancak mantıksal operatörleri şu anda yaptığını düşündüğünüz gibi çalışmıyor. –

+0

Evet, daha önce neyi başarmaya çalıştığınıza dair neyi ve niçin bilmediğiniz sorusu önceden sorulmuş olup olmadığını anlamak zor. Beni doğru yönde gösterdiğin için teşekkürler, çok teşekkürler! –

cevap

3

playerChoice iki dizeleri birine eşitse

if playerChoice is ('Rock'or'rock'): 

kontrol etmez Bu hat. Sadece playerChoice isminin 'Rock' dizgisi ile aynı nesneyi ifade edip etmediğini kontrol eder. İstediğin olan

if playerChoice in ('Rock', 'rock'): 

vb

bu bölümünde, öyle düşündüğün yapmıyor
+0

Cevabınız için teşekkür ederiz, girişi ve zamanınızı gerçekten takdir edin. –

3

:

if playerChoice is ('Rock'or'rock'): 
    playerChoiceNum = 0 
    print('PLAYER CHOICE IS ROCK') 
if playerChoice is 'Paper' or 'paper': 
    playerChoiceNum = 1 
    print('PLAYER CHOICE IS PAPER') 
if playerChoice is 'Scissors' or 'scissors' or 'Scissor' or 'scissor': 
    playerChoiceNum = 2 
    print('PLAYER CHOICE IS SCISSORS') 

is iki nesnenin eşitlerse değilse, aynı nesne olup olmadığını karşılaştırır .

or, yaptığınız gibi kullanılamaz. Eğer kayıt düzeni listeden veya içinde kullanabilirsiniz Alternatif

if playerChoice == 'Rock' or playerChoice == 'rock': 
    playerChoiceNum = 0 
    print('PLAYER CHOICE IS ROCK') 
if playerChoice == 'Paper' or playerChoice == 'paper': 
    playerChoiceNum = 1 
    print('PLAYER CHOICE IS PAPER') 
if playerChoice == 'Scissors' or playerChoice == 'scissors' or playerChoice == 'Scissor' or playerChoice == 'scissor': 
    playerChoiceNum = 2 
    print('PLAYER CHOICE IS SCISSORS') 

:

ben aşağıdakileri denemenizi öneririz

if playerChoice in ['Rock', 'rock']: 
    playerChoiceNum = 0 
    print('PLAYER CHOICE IS ROCK') 
etc... 

Ya küçük harf sizin girişi:

if playerChoice.lower() == 'rock': 
    playerChoiceNum = 0 
    print('PLAYER CHOICE IS ROCK') 
etc... 

Öğreniminizdeki bir sonraki adımınız, @idjaw tarafından önerildiği gibi sözlükleri kullanacaktır.

+0

teşekkürler, tam cevabı takdir edin. Kesinlikle sözlükler üzerinde çalışacak, "bunu 15 dakika içinde bitir" tipi bir meydan okuma yapmaya çalışıyordum ve açıkça verimlilik için gitmedim haha! 9-11 satırları için, tam anlamıyla soruyordum "Eğer oyuncunun kağıda eşit olması doğruysa VEYA 'kâğıt' eşittirse, sonra bunu yap"? Şimdi mantığımdaki hatayı görüyorum eğer .. –

3

Bu, koşullu kontrollerinizin yaptığını düşündüğünüz şeyi yapmamasıdır.Bunu yıkmak Eğer

if playerChoice is ('Rock'or'rock') 

bu olup bitenler:

Bu: ('Rock' or 'rock')

'Rock' için değerlendirmek Will ve sonra is aslında onlar olup olmadığını belirlemek için playerChoice ile karşılaştırır 'Kaya' dizesiyle aynı nesne.

Sen Çeklerinizin işlemek için bir sözlük gibi bir şey kullanmak Ayrıca, gerçekten o yeniden düzenlemelisiniz

if playerChoice in ('Rock', 'rock') 

kullanmak istiyorum:

choices = { 
    "rock": 0, 
    "paper": 1, 
    "scissors": 2 
} 

print("Player choice is {}".format(choices.get(playerChoice.lower(), "an invalid entry"))) 

Yani, ne her şeyi o orada bir vaka ayarı altında tutuluyor (küçük harf). Böylece, playerChoice içinde tutulan girişiniz lower() yöntemi ile küçük harfe ayarlanacak ve daha sonra uygun numarayı almak için basit bir sözlük araması olacaktır.

+0

Cevabınız için teşekkürler, çeklerimi işlemek için şimdi bir sözlük kullandığınızdan emin olun. Ayrıca, bana gelecekte kullanışlı olacak ".lower()" işlevini gösterdiğiniz için teşekkürler! –

+0

@MarkD. Hoşgeldiniz! İyi şanslar. – idjaw

İlgili konular