【问题标题】:How do I make Python 3.4 keep score of the amount of guesses made?如何让 Python 3.4 记录猜测的数量?
【发布时间】:2014-11-17 07:17:13
【问题描述】:

我正在用 Python 做一个猜数字游戏,我想让 Python 记录你在猜对之前花了多少次来猜数字。我该怎么做呢?如果需要,我可以发布我的代码以查看。谢谢。

import time
import os
from random import randrange, uniform

#Difficulty - Easy
def easy():
    print ("")
    print ("Difficulty: Easy")
    print ("")
    irand = randrange(1,10)
    with open("GTN.txt", "a") as text_file:
        text_file.write(str(irand) + " Easy" + "\n")
    while True:
        number = input("Pick a number 1 - 10: ")
        try:
            number = int(number)
        except ValueError:
            print("    ")
            print(number, 'is not a number, try again.')
            continue
        if number > irand:
            print("That's too high, try again.")
            print("    ")
            time.sleep(1)
        elif number < irand:
            print("That's too low, try again.")
            print("    ")
            time.sleep(1)
        elif number == irand:
            print("    ")
            print("You got it right! You won!")
            print("    ")
            time.sleep(2)
            main()
            break

#Difficulty - Medium       
def medium():
    print ("")
    print ("Difficulty: Medium")
    print ("")
    irand = randrange(1,100)
    with open("GTN.txt", "a") as text_file:
        text_file.write(str(irand) + " Medium" + "\n")
    while True:
        number = input("Pick a number 1 - 100: ")
        try:
            number = int(number)
        except ValueError:
            print("    ")
            print(number, 'is not a number, try again.')
            continue
        if number > irand:
            print("That's too high, try again.")
            print("    ")
            time.sleep(1)
        elif number < irand:
            print("That's too low, try again.")
            print("    ")
            time.sleep(1)
        elif number == irand:
            print("    ")
            print("You got it right! You won!")
            print("    ")
            time.sleep(2)
            main()
            break

#Difficulty - Hard
def hard():
    print ("")
    print ("Difficulty: Hard")
    print ("")
    irand = randrange(1,1000)
    with open("GTN.txt", "a") as text_file:
        text_file.write(str(irand) + " Hard" + "\n")
    while True:
        number = input("Pick a number 1 - 1,000: ")
        try:
            number = int(number)
        except ValueError:
            print("    ")
            print(number, 'is not a number, try again.')
            continue
        if number > irand:
            print("That's too high, try again.")
            print("    ")
            time.sleep(1)
        elif number < irand:
            print("That's too low, try again.")
            print("    ")
            time.sleep(1)
        elif number == irand:
            print("    ")
            print("You got it right! You won!")
            print("    ")
            time.sleep(2)
            main()
            break

#Difficulty - Ultra
def ultra():
    print ("")
    print ("Difficulty: Ultra")
    print ("")
    irand = randrange(1,100000)
    with open("GTN.txt", "a") as text_file:
        text_file.write(str(irand) + " Ultra" + "\n")
    while True:
        number = input("Pick a number 1 - 100,000: ")
        try:
            number = int(number)
        except ValueError:
            print("    ")
            print(number, 'is not a number, try again.')
            continue
        if number > irand:
            print("That's too high, try again.")
            print("    ")
            time.sleep(1)
        elif number < irand:
            print("That's too low, try again.")
            print("    ")
            time.sleep(1)
        elif number == irand:
            print("    ")
            print("You got it right! You won!")
            print("    ")
            time.sleep(2)
            main()
            break

#Difficulty - Master
def master():
    print ("")
    print ("Difficulty: Master")
    print ("")
    irand = randrange(1,1000000)
    with open("GTN.txt", "a") as text_file:
        text_file.write(str(irand) + " Master" + "\n")
    while True:
        number = input("Pick a number 1 - 1,000,000: ")
        try:
            number = int(number)
        except ValueError:
            print("    ")
            print(number, 'is not a number, try again.')
            continue
        if number > irand:
            print("That's too high, try again.")
            print("    ")
            time.sleep(1)
        elif number < irand:
            print("That's too low, try again.")
            print("    ")
            time.sleep(1)
        elif number == irand:
            print("    ")
            print("You got it right! You won!")
            print("    ")
            time.sleep(2)
            main()
            break

#This is the MainMenu  
def main():
    time.sleep(2)
    while True:
        print ("Please select a difficulty when prompted!")
        time.sleep(1)
        print ("[1] Easy")
        time.sleep(1)
        print ("[2] Medium")
        time.sleep(1)
        print ("[3] Hard")
        time.sleep(1)
        print ("[4] Ultra")
        time.sleep(1)
        print ("[5] Master")
        time.sleep(1)
        print ("[6] Exit")
        print ("")
        time.sleep(1)
        choice = input ("Please Choose: ")

        if choice == '1':
            time.sleep(2)
            print ("")
            print ("Loading game...")
            time.sleep(2)
            easy()

        elif choice == '2':
            time.sleep(2)
            print ("")
            print ("Loading game...")
            time.sleep(2)
            medium()

        elif choice == '3':
            time.sleep(2)
            print ("")
            print ("Loading game...")
            time.sleep(2)
            hard()

        elif choice == '4':
            time.sleep(2)
            print ("")
            print ("Loading game...")
            time.sleep(2)
            ultra()

        elif choice == '5':
            time.sleep(2)
            print ("")
            print ("Loading game...")
            time.sleep(2)
            master()

        elif choice == '6':
            time.sleep(2)
            print ("")
            print ("Exiting the game!")
            print ("")
            print ("3")
            time.sleep(0.5)
            print ("2")
            time.sleep(0.5)
            print ("1")
            time.sleep(2)
            SystemExit 

        else:
            print ("Invalid Option: Please select from those available.")
            print("")
            time.sleep(1)

