Wątek przeniesiony 2019-09-06 16:08 z przez cerrato.

kamień papier nożyce

Odpowiedz Nowy wątek
2019-09-06 15:42
0

Witam, jestem raczkującym programista, przerabiam sobie aktualnie temat funkcji i po zdobyciu już jakiejś wiedzy chciałem sobie poćwiczyć pisząc jakiś prosty program, do głowy wpadł pomysł z grą kamień papier nożyce, zamieszczę tutaj kod jaki udało mi się wyskrobać i byłbym wdzięczny jak ktoś o większej wiedzy podpowie co by można było zmienić żeby kod był bardziej czytelny (dla mnie osobiście jest, aczkolwiek myślę że dużo można by tutaj jeszcze zmienić), bądź jak go można zmienić/skrócić

import random
import sys

kpn = ['kamień','papier','nożyce']

def play_again():
    answer = None
    while answer != 'y' or answer != 'n':
        if answer == 'n':
            print("Dziękuje za gre, zamykam program!")
            sys.exit()
        elif answer == 'y':
            wynik()
        answer = input("Czy chcesz zagrać jeszcze raz? y/n: ")

def comp_choice():
    cc = random.choice(kpn)
    return cc

def player_choice():
    pc = input("wybierz kamień[k], papier[p] lub nożycze[n] : ")
    while True:
        if pc == 'k':
            pc = 'kamień'
            break
        elif pc == 'p':
            pc = 'papier'
            break
        elif pc == 'n':
            pc = 'nożyce'
            break
        pc = input("wybierz jeszcze raz: kamień[k], papier[p] lub nożycze[n] : ")
    return pc

def wynik():
    cc = comp_choice()
    pc = player_choice()
    print('gracz : ', pc)
    print("komputer : ",cc)
    if cc == pc:
        print("remis")
    elif cc == 'kamień' and pc == 'nożyce':
        print('Wygrywa komputer')
    elif cc == 'kamień' and pc == 'papier':
        print("Wygrywa gracz")
    elif cc == 'papier' and pc == 'kamień':
        print("Wygrywa komputer")
    elif cc == 'papier' and pc == 'nożyce':
        print("Wygrywa gracz")
    elif cc == 'nożyce' and pc == 'papier':
        print("Wygrywa komputer")
    else:
        print("wygrywa gracz")

wynik()
play_again()
edytowany 1x, ostatnio: cerrato, 2019-09-06 16:10

Pozostało 580 znaków

2019-09-07 01:38
1

I cyk

import random

class Item:
    def __init__(self, name, value):
        self.name = name
        self.value = value

    def __str__(self):
        return self.name

    def __lt__(self, other):
        if (self.value, other.value) in ((0, 2), (2, 0)):
            return self.value > other.value
        return self.value < other.value

    def __eq__(self, other):
        return self.value == other.value

items = {
    'k': Item('kamień', 0),
    'p': Item('papier', 1),
    'n': Item('nożyce', 2)
}

while True:
    player_choice = input('Papier/kamień/nożyce: ').lower()
    player_item = items[player_choice[0]]
    computer_item = items[random.choice(list(items))]

    if player_item == computer_item:
        result_msg = 'Remis'
    elif player_item < computer_item:
        result_msg = 'Przegrałeś'
    else:
        result_msg = 'Wygrałeś'

    print('{}, komputer wybrał {}'.format(result_msg, computer_item))

    if input('Jeszcze raz [t/n]? ') not in ('t', 'T'):
        break

print('Dziękuję za grę!')    

Pozostało 580 znaków

2019-09-08 12:15
1

Więc dobrze zmodyfikowałem kod i wygląda on następująco

import random
import sys

rock_stone_scissors = ['k','p','n']

def play_again():
    answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    while answer != "y":
        if answer == 'n':
            print("Dziękuje za gre! Zamykam program")
            sys.exit()
        else:
            print("Nie można udzielić takiej odpowiedzi!")
            answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    play()

def nameIT(ItemSymbol):
    if (ItemSymbol == 'k'): return 'kamień'
    if (ItemSymbol == 'p'): return 'papier'
    if (ItemSymbol == 'n'): return 'nożyce'

