【问题标题】:ValueError: invalid literal for int() with base 10: ''turning entry into integerValueError: int() 以 10 为底的无效文字:''将条目转换为整数
【发布时间】:2019-12-09 06:32:16
【问题描述】:

我正在猜测 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()

我希望用户输入的内容变成一个整数并且我的游戏可以正常运行!

【问题讨论】:

  • 您的问题是因为您不知道 GUI 是如何工作的。 Entry 不像 input() 那样工作 - 它不会等待用户的文本和 Entry() 之后的所有代码在开始时执行,当 Entry 为空时,因此 int() 尝试转换空字符串。您可能需要Button,它会在您将文本输入条目并按下按钮时运行代码。
  • @furas 如何添加按钮?
  • 现在我看到你使用getMouse() 来停止代码,所以也许你不必使用按钮。但是,如果您将文本放入 Entry 并尝试将其转换为整数 - int("Hello"),那么您可能会收到错误消息。您必须使用try/except 来捕获此错误。
  • 您不必在同一个地方创建新条目。您可以清除现有条目 - textEntry.setText('')

标签: python python-3.x zelle-graphics


【解决方案1】:

如果有人输入文本而不是数字(即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()

【讨论】:

  • 非常感谢!这帮助很大!
猜你喜欢
  • 2018-09-09
  • 2020-01-04
  • 2010-12-22
  • 2011-07-07
  • 2019-10-14
  • 2022-05-19
相关资源
最近更新 更多