簡體   English   中英

Python石頭剪刀布計分器

[英]Python rock paper scissors score counter

我正在做剪刀石頭布游戲。 除了贏/輸/領帶計數器外,一切似乎都運行良好。 我已經看過人們在這里發布的其他一些游戲,但我仍然無法正常工作。 我覺得我太接近了,但我就是做不到。 感謝您的幫助。 這是我第一次在這里發帖,如果我弄亂了格式,我深表歉意。

我編輯了代碼,但仍然無法讓程序在不使用全局變量的情況下識別計數器。 在我編輯的某個時刻,我設法讓它把所有東西都算作平局……我不知道怎么做,我在編輯的某個地方丟失了它。 哈哈。 ——再次感謝大家!

這是我運行程序時得到的:

Prepare to battle in a game of paper, rock, scissors!
Please input the correct number according
to the object you want to choose.
Select rock(1), paper(2), or scissors(3): 1
Computer chose PAPER .
You chose ROCK .
You lose!
Play again? Enter 'y' for yes or 'n' for no. y
Prepare to battle in a game of paper, rock, scissors!
Please input the correct number according
to the object you want to choose.
Select rock(1), paper(2), or scissors(3): 2
Computer chose PAPER .
You chose PAPER .
It's a tie!
Play again? Enter 'y' for yes or 'n' for no. y
Prepare to battle in a game of paper, rock, scissors!
Please input the correct number according
to the object you want to choose.
Select rock(1), paper(2), or scissors(3): 3
Computer chose SCISSORS .
You chose SCISSORS .
It's a tie!
Play again? Enter 'y' for yes or 'n' for no. n
Your total wins are 0 .
Your total losses are 0 .
Your total ties are 0 .

#import the library function "random" so that you can use it for computer 
#choice 
import random 

#define main 
def main(): 
    #assign win, lose, and tie to zero for tallying
    win = 0 
    lose = 0 
    tie = 0 

    #control loop with 'y' variable 
    play_again = 'y' 

    #start the game 
    while play_again == 'y': 
        #make a welcome message and give directions 
        print('Prepare to battle in a game of paper, rock, scissors!') 
        print('Please input the correct number according') 
        print('to the object you want to choose.') 

        #Get the player and computers choices and 
        #assign them to variables 
        computer_choice = get_computer_choice() 
        player_choice = get_player_choice() 

        #print choices 
        print('Computer chose', computer_choice, '.') 
        print('You chose', player_choice, '.') 

        #determine who won 
        winner_result(computer_choice, player_choice) 

        #ask the user if they want to play again 
        play_again = input("Play again? Enter 'y' for yes or 'n' for no. ") 

    #print results 
    print('Your total wins are', win, '.') 
    print('Your total losses are', lose, '.') 
    print('Your total ties are', tie, '.') 

#define computer choice 
def get_computer_choice(): 
    #use imported random function from library 
    choice = random.randint(1,3) 

    #assign what the computer chose to rock, paper, or scissors 
    if choice == 1: 
        choice = 'ROCK' 
    elif choice == 2: 
        choice = 'PAPER' 
    else: 
        choice = 'SCISSORS' 

    #return value 
    return choice 

#define player choice 
def get_player_choice(): 
    #assign input to variable by prompting user 
    choice = int(input("Select rock(1), paper(2), or scissors(3): ")) 

    #Detect invalid entry
    while choice != 1 and choice != 2 and choice != 3: 
        print('The valid numbers are rock(type in 1), paper(type in 2),') 
        print('or scissors(type in 3).') 
        choice = int(input('Enter a valid number please: ')) 

    #assign what the player chose based on entry 
    if choice == 1: 
        choice = 'ROCK' 
    elif choice == 2: 
        choice = 'PAPER' 
    else: 
        choice = 'SCISSORS' 

    #return value 
    return choice 

#determine the winner from the variables 
def winner_result(computer_choice, player_choice): 
    #if its a tie, add 1 to tie variable and display message 
    if computer_choice == player_choice:
        result = 'tie'
        print("It's a tie!")

    #if its a win, add to win tally and display message 
    elif computer_choice == 'SCISSORS' and player_choice == 'ROCK':
        result = 'win'
        print('ROCK crushes SCISSORS! You win!')
    elif computer_choice == 'PAPER' and player_choice == 'SCISSORS': 
        result = 'win'
        print('SCISSORS cut PAPER! You win!')
    elif computer_choice == 'ROCK' and player_choice == 'PAPER': 
        result = 'win'
        print('PAPER covers ROCK! You win!')

    #if it does not match any of the win criteria then add 1 to lose and 
    #display lose message 
    else: 
        result = 'lose'
        print('You lose!')