def play():
    player_choice = input("Wybierz kamień[k], papier[p] lub nożycze[n] : ")
    while player_choice != 'k' or 'p' or 'n':
        if player_choice == 'k' or 'p' or 'n':
            break
        player_choice = input("Wybierz jeszcze raz: kamień[k], papier[p] lub nożycze[n] : ")
    cpu_choice = random.choice(rock_stone_scissors)
    print('Gracz : ',nameIT(player_choice))
    print("Komputer : ",nameIT(cpu_choice))
    if nameIT(player_choice) == nameIT(cpu_choice):
        print("Remis")
    elif compare(player_choice,cpu_choice):
        print("Wygrał gracz")
    else:
        print("Wygrał komputer")
    play_again()

def compare(playerChoice,cpuChoice):
    results = {('k','n') : True,
               ('k','p') : False,
               ('p','k') : True,
               ('p','n') : False,
               ('n','p') : True,
               ('n','k') : False}
    return results [(playerChoice,cpuChoice)]

play()

Niestety poległem na pętli while, nie rozumiem dlaczego podczas wpisywania innej literki niż k,p,n nie spełnia warunku while tylko Od razu wywalą błąd porównania do słownika
rozchodzi się o linie od 23 do 27, jakieś sugestie?

Pozostało 580 znaków

2019-09-08 12:33
2

while player_choice != 'k' or 'p' or 'n':

IMHO znaczy while (player_choice != 'k') or 'p' or 'n': - ergo zawsze true. W jezyku logiki masz tutaj p v q v r gdzie dla kazdego wartosciowania sigma, sigma(q) == true

Sprobuj player_choice not in ['k', 'p', 'n']
Update: player_choice not in rock_stone_scissors

I nie wiem po co ten if w whilu...


01010100 01110101 01110100 01100001 01101010 00100000 01101110 01101001 01100101 00100000 01101101 01100001 00100000 01101110 01101001 01100011 00100000 01100011 01101001 01100101 01101011 01100001 01110111 01100101 01100111 01101111 00101110 00100000 01001001 01100011 00100000 01110011 01110100 01101111 01101110 01110100 00101110
edytowany 8x, ostatnio: stivens, 2019-09-08 12:44
:OO teraz działa jak należy, ifa dodałem już chyba w akcie desperacji bo nie potrafiłem sobie w żaden sposób z tym poradzić i szukałem na siłe jakiegoś rozwiązania, dzięki za pomoc:) - warjatt11 2019-09-08 12:44
Bodajze w Perlu by taki zapis przeszedl :D ale tworca Perla - Larry Wall - jest lingwista i widocznie sie na logice nie zna. Nie polecam :D - stivens 2019-09-08 12:48

Pozostało 580 znaków

2019-09-08 13:02

Program skończony, dodałem do niego jeszcze punktacje. Jestem usatysfakcjonowany jego działaniem.

import random
import sys

player_score = 0
cpu_score = 0
rock_stone_scissors = ['k','p','n']

def play_again():
    answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    while answer != "y":
        if answer == 'n':
            print("Dziękuje za gre! Zamykam program")
            print("Liczba punktów gracza: ",player_score)
            print("Liczba punktów komputera: ",cpu_score)
            if player_score > cpu_score:
                print("Wygrywa gracz")
            else:
                print('Wygrywa komputer')
            sys.exit()
        else:
            print("Nie można udzielić takiej odpowiedzi!")
            answer = input("Czy chcesz zagrać jeszcze raz? y/n : ")
    play()

def nameIT(ItemSymbol):
    if (ItemSymbol == 'k'): return 'kamień'
    if (ItemSymbol == 'p'): return 'papier'
    if (ItemSymbol == 'n'): return 'nożyce'

def play():
    global player_score, cpu_score
    player_choice = input("Wybierz kamień[k], papier[p] lub nożycze[n] : ")
    while player_choice not in ['k', 'p', 'n']:
        player_choice = input("Wybierz jeszcze raz: kamień[k], papier[p] lub nożycze[n] : ")
    cpu_choice = random.choice(rock_stone_scissors)
    print('Gracz : ',nameIT(player_choice))
    print("Komputer : ",nameIT(cpu_choice))
    if nameIT(player_choice) == nameIT(cpu_choice):
        print("Remis")
    elif compare(player_choice,cpu_choice):
        print("Wygrał gracz")
        player_score +=1
    else:
        print("Wygrał komputer")
        cpu_score +=1
    play_again()

def compare(playerChoice,cpuChoice):
    results = {('k','n') : True,
               ('k','p') : False,
               ('p','k') : True,
               ('p','n') : False,
               ('n','p') : True,
               ('n','k') : False}
    return results [(playerChoice,cpuChoice)]

play()

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0