print ("Welcome to GTN!")
time.sleep(2)
print ("Developed by: oysterDev")
time.sleep(2)
print ("Version 1.1.0")
print ("    ")        
main()

【问题讨论】:

  • @vaultah 刚刚添加。
  • 那里有很多重复,注意难度级别之间的细微差别,并将它们分解为参数。您尝试了哪些方法来跟踪猜测次数?
  • @jonrsharpe 我还没有真正尝试过任何事情。我是 Python 新手,还没有学到太多东西。我一直想弄清楚如何得分,但我不知道如何得分。至于重复,我不知道如何缩小代码。
  • python 确实鼓励 DRY(不要重复自己)哲学。您发现自己重写或重复的任何代码块或块都可以并且应该被提取到一个函数中,无论是内联的还是其他的。
  • 所有对sleep 的调用是怎么回事?如果我在玩这个游戏,我会发疯的,因为它看起来需要 15 秒才能开始玩。

标签: python scoring


【解决方案1】:

@Benjamin 的回答会起作用。但要回答有关如何开始执行 DRY 的问题,您可以这样做:

你的整个主游戏代码可以进入这个函数,接受一些定义硬度的关键参数:

def the_game(difficulty_name, range_start, range_end):
    score = 0
    print ("")
    print ("Difficulty: %s" % difficulty_name)
    print ("")
    irand = randrange(range_start, range_end)
    with open("GTN.txt", "a") as text_file:
        text_file.write(str(irand) + " %s" % difficulty_name + "\n")
    while True:
        number = input("Pick a number 1 - 10: ")
        try:
            number = int(number)
        except ValueError:
            print("    ")
            print(number, 'is not a number, try again.')
            continue
        if number > irand:
            print("That's too high, try again.")
            print("    ")
            score += 1
            time.sleep(1)
        elif number < irand:
            print("That's too low, try again.")
            print("    ")
            score += 1
            time.sleep(1)
        elif number == irand:
            print("    ")
            print("You got it right! You won!")
            print("    ")
            print("You guessed wrong " + str(score) + " times")
            time.sleep(2)
            main()
            break

然后,您可以定义根据用户选择的硬度级别调用游戏的小函数,如下所示:

#Difficulty - Easy
def easy():
    the_game("Easy", 1, 10)

#Difficulty - Medium       
def medium():
    the_game("Medium", 1, 100)

#Difficulty - Hard
def hard():
    the_game("Hard", 1, 1000)

#Difficulty - Ultra
def ultra():
    the_game("Ultra", 1, 100000)

#Difficulty - Master
def master():
    the_game("Master", 1, 1000000)

最后,你可以像这样定义主函数:

#This is the MainMenu  
def main():
    time.sleep(2)
    while True:
        print ("Please select a difficulty when prompted!")
        time.sleep(1)
        print ("[1] Easy")
        time.sleep(1)
        print ("[2] Medium")
        time.sleep(1)
        print ("[3] Hard")
        time.sleep(1)
        print ("[4] Ultra")
        time.sleep(1)
        print ("[5] Master")
        time.sleep(1)
        print ("[6] Exit")
        print ("")
        time.sleep(1)
        choice = input ("Please Choose: ")

        def show_loading_screen():
            time.sleep(2)
            print ("")
            print ("Loading game...")
            time.sleep(2)

        def show_exit_screen():
            time.sleep(2)
            print ("")
            print ("Exiting the game!")
            print ("")
            print ("3")
            time.sleep(0.5)
            print ("2")
            time.sleep(0.5)
            print ("1")
            time.sleep(2)

        if choice == '1':
            show_loading_screen()
            easy()

        elif choice == '2':
            show_loading_screen()
            medium()

        elif choice == '3':
            show_loading_screen()
            hard()

        elif choice == '4':
            show_loading_screen()
            ultra()

        elif choice == '5':
            show_loading_screen()
            master()

        elif choice == '6':
            show_exit_screen()
            SystemExit 

        else:
            print ("Invalid Option: Please select from those available.")
            print("")
            time.sleep(1)

您会发现我们已经将一些重复的屏幕加载代码行提取到内联函数中,我们可以重复使用。

最后,如果这个 Python 文件作为脚本执行,你可以调用这个 main 函数。这是一个很好的做法。你可以这样做:

if __name__ == "__main__":
    print ("Welcome to GTN!")
    time.sleep(2)
    print ("Developed by: oysterDev")
    time.sleep(2)
    print ("Version 1.1.0")
    print ("    ")        
    main()

希望这有助于了解如何开始重构 DRY。

【讨论】:

  • 效果很好 :) 谢谢!我还设法让它自动告诉我我有什么范围。 :) 非常感谢!
【解决方案2】:

尝试创建一个名为 ex 的变量。 “得分”,每次猜错时加 1。

这应该可以。

def easy():
score = 0
print ("")
print ("Difficulty: Easy")
print ("")
irand = randrange(1,10)
with open("GTN.txt", "a") as text_file:
    text_file.write(str(irand) + " Easy" + "\n")
while True:
    number = input("Pick a number 1 - 10: ")
    try:
        number = int(number)
    except ValueError:
        print("    ")
        print(number, 'is not a number, try again.')
        continue
    if number > irand:
        print("That's too high, try again.")
        print("    ")
        score += 1
        time.sleep(1)
    elif number < irand:
        print("That's too low, try again.")
        print("    ")
        score += 1
        time.sleep(1)
    elif number == irand:
        print("    ")
        print("You got it right! You won!")
        print("    ")
        print("You guessed wrong " + str(score) + " times")
        time.sleep(2)
        main()
        break

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-16
    • 2015-08-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-26
    相关资源
    最近更新 更多