def result(winner_result,player_choice, computer_choice):

    # accumulate the appropriate winner of game total
    if result == 'win':
        win += 1
    elif result == 'lose':
        lose += 1
    else:
        tie += 1
    return result

main() 

您的winner_result函數在增加獲勝計數器之前返回。 如果從中刪除所有return語句,則應更新計數器。 無論如何都不需要return語句,因為if/elif/else結構確保只會執行一個可能的結果。

正如 Junuxx 在評論中所說,您還需要正確地將值分配給winner_result變量,即winner_result = 'win'而不是winner_result == 'win' 我還會重命名winner_result變量或函數,因為使用相同的名稱會造成混淆。

win/lose/tie變量目前是本地的,這意味着mainwinner_result將擁有這些變量的自己的副本,因此main的值將始終為零。 您可以做的是使它們成為全局變量:在全局范圍內(在任何函數之外)將它們分配為零,並在函數winner_result中添加行global win, lose, tie

顯然這個問題已經回答了幾年,但是當我查看相同的信息時它出現了。 如果有人感興趣,這是我的代碼。

#! usr/bin/python3
import random


def game():

    computer_count = 0
    user_count = 0

    while True:
        base_choice = ['scissors', 'paper', 'rock']
        computer_choice = random.choice(base_choice)

        user_choice = input('(scissors, paper, rock) Type your choice: ').strip().lower()
        print()
        computer_wins = 'The computer wins!'
        you_win = 'You win!'

        print(f'You played {user_choice}, the computer played {computer_choice}')
        if user_choice == 'scissors' and computer_choice == 'rock' or \
           user_choice == 'paper' and computer_choice == 'scissors' or \
           user_choice == 'rock' and computer_choice == 'paper':
            print(computer_wins)
            computer_count += 1

        elif user_choice == 'rock' and computer_choice == 'scissors' or \
            user_choice == 'scissors' and computer_choice == 'paper' or \
                user_choice == 'paper' and computer_choice == 'rock':
                print(you_win)
                user_count += 1

        else:
            if user_choice == computer_choice:
                print('Its a draw!')
                computer_count += 1
                user_count += 1

        print(f'Computer: {computer_count} - You: {user_count}')
        print()


game()

我試圖做同樣的項目,我找到了一個適合我的解決方案。

from random import randint

win_count = 0
lose_count = 0
tie_count = 0

# create a list of play options
t = ["Rock", "Paper", "Scissors"]

# assign a random play to the computer
computer = t[randint(0, 2)]

# set player to false
player = False

print()
print("To stop playing type stop at any time.")
print()
while player == False:
    # set player to True
    player = input("Rock, Paper or Scissors? ")
    if player.lower() == "stop":
        print()
        print(
            f"Thanks for playing! Your final record was {win_count}-{lose_count}-{tie_count}")
        print()
        break
    if player.title() == computer:
        print()
        print("Tie!")
        tie_count += 1
        print()
    elif player.title() == "Rock":
        if computer == "Paper":
            print()
            print(f"You lose. {computer} covers {player.title()}.")
            lose_count += 1
            print()
        else:
            print()
            print(f"You win! {player.title()} smashes {computer}.")
            win_count += 1
            print()
    elif player.title() == "Paper":
        if computer == "Scissors":
            print()
            print(f"You lose. {computer} cuts {player.title()}.")
            lose_count += 1
            print()
        else:
            print()
            print(f"You win!, {player.title()} covers {computer}.")
            win_count += 1
            print()
    elif player.title() == ("Scissors"):
        if computer == "Rock":
            print()
            print(f"You lose. {computer} smashes {player.title()}.")
            lose_count += 1
            print()
        else:
            print()
            print(f"You win! {player.title()} cuts {computer}.")
            win_count += 1
            print()
    else:
        print()
        print("Sorry, we couldn't understand that.")
        print()
# player was set to True, but we want it to be false to continue loop
print(f"Your record is {win_count}-{lose_count}-{tie_count}")
print()
player = False
computer = t[randint(0, 2)]

這有效(有點)頁面頂部的代碼有很多問題。 首先,評分不起作用。 其次,沒有縮進意味着其他 def 函數內部的任何內容都不起作用。 第三,在第一個 def main 語句中引用了其他 def 函數,這導致 Python 顯示無效語法,因為 Python 不知道其他函數在它們被引入 python 之前被引用。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM