python - 值错误 : invalid literal for int() with base 10: '' turning entry into integer

标签 python python-3.x zelle-graphics

我正在猜测 Zelle 图形中的数字,但我的程序似乎运行不正常。我试图让文本条目成为一个整数。如果我所做的还有任何其他问题,我将不胜感激。

我试过 int(number) 但没用

from graphics import *

import random

hidden=random.randrange(1,10)

def responseDict():            

    levels = dict()

    levels['high'] = 'woah! you are too high!'

    levels['low']='oh no! that is too low'     

    levels['equal']='yes, this is just right!'

    return levels



def circles():                                                     # cute, but nothing original here, not even usage

    win = GraphWin("Random Circles",300,300)

    for i in range(300):

        r = random.randrange(256)

        b = random.randrange(256)

        g = random.randrange(256)

        color = color_rgb(r, g, b)



        radius = random.randrange(3, 40)

        x = random.randrange(5, 295)          

        y = random.randrange (5, 295)      



        circle = Circle(Point(x,y), radius)

        circle.setFill(color)

        circle.draw(win)

        time.sleep(.05)



def textBox(win):
    message = Text(Point(250,50),'Please guess a number 1 through 10 then click outside the box')
    message.draw(win)

    message2=Text(Point(250,100),'You have 4 tries, to guess the number correctly.')
    message2.draw(win)

    for i in range(9):

        textEntry =Entry(Point(233,200),10)
        textEntry.draw(win)

        win.getMouse()

        number=textEntry.getText()
        guess=int(number)
        print(guess)

        levels = responseDict()

        while guess != hidden:
            if guess < hidden:

                response = Text(Point(300,300), (levels['low']))            
                response.draw(win)


                again=Text(Point(400,400), 'guess again')
                again.draw(win)


                textEntry=Entry(Point(233,200),10)
                textEntry.draw(win)
                win.getMouse()

                number=textEntry.getText()
                guess=int(number)
                print(guess)

                response.undraw()
                again.undraw()
                win.getMouse()
            elif guess > hidden:                                                       

                response2=Text(Point(350,350),(levels['high']))
                response2.draw(win)

                again2=Text(Point(400,400), 'guess again')
                again2.draw(win)

                textEntry2=Entry(Point(233,200),10)
                textEntry2.draw(win)
                win.getMouse()

                number=textEntry.getText()
                guess=int(number)
                print(guess)

                response2.undraw()
                again2.undraw()
                win.getMouse()

            else:
                response=Text(Point(300,300),(levels['equal']))
                response.draw(win)
                win.getMouse()
                circles()



win = GraphWin('guess number', 700,700)                         

win.setBackground('brown')

textBox(win)

exitText = Text(Point(400,400), 'Click anywhere to quit')
exitText.draw(win)

win.getMouse()
win.close()

我希望用户输入的内容成为整数,并且我的游戏能够运行!

最佳答案

如果有人输入文本而不是数字(即 Hello),则 int() 会出错

ValueError: invalid literal for int() with base 10: 'Hello'

你必须使用 try/except 来捕获它

    number = textEntry.getText()
    try:
        guess = int(number)
        print(guess)
    except Exception as ex:
        guess = None
        #print(ex)

except 中我设置了 guess = None 所以稍后我可以显示消息

    if guess is None:
        # show message
        response = Text(Point(300, 300), 'It is not number')            
        response.draw(win)

如果你没有在 except 中给 guess 赋值,那么你会得到这个变量不存在的错误 - 它可能发生在变量不存在的第一个循环中在上一个循环中创建。


我的完整代码(有其他更改):

from graphics import *

import random

hidden = random.randrange(1, 10)

def response_dict():            

    return {
        'high': 'woah! you are too high!',
        'low': 'oh no! that is too low',     
        'equal': 'yes, this is just right!',
        'none': 'It is not number',
    }


def circles(): 

    win = GraphWin("Random Circles",300,300)

    for i in range(300):

        r = random.randrange(256)
        b = random.randrange(256)
        g = random.randrange(256)
        color = color_rgb(r, g, b)

        radius = random.randrange(3, 40)
        x = random.randrange(5, 295)          
        y = random.randrange(5, 295)      

        circle = Circle(Point(x, y), radius)
        circle.setFill(color)
        circle.draw(win)

        time.sleep(.05)


def textBox(win):
    message = Text(Point(250,50),'Please guess a number 1 through 10 then click outside the box')
    message.draw(win)

    message2 = Text(Point(250,100),'You have 4 tries, to guess the number correctly.')
    message2.draw(win)

    # you can get it once
    levels = response_dict()

    # 4 tries
    for i in range(4):

        textEntry = Entry(Point(233,200),10) 
        textEntry.draw(win)

        win.getMouse()

        # get number
        number = textEntry.getText()
        try:
            guess = int(number)
            print(guess)
        except Exception as ex:
            #print(ex)
            guess = None

        # hide entry - so user can't put new number 
        textEntry.undraw()

        if guess is None:
            # show message
            response = Text(Point(300,300), levels['none'])            
            response.draw(win)

        elif guess < hidden:
            # show message
            response = Text(Point(300,300), levels['low'])            
            response.draw(win)

        elif guess > hidden:                                                       
            # show message
            response = Text(Point(350, 350), levels['high'])
            response.draw(win)

        else:
            response = Text(Point(300, 300), levels['equal'])
            response.draw(win)
            win.getMouse()
            circles()
            break # exit loop 

        again = Text(Point(400,400), 'Guess again, click mouse.')
        again.draw(win)

        # wait for mouse click
        win.getMouse()

        # remove messages
        response.undraw()
        again.undraw()


# --- main ----

win = GraphWin('guess number', 700, 700)                         
win.setBackground('brown')

textBox(win)

exitText = Text(Point(400, 400), 'Click anywhere to quit')
exitText.draw(win)

win.getMouse()
win.close()

关于python - 值错误 : invalid literal for int() with base 10: '' turning entry into integer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57295829/

相关文章:

python中JAVA包导入

python - 应用条件格式(没有错误),但工作表不会更新,直到我手动转到 'Edit Rules'

python - 检查点击是否在图形形状(圆形)内

python 从文件描述符 3 读取

c++ - 如何在python中将结构作为参数发送

python - 是否可以在 python 测试用例中修补函数的函数?

python - file.read() 覆盖外部文本文件 - 错误或错误代码?

python - 如何在python3中使用graphics.py获取和设置像素的颜色值

python - 生成随机点并将其放置在圆内

python - 模糊分组,相似词分组