Hướng dẫn reverse number guessing game python - trò chơi đoán số đảo ngược python

0

Mới! Lưu câu hỏi hoặc câu trả lời và sắp xếp nội dung yêu thích của bạn. Tìm hiểu thêm.
Learn more.

Vì vậy, tôi đã cố gắng tìm ra một cách để viết một chương trình mà máy tính cố gắng đoán số tôi đang nghĩ đến, thay vì cách khác xung quanh nơi bạn đang đoán một số được chọn của máy tính. Tuy nhiên, nó hoạt động hầu hết thời gian trong một số tình huống, nó lặp lại các số xuống chuỗi mặc dù tôi đã nói trước đó rằng giá trị tôi nghĩ đến cao hơn '7'. Trong một số trường hợp, nó cũng lặp lại cùng một số mặc dù tôi nói với nó cao hơn hoặc thấp hơn. Nếu ai đó có nhiều kinh nghiệm có thể có một cái nhìn về điều này và cho tôi biết tôi đang thiếu gì trong các vòng lặp này, nó sẽ giúp ích rất nhiều.

#computer enters a value x
#lower - computer guesses lower than x
#higher - computer guesses higher than x
#when string "You got it!" - game over

import random

lowBound = 0
highBound = 100
randomNumber = random.randint(lowBound,highBound)

print ("Is it ", randomNumber, " ?")
response = input()

while response != "You got it!":
    if response == "higher":
        lowBound = randomNumber    
        randomNumber = random.randint (lowBound, highBound)
        print ("Is it ", randomNumber, " ?")
        response = input()

    elif response == "lower":
        highBound = randomNumber
        randomNumber = random.randint (lowBound, highBound)
        print ("Is it ", randomNumber, " ?")
        response = input()

    if response == "You got it!":

        print ("Woohooo, I'm so bitchin'")

hỏi ngày 15 tháng 2 năm 2013 lúc 1:43Feb 15, 2013 at 1:43

Hướng dẫn reverse number guessing game python - trò chơi đoán số đảo ngược python

2

random.randint bao gồm, vì vậy:

if response == 'higher':
    lowBound = randomNumber + 1

if response == 'lower':
    highBound = randomNumber - 1

Ngoài ra, nếu người dùng không nhập phản hồi hợp lệ, input() sẽ không bao giờ được gọi lại và chương trình sẽ bị treo trong một vòng lặp vô hạn.

Một cái gì đó mạnh mẽ hơn, nhưng không xử lý những kẻ nói dối:

import random

lowBound = 0
highBound = 100
response = ''
randomNumber = random.randint(lowBound,highBound)

while response != "yes":
    print ("Is it ", randomNumber, " ?")
    response = input()
    if response == "higher":
        lowBound = randomNumber + 1   
        randomNumber = random.randint(lowBound,highBound)
    elif response == "lower":
        highBound = randomNumber - 1
        randomNumber = random.randint(lowBound,highBound)
    elif response == "yes":
        print ("Woohooo, I'm so bitchin'")
        break
    else:
        print ('Huh? "higher", "lower", or "yes" are valid responses.')

Đã trả lời ngày 15 tháng 2 năm 2013 lúc 1:55Feb 15, 2013 at 1:55

Hướng dẫn reverse number guessing game python - trò chơi đoán số đảo ngược python

Mark Tolonenmark TolonenMark Tolonen

155K24 Huy hiệu vàng162 Huy hiệu bạc235 Huy hiệu Đồng24 gold badges162 silver badges235 bronze badges

1

if response == 'higher':
    lowBound = randomNumber + 1
0 trả về một số giữa và bao gồm
if response == 'higher':
    lowBound = randomNumber + 1
1 và
if response == 'higher':
    lowBound = randomNumber + 1
2. Khi tạo một số ngẫu nhiên mới, bạn nên sử dụng
if response == 'higher':
    lowBound = randomNumber + 1
3

Đã trả lời ngày 15 tháng 2 năm 2013 lúc 1:54Feb 15, 2013 at 1:54

MattmattMatt

