简体   繁体   English

ValueError: 以 10 为基数的 int() 的无效文字:''将条目转换为整数

[英]ValueError: invalid literal for int() with base 10: ''turning entry into integer

I am making a guess the number in Zelle graphics and my program does not seem to be working properly.我正在猜测 Zelle 图形中的数字,但我的程序似乎无法正常工作。 I am trying to have the Text Entry become an integer.我试图让文本条目成为一个整数。 If there are any other problems with what I have done I would appreciate some help.如果我所做的还有其他问题,我将不胜感激。

I have tried to do int(number) but that hasn't worked我试过做 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()

I want what the user entered to become an integer and my game to work!我希望用户输入的内容成为一个整数并且我的游戏可以运行!

If someone put text instead of number (ie. Hello ) then int() gives error如果有人输入文本而不是数字(即Hello ),则int()给出错误

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

and you have to use try/except to catch it你必须使用try/except来捕捉它

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

In except I set guess = None so later I can display message for this except我设置了guess = None所以稍后我可以为此显示消息

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

If you not assign value to guess in except then you can get error that this variable doesn't exist - it can happen in first loop when variable wasn't created in previous loop.如果你不分配值guessexcept那么你可以得到错误,这个变量不存在-它可以在第一个循环发生时,在以前的循环未创建变量。


My full code (with other changes):我的完整代码(有其他变化):

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()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM