所以我是一名高中新生,试图弄清楚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!")
答案 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
就可以了。