在Python 2.7的while循环中尝试除外

在Python 2.7的while循环中尝试除外,python,while-loop,Python,While Loop,下面是我猜测随机数的代码。我必须检查输入以确保它是一个整数并且在1-20范围内。一切正常。如果不是整数或超出范围,它将输出正确的响应,但随后它将继续通过while循环。我原以为这次尝试会在继续之前把它送回去。我在这里做错了什么?我想不出这个问题。谢谢你的帮助 import random tries = 0 name=(raw_input('Hello! What is your name? ')) number = random.randint(1, 20) print('Hello, '

下面是我猜测随机数的代码。我必须检查输入以确保它是一个整数并且在1-20范围内。一切正常。如果不是整数或超出范围,它将输出正确的响应,但随后它将继续通过while循环。我原以为这次尝试会在继续之前把它送回去。我在这里做错了什么?我想不出这个问题。谢谢你的帮助

import random

tries = 0

name=(raw_input('Hello! What is your name? '))

number = random.randint(1, 20)
print('Hello, ' + name + ', I am thinking of a number between 1 and 20.')


while tries < 6:

    guess = (raw_input('Take a guess.' ))

    try:
        guess = int(guess)
    except ValueError:
        print 'You did not enter a valid number, try again.'    

    tries = tries + 1

    if guess<1 or guess>20:
        print 'Your guess is not between 1 and 20'

    if guess < number:
        print 'Your guess is too low.' 
    if guess > number:
        print 'Your guess is too high.'

    if guess == number:
        break

if guess == number:
    print 'Good job, ',name,'! You guessed my number in ',tries,' guesses!'

if guess != number:
     print 'Sorry, The number I was thinking of was ',number
随机导入
尝试=0
name=(原始输入('Hello!你叫什么名字?'))
number=random.randint(1,20)
打印(“你好,“+name+”,我想到的是一个介于1和20之间的数字。)
而<6时:
guess=(原始输入('Take a guess'))
尝试:
猜测=int(猜测)
除值错误外:
打印“您没有输入有效的数字,请重试。”
尝试=尝试+1
如果是20:
打印“您的猜测不在1到20之间”
如果猜测<数字:
打印“你的猜测太低了。”
如果猜测>数字:
打印“你的猜测太高了。”
如果guess==数字:
打破
如果guess==数字:
打印“干得好”,姓名“!你猜中了我的号码,试过了,猜中了
猜猜看!=编号:
打印“对不起,我想的号码是”,号码

您所要做的就是在引发
ValueError
时多打印一行。如果希望循环从头开始,请在
块中添加
继续
。如果要将无效输入计数为尝试,请将递增
trys
的行移到循环的开头

tries += 1 # increment tries here if invalid inputs should count as a try, too
           # increment tries after the except block if only valid inputs should count as a try
# get input here
try:
    guess = int(guess)
except ValueError:
    # inform user that the input was invalid here
    continue # don't execute the rest of the loop, start with the next loop
您可以将另一个
continue
放在检查数字是否过高或过低的位置:

if guess<1 or guess>20:
    print 'Your guess is not between 1 and 20'
    continue
如果是20:
打印“您的猜测不在1到20之间”
持续
或使用if/elif构造:

if guess<1 or guess>20:
    print 'Your guess is not between 1 and 20'
elif guess < number:
    print 'Your guess is too low.' 
elif guess > number:
    print 'Your guess is too high.'
else: # guess == number
    break
如果是20:
打印“您的猜测不在1到20之间”
elif guess<数字:
打印“你的猜测太低了。”
elif guess>数字:
打印“你的猜测太高了。”
否则:#猜测==数字
打破

我建议使用if/elif。在一个循环中有多个continue可能会让人难以理解。

您告诉它打印一些东西,但Python不知道您不希望它在迭代过程中做其他事情。有时,您可能希望只有在出现错误时才能继续。要说“跳过此循环”,请使用
继续

try:
    guess = int(guess)
except ValueError:
    print 'You did not enter a valid number, try again.'
    continue

您需要在两个测试之后继续,并且仅在成功通过测试后增加尝试次数

import random
tries = 0
name=(raw_input('Hello! What is your name? '))
number = random.randint(1, 20)
print('Hello, ' + name + ', I am thinking of a number between 1 and 20.')

while tries < 6:

    guess = (raw_input('Take a guess.' ))

    try:
        guess = int(guess)
    except ValueError:
        print 'You did not enter a valid number, try again.'
        continue

    if guess<1 or guess>20:
        print 'Your guess is not between 1 and 20'
        continue

    tries = tries + 1

    if guess < number:
        print 'Your guess is too low.'
    if guess > number:
        print 'Your guess is too high.'

    if guess == number:
        break

if guess == number:
    print 'Good job, ',name,'! You guessed my number in ',tries,' guesses!'

if guess != number:
     print 'Sorry, The number I was thinking of was ',number
随机导入
尝试=0
name=(原始输入('Hello!你叫什么名字?'))
number=random.randint(1,20)
打印(“你好,“+name+”,我想到的是一个介于1和20之间的数字。)
而<6时:
guess=(原始输入('Take a guess'))
尝试:
猜测=int(猜测)
除值错误外:
打印“您没有输入有效的数字,请重试。”
持续
如果是20:
打印“您的猜测不在1到20之间”
持续
尝试=尝试+1
如果猜测<数字:
打印“你的猜测太低了。”
如果猜测>数字:
打印“你的猜测太高了。”
如果guess==数字:
打破
如果guess==数字:
打印“干得好”,姓名“!你猜中了我的号码,试过了,猜中了
猜猜看!=编号:
打印“对不起,我想的号码是”,号码

谢谢,这对无效输入有效。现在我唯一的问题是if语句的范围。我认为在那之后放置计数器会阻止它将其作为一次尝试进行计数,但它会在while循环的其余部分继续进行。Grrrr。很抱歉,我刚开始编程,对我无法完成如此简单的程序感到沮丧。如果您希望无效输入不算作一次尝试,请将增量
trys
所在的行保留在当前位置。只需将
continue
添加到except块。这对你有用吗?continue对无效输入有效,但我必须检查以确保输入也在1和20之间。我将计数放在该检查的if语句之后,它仍在通过while循环。我的范围检查后是否需要else语句。这就是我现在得到的输出:猜一猜。dk如果输入的数字无效,请重试。你的猜测不是在1到20之间,你的猜测太高了。猜猜看。@danie我知道问题了,再给我一次谢谢!我现在明白了。非常感谢你的帮助。阅读我的答案了解更多信息。:-)非常感谢。我现在明白了。非常感谢你的帮助。阅读我的答案了解更多信息。:-)非常感谢。我现在明白了。非常感谢你的帮助。阅读我的答案了解更多信息。:-)