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

Prosta gra w pythonie

Object Storage Arubacloud
+1 głos
1,609 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 (252,740 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ź 777 wizyt
pytanie zadane 11 stycznia 2018 w Python przez agatagrudzien Nowicjusz (140 p.)
0 głosów
0 odpowiedzi 233 wizyt
pytanie zadane 5 marca 2017 w Python przez Marek99 Nowicjusz (190 p.)
+2 głosów
3 odpowiedzi 7,377 wizyt
pytanie zadane 29 kwietnia 2016 w Python przez obl Maniak (51,280 p.)

92,551 zapytań

141,399 odpowiedzi

319,529 komentarzy

61,937 pasjonatów

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.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...