【问题标题】:ValueError: invalid literal for int() with base 10: strValueError:以 10 为底的 int() 的无效文字:str
【发布时间】:2012-10-21 01:57:49
【问题描述】:

可能我的编码不太好,有些行没有多大意义或没有必要,但代码目的非常简单:

我想创建一个使用输入(字符串)的函数,并将其转换为整数,这将用于数学问题。 另外:我希望我的代码解释一个随机生成的数字并将其打印为等效的字符串:

### 'one' --> 1
### 'zero' --> 0 

import random

##'one' == 1
##'zero' == 0

def name_to_number(name):
    if name == 'one':
        return 1

def number_to_name(comp_number):
    if comp_number == 1:
        return 'one'

def lit_for_num(name):
    '''(str) -> str'''

    comp_number = random.randrange(0,1)
    equation = (abs(comp_number - int(name)))
    if equation == 0:
        print('Hallo!')
        return 'Computer draws' + comp_number
    else:
        return 'Computer draws 0'

非常感谢任何帮助。

【问题讨论】:

  • name 未在 lit_for_num 中定义,但您在 int(name) 中使用它。你的意思是int(guess) 吗?
  • 是的,你是对的……我刚刚修好了
  • @GaryJ.EspitiaS。在我看来,如果您的输入是one,您想调用name_to_number(name) 而不是int(name)。您看到错误的原因是因为您的输入是 one,因此 int('one') 会给您该错误。
  • 我明白了,这实际上修复了它......但现在我有一个查询......它似乎总是抛出 else 条件......
  • @GaryJ.EspitiaS。我在下面的答案中发布了解释。

标签: python string integer


【解决方案1】:

第一个问题是您似乎使用one 作为输入,因此 int('one') 会给你那个错误。

其次,在:

comp_number = random.randrange(0,1)
...
if equation == 0:
    print('Hallo!')
    return 'Computer draws' + comp_number
else:
    return 'Computer draws 0'

else 子句将始终被调用,因为 comp_number 始终为 0。

rand.randrangechoice(range(start, stop, step)) 相似,这意味着randrange(0,1) 将始终返回0。如果您想要01,您会想要randrange(0,2)。或者,改用random.randint(0,1),它将包括端点01

作为奖励,要处理数字到数字的文本,您可能需要考虑由Greg Hewgill 编写的text2num

【讨论】:

  • 谢谢你的回复,不知道这种函数的细节感觉有点傻。
  • @GaryJ.EspitiaS。不客气!我在学习的时候肯定也被它咬过——我就是这么知道的:)
【解决方案2】:

下面的代码对我来说很好用。我所要做的就是将return 'Computer draws'+comp_number 更改为return 'Computer draws'+str(comp_number) 以及将random.randrange(0,1) 更改为random.randrange(0,2)

### 'one' --> 1
### 'zero' --> 0 

import random

##'one' == 1
##'zero' == 0

def name_to_number(name):
    if name == 'one':
        return 1

def number_to_name(comp_number):
    if comp_number == 1:
        return 'one'

def lit_for_num(name):
    '''(str) -> str'''

    comp_number = random.randrange(0,1)
    equation = (abs(comp_number - int(name)))
    if equation == 0:
        print('Hallo!')
        return 'Computer draws' + str(comp_number)
    else:
        return 'Computer draws 0'

【讨论】:

    猜你喜欢
    • 2020-08-09
    • 2018-09-09
    • 2020-01-04
    • 2010-12-22
    • 2011-07-07
    • 2019-10-14
    相关资源
    最近更新 更多