簡體   English   中英

4 位數字猜謎游戲 Python

[英]4 Digit Guessing Game Python

我正在嘗試在 Python 3 中制作一個 4 位數字猜謎游戲。它應該通過生成一個 1000 到 10000 (random.range(1000,10000)) 之間的隨機數然后由用戶猜測它應該在每次猜測后返回如何很多數字你都猜對了。 我的代碼並不完全有效,我想不通為什么它沒有那么幫助表示贊賞。

import random as r

guessing = True
real_ans = r.randrange(1000, 10000, 2)
real_ans_str = str(real_ans)

correct = 0

class Player():
    def __init__(self):
        self.player_guess = input("Enter a guess")
        self.evaluate(correct)
    def evaluate(self, correct):
        for n in range(3):
            if self.player_guess[n] == real_ans_str[n]:
                correct += 1
        if not correct == 4:
            print(str(correct)," was correct")
            correct = 0
        else:
            print("You guessed it! ")
            guessing = False

while guessing:
    Player()

您的代碼中有幾個問題:

  1. 您正在主循環內創建 Player 類的新實例。 它有效,但恕我直言,這不是最好的方法。

  2. 您正在使用guessing來停止主循環。 在 Python 中,默認情況下所有變量都是本地變量。 為了引用全局變量,您必須將其標識為全局變量:

def evaluate(self, correct):
    **global guessing**
    for n in range(3):
        if self.player_guess[n] == real_ans_str[n]:
            correct += 1
    if not correct == 4:
        print(str(correct)," was correct")
        correct = 0
    else:
        print("You guessed it! ")
        guessing = False

但是,使用全局變量可能會導致代碼混亂。

  1. range 提供包含最小值(默認為 0)和不包含最大值的值。 該 range(3) 將提供數字 0、1 和 2(總共 3 個數字),這不是您想要的。

由於您正在使用課程,我會嘗試以下操作:

  1. 創建 Player 的單個實例

  2. 創建一個名為 guess 的新方法

  3. 更改評估方法以返回玩家猜對的數字

  4. 創建一個名為 run 的新方法,該方法將調用 guess 和評估

import random as r

class Player():
    def __init__(self):
        self.real_ans = str(r.randrange(1000,100000,2))

    def guess(self):
        self.player_guess = raw_input("Enter a guess")

    def evaluate(self):
        correct = 0
        for n in range(4):
            if self.player_guess[n] == self.real_ans[n]:
                correct += 1
        return correct 

    def run(self):
        while True:
            self.guess()
            correct = self.evaluate()
            if not correct == 4:
                print(str(correct)," was correct")
            else:
                print("You guessed it! ")
                break

Player().run()
#Digit Guessing Game by Deniz
#python 3.5.1 - Please note that from Python version 2.7 "Tkinter" has been renamed tkinter, with a lowercase "t".
import tkinter
import random

computer_guess = random.randint(1,10)

def check():

    user_guess = int(txt_guess.get())


if user_guess < computer_guess:
    msg = "Higher!"
elif user_guess > computer_guess:
    msg = "Lower!"
elif user_guess == computer_guess:
    msg = "Correct!"
else:
    msg = "Houston we have a problem!..."


lbl_result["text"] = msg


txt_guess.delete(0, 5)

def reset():

    global computer_guess
    computer_guess = random.randint(1,10)
    lbl_result["text"] = "Game reset. Guess again!"

root = tkinter.Tk()

root.configure(bg="white")

root.title("Guess the correct number!")

root.geometry("280x75")

lbl_title = tkinter.Label(root, text="Welcome to Deniz's guessing Game!", bg="White")
lbl_title.pack()

lbl_result = tkinter.Label(root, text="Good Luck!", bg="White")
lbl_result.pack()

btn_check = tkinter.Button(root, text="Check", fg="blue", bg="White", command=check)
btn_check.pack(side="left")

btn_reset = tkinter.Button(root, text="Reset", fg="red", bg="White", command=reset)
btn_reset.pack(side="right")

txt_guess = tkinter.Entry(root, width=7)
txt_guess.pack()

root.mainloop()
root.destroy()

使用range(4)range(3)的值是[0, 1, 2]所以缺少3

for n in range(4):
    if self.player_guess[n] == real_ans_str[n]:
        correct += 1

全局guessing在類方法中不可用,因此在猜測正確后循環永遠不會結束。

工作但丑陋的解決方案是:

print("You guessed it! ")
global guessing
guessing = False

閱讀您的評論后,我認為您需要的是:

class Player():
    def __init__(self):
        self.player_guess = input("Enter a guess")
        self.evaluate(correct)
    def evaluate(self, correct):
        for n in range(4):
            if self.player_guess[n] == real_ans_str[n]:
                correct += 1
            else:
               print(str(correct)," was correct")
               correct = 0
               break
        if correct == 4:
            print("You guessed it! ")
            guessing = False

您可以將它與@Robson 的答案結合起來以結束循環。

這是一個沒有類的非無限循環版本。 我假設你想一次輸入一個數字? 如果沒有,那可以改變。

此外, randrange數末尾的 2 只包含偶數,因此沒有必要

import random as r
debug = True

real_ans = str(r.randrange(1000, 10000))

if debug:
    print(real_ans) 

correct = 0
for i in range(len(real_ans)):
    player_guess = input("Enter a guess: ")
    if str(player_guess) == real_ans[i]:
        correct += 1

if correct == 4:
    print('You guessed it!')
    correct = 0
else:
    print('Sorry!', real_ans, 'was correct')

樣品運行(正確)

9692
Enter a guess: 9
Enter a guess: 6
Enter a guess: 9
Enter a guess: 2
You guessed it!

樣品運行(不正確)

4667
Enter a guess: 5
Enter a guess: 5
Enter a guess: 5
Enter a guess: 5
Sorry! 4667 was correct
import random
from Tools.scripts.treesync import raw_input
x= random.randint(1000,9999)
num=0
while num < 1000 or num > 9999:
    num = int(raw_input("Please enter a 4 digit number: "))
    if num < 1000 or num > 9999:
        print("///wrong input////")

print("system generated number is ",x)
print("The number you entered is ",num)
if num == x:
    print("Congrats you win")
else:
    rabbit=0
    tortose=0
    unum = str(num)
    snum = str(x)
    c1=0enter code here
    for i in unum:
        c1=c1+1
        c2 = 0
        for j in snum:
            c2=c2+1
            if(i==j):
                if(c1==c2):
                    rabbit=1

                else:
                    tortose=1


    if rabbit==1:
        print("you got rabbit")
    elif rabbit==0 and tortose==1:
        print("you got tortose")
    else:
        print("Bad Luck you dont have any match")

    enter code here

我所做的只是將第 14 行中的nn in range(3)中的n in range(4)更改為n in range(4)中的n in range(4)

import random as r

guessing = True
real_ans = r.randrange(1000, 10000, 2)
real_ans_str = str(real_ans)

correct = 0

class Player():
    def __init__(self):
        self.player_guess = input("Enter a guess")
        self.evaluate(correct)
    def evaluate(self, correct):
        for n in range(4):
            if self.player_guess[n] == real_ans_str[n]:
                correct += 1
        if not correct == 4:
            print(str(correct)," was correct")
            correct = 0
        else:
            print("You guessed it! ")
            guessing = False

while guessing:
    Player()

暫無
暫無

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

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