3.5713 huy hiệu vàng15 Huy hiệu bạc34 Huy hiệu đồng3 gold badges15 silver badges34 bronze badges

Một trong những vấn đề của bạn, trong số những vấn đề khác được đề cập, là trên các dòng sau:

highBound = randomNumber
randomNumber = random.randint (lowBound, highBound)

Bạn đang đặt một ràng buộc mới, điều này là tốt, nhưng sau đó bạn đang chọn một số ngẫu nhiên khác!

Những gì bạn nên làm, là một nửa bị ràng buộc và hỏi người dùng cao hơn hoặc thấp hơn từ đó. Hãy xem các thuật toán tìm kiếm nhị phân.binary search algorithms.

highBound = randomNumber
randomNumber = randomNumber / 2

Chương trình của bạn vẫn sẽ hoạt động (với các thay đổi khác được đề cập ở đây), nhưng điều này sẽ đoán số của bạn nhanh hơn trong hầu hết thời gian.

Thực sự có một ví dụ về trò chơi này trên Wikipedia.

Đã trả lời ngày 15 tháng 2 năm 2013 lúc 1:58Feb 15, 2013 at 1:58

Thẩm mỹAesthete

18.2k6 Huy hiệu vàng34 Huy hiệu bạc45 Huy hiệu Đồng6 gold badges34 silver badges45 bronze badges

1

Dưới đây là phiên bản bài tập này của tôi từ cuốn sách của Michael Dawson, tôi đã cố gắng giảm thiểu số lần thử, máy tính đó sử dụng. Tôi biết mã trông rất tinh ranh, nó chỉ là ngày thứ 2 của tôi :)


answer=""
guess=50
counter=3
x=25

print("hi, guess the number from 1 too 100")
input("\n")

print ("i will try to guess it")
print ("is it ", guess, "?")

while answer not in ("y","l","s"):
    print ("sorry, i didn't understand \n")
    answer=input("type in: (Y) for yes, or (L) if it is to large, or (S) if it is to small:")

if answer in ("s","l"):
    while answer!="y":

        if answer=="l":
            guess=int(guess-x)
            print ("how about", guess,"?")
            answer=input("\nis it? type in: (Y) for yes, or (L) if it is to large, or (S) if it is to small:")
            x=100/2**counter
            counter=counter+1
            if x<1:
                x=1

        elif answer=="s":
            guess=int(guess+x)
            print ("how about", guess,"?")
            answer=input("\nis it? type in: (Y) for yes, or (L) if it is to large, or (S) if it is to small:")
            x=100/2**counter
            counter=counter+1
            if x<1:
                x=1

        elif answer=="y":
            break
else:
    pass

print("\ngreat! the number that you guessed is", guess)
print("i can read your mind with no guesses!")
input("\n")

Đã trả lời ngày 13 tháng 10 năm 2014 lúc 16:47Oct 13, 2014 at 16:47

funykchefffunykchefffunykcheff

511 Huy hiệu bạc4 Huy hiệu đồng1 silver badge4 bronze badges

1

Bạn nhận được số hai lần vì ranh giới của ____ 8 được bao gồm;

if response == 'higher':
    lowBound = randomNumber + 1
5 có thể trả lại 1,2 hoặc 3. Lưu ý rằng bạn cũng nên tiếp tục hỏi con người nếu phản hồi không "cao hơn", cũng như "thấp hơn" cũng không "bạn đã nhận được nó!":

import random
lowBound = 0
highBound = 100

while True:
    randomNumber = random.randint(lowBound, highBound)
    print ("Is it ", randomNumber, " ?")
    response = input()

    if response == "higher":
        lowBound = randomNumber + 1
    elif response == "lower":
        highBound = randomNumber - 1

    if response == "You got it!":
        print ("Woohooo, I'm so bitchin'")
        break

Đã trả lời ngày 15 tháng 2 năm 2013 lúc 1:55Feb 15, 2013 at 1:55

Mark Tolonenmark Tolonenphihag

155K24 Huy hiệu vàng162 Huy hiệu bạc235 Huy hiệu Đồng68 gold badges441 silver badges463 bronze badges

0