Python猜谜游戏-while循环只允许整数

Python猜谜游戏-while循环只允许整数,python,while-loop,Python,While Loop,我正在根据《为绝对初学者编写python编程:第3章》一书,用python构建简单的猜测数字游戏。我不知道如何使while循环部分只接受输入中的整数: 结果应该是,在用户输入float或string程序打印后,只使用整数 用户键入整数后,它会将他带出游戏循环: # Guessing loop while guess != computer: if guess < computer: print("You're bidding to low") else:

我正在根据《为绝对初学者编写python编程:第3章》一书,用python构建简单的猜测数字游戏。我不知道如何使while循环部分只接受输入中的整数:

结果应该是,在用户输入float或string程序打印后,只使用整数

用户键入整数后,它会将他带出游戏循环:

# Guessing loop
while guess != computer:
    if guess < computer:
        print("You're bidding to low")
    else:
        print("You're bidding to high")

    guess = int(input("Take a guess: "))
    tries += 1

您可以编写一个自定义函数来检查有效输入:

def isInteger(string):
    try:
        int(string)
        return True
    except ValueError:
        return False
并修改while循环,如下所示:

while not isInteger(guess):
    guess = input()

您可以编写一个自定义函数来检查有效输入:

def isInteger(string):
    try:
        int(string)
        return True
    except ValueError:
        return False
并修改while循环,如下所示:

while not isInteger(guess):
    guess = input()

您可以尝试将输入转换为float,然后使用is_integer检查输入是否为整数。但是,如果输入包含字母,则会引发ValueError异常,您可以处理该异常以要求输入整数

这将对您有用:

while True:
    try:
        guess = input("Use whole numbers: ")
        if float(guess).is_integer():
            guess = int(guess)
            break
    except ValueError:
        continue

print(guess)
如果输入类似于123.0,这也会起作用

编辑以解决有关输入的评论,如1.000000000000000035:


您可以尝试将输入转换为float,然后使用is_integer检查输入是否为整数。但是,如果输入包含字母,则会引发ValueError异常,您可以处理该异常以要求输入整数

这将对您有用:

while True:
    try:
        guess = input("Use whole numbers: ")
        if float(guess).is_integer():
            guess = int(guess)
            break
    except ValueError:
        continue

print(guess)
如果输入类似于123.0,这也会起作用

编辑以解决有关输入的评论,如1.000000000000000035:


我认为这对您来说是可行的,我使用的是python 2.7,与更高版本没有太大区别

import random

def is_integer(num):
    try:
        num= int(num)
        return num
    except:
        False

def main(prompt, retries=5, complaint="wrong guess!!! try again..."):
    computer = random.randint(1, 100)
    while retries > 0:
        my_guess = raw_input(prompt)
        if is_integer(my_guess) == computer:
            print "Bingo!!! the answer is ",computer
            break
        retries = retries - 1
        if retries > 0:
            print "{} remaining {} tries left".format(complaint, retries)
        else:
            print "You are out of tries..."
            print "Exiting......."


main("please Guess a number? ")

我认为这对您来说是可行的,我使用的是python 2.7,与更高版本没有太大区别

import random

def is_integer(num):
    try:
        num= int(num)
        return num
    except:
        False

def main(prompt, retries=5, complaint="wrong guess!!! try again..."):
    computer = random.randint(1, 100)
    while retries > 0:
        my_guess = raw_input(prompt)
        if is_integer(my_guess) == computer:
            print "Bingo!!! the answer is ",computer
            break
        retries = retries - 1
        if retries > 0:
            print "{} remaining {} tries left".format(complaint, retries)
        else:
            print "You are out of tries..."
            print "Exiting......."


main("please Guess a number? ")

不能将相等值与类型try 1==int进行比较,结果将为False。此外,用户输入始终是字符串。对于检查整数,您可以尝试,但对于负数也会失败。可能的重复项:这实际上可能是一个更好的目标。为什么不只是将输入转换为int,guess=intinputguess a number,这样,它总是正确的类型。@user2699,因为如果他们输入带有小数点的输入,将抛出ValueError。您可以在try/except中换行,以确认输入的是整数。此外,这不是本练习的重点。您不能将相等值与类型try 1==int进行比较,您将得到False。此外,用户输入始终是字符串。对于检查整数,您可以尝试,但对于负数也会失败。可能的重复项:这实际上可能是一个更好的目标。为什么不只是将输入转换为int,guess=intinputguess a number,这样,它总是正确的类型。@user2699,因为如果他们输入带有小数点的输入,将抛出ValueError。您可以在try/except中换行,以确认输入的是整数。另外,这不是练习的重点。试试看,它除了1.00000000000035甚至1.00000000000000000000000000000000000000000035之外都不会。。我将添加一个屏幕截图来显示它的工作原理。尝试一下,它除了1.00000000000000000035或者甚至1.00000000000000000000000000000000000000000035之外都不会出现。。我将添加一个屏幕截图来显示它的工作原理。