• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Prosta gra w pythonie

+1 głos
2,387 wizyt
pytanie zadane 19 grudnia 2021 w Python przez void6 Użytkownik (790 p.)

Cześć,

Od niedawna uczę się pythona i zacząłem pisać grę papier kamień nożyce.

Mam problem gdy zajdzie przypadek ROCK-ROCK wypisuje mi że przegrałem.

Zakładam że problem jest w IF statement. 

dzięki ;)  


import random
def games():
    game = ['Rock', 'Paper', 'Scissors']
    print('[1] Rock | [2] Paper, [3] Scissors')
    choice = int(input('Choose what you want: '))
    if choice == 1 or choice == 'Rock':
        print('You choose: Rock')
    if choice == 2 or choice == 'Paper':
        print('You choose: Paper')
    if choice == 3 or choice == 'Scissors':
        print('You choose: Scissors')
    if choice not in [1,2,3]:
        return

    x = random.choice(game)
    print('Your drew: ' + x)

    if choice == x:
        print('You win!')
    elif choice != x:
        print('You lose!')
        y = input('Want to play again ? Y/N \n')

    if y == 'Y' or y == 'y':
        games()
    if y == 'N' or y == 'n':
        return

games()

 

2 odpowiedzi

+3 głosów
odpowiedź 19 grudnia 2021 przez edutomek Dyskutant (8,380 p.)
choice = int(input('Choose what you want: '))
    if choice == 1 or choice == 'Rock':

Jeśli konwertujesz na int wynik input-a, to w choice będzie int. Nie ma sensu tego porównywać do napisów.

x = random.choice(game)

Tutaj do x przypisujesz losową wartość z listy trzech napisów, a potem:

if choice == x:

...porównujesz wartość typu int do wartości z listy (jakiegoś napisu).

Taki warunek nigdy nie będzie spełniony.

Zapewne chodziło o:

if game[choice-1] == x:

Choć chyba taki warunek nie będzie poprawny z punktu widzenia zasad gry. Ale to już niech adept Pythona sam dopracuje. Przypomnę tylko, że listy w Pythonie są indeksowane od zera.

Moja rada, którą daję początkującym studentom: jeśli są wątpliwości odnośnie tego, z jakimi wartościami/typami mamy do czynienia, można je wypisać (print).

0 głosów
odpowiedź 23 grudnia 2021 przez VBService Ekspert (256,600 p.)
edycja 23 grudnia 2021 przez VBService

Skoro pobierasz int-a od "gracza",

choice = int(input('Choose what you want: '))

to wygodnie by było żeby "wybór" komputera też był int-em, np.:

computer = random.randrange(1, 4)

 

 

przykład  [ on-line ]

import os, random

clearConsole = lambda: os.system('cls' if os.name in ('nt', 'dos') else 'clear')

(win, lose, draw) = (0, 0, 0)
game = ['Rock', 'Paper', 'Scissors']

def games():
    global win, lose, draw, game
    
    clearConsole()
    print('Win:', win, '  Lose:', lose, '  Draw:', draw)
    print('[1]', game[0], '| [2]', game[1], '| [3]', game[2])
    user = input('Choose what you want: ')
    if not user.strip().isdigit():
        games()
    else:
        user = int(user)
        if user not in [1,2,3]:
            games()

    clearConsole() 
    computer = random.randrange(1, 4)
    print('Your choice:', game[user-1])
    print('Computer choice:', game[computer-1])
 
    if user == computer:
        print('Tie in the game!')
        draw += 1
    elif (user == 1 and computer == 3) or \
         (user == 2 and computer == 1) or \
         (user == 3 and computer == 2):
        print('You win!')
        win += 1
    else:
        print('You lose!')
        lose += 1
        
    again = input('\nWant to play again ?\n (y)es, Enter - play again\n (n)o or any - exit\n: ')
    if again.lower() == 'y' or again.strip() == '':
        games()
 
games()

 

 

P.S How to style multi-line conditions in 'if' statements in Python?

Podobne pytania

+2 głosów
1 odpowiedź 1,057 wizyt
pytanie zadane 11 stycznia 2018 w Python przez agatagrudzien Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 320 wizyt
pytanie zadane 5 marca 2017 w Python przez Marek99 Nowicjusz (190 p.)
+2 głosów
3 odpowiedzi 7,908 wizyt
pytanie zadane 29 kwietnia 2016 w Python przez obl Maniak (51,300 p.)

93,631 zapytań

142,553 odpowiedzi

323,056 komentarzy

63,139 pasjonatów

Advent of Code 2025

Top 15 użytkowników

  1. 2900p. - dia-Chann
  2. 2870p. - DziarnowskiJ
  3. 2827p. - Łukasz Piwowar
  4. 2783p. - raydeal
  5. 2758p. - Adrian Wieprzkowicz
  6. 2713p. - rucin93
  7. 2579p. - Łukasz Eckert
  8. 2459p. - CC PL
  9. 2184p. - Maurycy W
  10. 2082p. - Michal Drewniak
  11. 1885p. - robwarsz
  12. 1811p. - rafalszastok
  13. 1600p. - Rafał Trójniak
  14. 1588p. - Tomasz Bielak
  15. 1494p. - ssynowiec
Szczegóły i pełne wyniki

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...