如何在猜数字游戏中添加不同的级别和退出选项?

时间:2018-10-29 22:42:13

标签: python

所以我是一名高中新生,试图弄清楚Python编码,我需要猜一个数字游戏。

我的第一个级别工作正常,但我需要使其具有3个不同的级别以及一个退出选项。我不明白这些while循环。

非常抱歉,如果我发布了错误的内容,或者这是一个已经提出的问题,但是任何帮助将不胜感激!

到目前为止,这是我的代码:

import random
print("let's play guess a number!")
myLevel=int(input("would you like to play level 1, 2, 3, or quit?"))

if myLevel == 1:
    number1= random.randit(1,10)
    guess1=int(input("guess an integer from 1 to ten"))

while number1!=guess1:
    print
    if guess1<number1:
                 print("guess is too low")
                 guess1=int(input("guess again! or would you like to quit?"))
                 #this is where i want to be able to quit
    elif guess1>number1:
                 print("guess is too high!")
                 guess1=int(input("guess again! or would you like to quit?"))
                 #this is where i want to be able to quit
    if guess1==number1:
                print("you guessed it!")

if myLevel == 2:
nextumber2= random.randint (1,100)
guess2=int(input("guess an integer from 1 to 100"))

while number2!=guess2:
print

if guess2<number2:
        print("guess is too low!")
        guess2=int(input("guess again!"))
elif guess2>number2:
        print("guess is too high!")
        guess2=int(input("guess again!"))

print("you guessed it!")

2 个答案:

答案 0 :(得分:1)

欢迎使用Python!由于您是新手,因此我将介绍学习完整游戏所需的所有基础知识。

到目前为止,您的代码看起来不错。由于您的问题主要是关于while循环的问题,因此您需要了解确切的作用。 while循环是一个代码块,它首先检查提供的条件,然后在条件评估为true时执行缩进代码块。然后,它再次检查条件,如果仍然正确,则再次执行代码。这一直持续到条件评估为false为止。

x = 0
while x < 5:
    print(x)
    x += 1

尝试此代码。它应该打印0到4,然后在x = 5时停止。

实际发生的事情:

x = 0

# loop starts here
if x < 5: #true
    print(x)
    x += 1
if x < 5: #true
    print(x)
    x += 1
if x < 5: #true
    print(x)
    x += 1
if x < 5: #true
    print(x)
    x += 1
if x < 5: #true
    print(x)
    x += 1
if x < 5: #false
    # At this point, x is not longer < 5, so the repeating stops and the code continues to run as normal.

想象一下,如果您想打印1到50之间的数字,是要循环,还是像上面那样手工制作每个数字?实际上,如果您要从1打印到x,而您不知道x会是什么,则需要循环!

虽然循环功能非常强大,并且在各处都广泛使用。这个想法是您想做某件事,直到出现某种标志或情况,然后再停止做某事。我希望这是有道理的。


第二,您需要了解输入功能。

x = input()

input函数只是一个常规函数,它使用用户输入返回一个字符串。如果要将其转换为数字,则必须将其强制转换为所需的数字类型。

x = int(input())

您已经在执行此操作。但是,如果您想要一个字符串怎么办?

让我们回到您的代码:

myLevel=int(input("would you like to play level 1, 2, 3, or quit?"))
# User inputs "quit"
>> ValueError: invalid literal for int() with base 10: 'quit'

发生这种情况是因为我们已经将输入转换为int了。但是,我们绝不会使用MyLevel进行任何数学运算。这是一种更好的方法:

myLevel = input("would you like to play level 1, 2, 3, or quit?")
if myLevel == "quit":
    exit() # this exits a python program entirely.
if myLevel == "1":
    #do level 1 stuff
if myLevel == "2":
    #do level 2 stuff
if myLevel == "3":
    #do level 3 stuff

不转换此变量,使我们的生活更加轻松。但是,转换猜测数字input()结果是正确的,因为需要将这些结果与其他数字进行比较。


最后,该项目旨在教您一个非常有价值的课程!不要在代码中重复。如果发现自己做两次(或者多次重复),请使用函数,循环或其他构造进行压缩。我们将以您的项目为例。我更新了代码以使其正常工作。

if myLevel == 1:
    number1= random.randit(1,10)
    guess1=int(input("guess an integer from 1 to ten"))

    # This whole while loop needs to be within the "if" statement's indented block.
    # Why? Because we only want to execute the code *if* we're on level 1.
    while number1!=guess1:
        print(str(number1) + " isn't correct.") #fixed this
        if guess1<number1:
            print("guess is too low")
            guess1=int(input("guess again! or would you like to quit?"))
        elif guess1>number1:
            print("guess is too high!")
            guess1=int(input("guess again! or would you like to quit?"))

    # The last if statement isn't needed so I took it out.
    # Why? Because if the loop ends, it's because guess1==number1. So our condition
    # always returns true. Therefore, we can just move the print statement outside of the
    # while loop.

    print("you guessed it!")

这是一个很好的开始,应该可以正常工作。现在,我们要为第2级做什么?首先想到的是复制粘贴整个代码块...但是那会重复我们自己!我们将直接拒绝该想法,因为我们不会重复自己。

相反,让我们使用一个函数将游戏的核心包装成一个不错的,可重复的动作。功能只是可重复的动作。

# define a function with a variable to hold the highest possible guess
def guess(max): 
    # get a random number based on our max
    number = random.randint(1,max)

    guess = int(input("guess an integer from 1 to " + str(max)))
    while number != guess: # Guess is wrong
        if guess < number:
            print("guess is too low")
        elif guess > number:
            print("guess is too high!")

        # Since guess is wrong, we can just assume we'll always do this.
        # I removed the int() wrapper for the next step
        guess = input("guess again! or would you like to quit?")

        # Adding "quit" as an option:
        if guess == "quit":
            exit()
        else:
            guess = int(guess) # Now we can convert to int for our comparisons.


    print("you guessed it!")

有了这个定义,现在我们只需要以正确的难度调用函数本身即可。

if myLevel == "1":
    guess(10)
if myLevel == "2":
    guess(100)
if myLevel == "3":
    guess(500)

如果您在阅读完所有这些书后还活着,希望您在这里注意到了一个问题-我们将使用3种不同的if语句重复自己。我们可以做得更好,但这是另一天的教训!

tl; dr: 1)输入返回一个字符串,因此您立即将其转换为int。但是,“ quit”字符串是一个有效的选择,如果将其转换为int,则会出现错误。相反,请先测试“退出”,然后根据需要转换为整数。 2)while循环用于重复某些操作,直到清除某种条件为止。循环和if语句可以嵌套在其他语句中。考虑一下何时要运行代码,说实话,请稍作练习以使其更加自然。 3)如果您要重复代码中的某些内容(一遍又一遍地复制/粘贴类似的内容),请强烈考虑制作一个函数或循环或类似的内容来为您完成工作!

答案 1 :(得分:0)

戒烟很简单。请使用quit(),或者,如果您不想重新加载程序,请将所有内容放入while循环中,并将quit函数设置为false,然后再输入{{1 }} 过了一会儿。对于3个级别,您可以编写3个完全独立的程序,也可以使用true语句更改数字或其他内容。不过,我不确定是否可以。

对于您的if问题,只需使用while就可以了。