Python for循环返回NaN而不是字符串输出

Python for循环返回NaN而不是字符串输出,python,for-loop,Python,For Loop,我已经使用这段代码有一段时间了,无论我做什么,for循环都会打印出NaN而不是字符串。当我在不使用字符串格式的情况下使用For循环时,函数numberToText可以正常工作。您应该尝试以下方法: def numberToText(number): if number == 1: return('one') elif number == 2: return('two') elif number == 3: ret

我已经使用这段代码有一段时间了,无论我做什么,for循环都会打印出NaN而不是字符串。当我在不使用字符串格式的情况下使用For循环时,函数
numberToText
可以正常工作。

您应该尝试以下方法:

def numberToText(number):
     if number == 1:
         return('one')
     elif number == 2:
         return('two')
     elif number == 3:
         return('three')
     elif number == 4:
         return('four')
     elif number == 5:
         return('five')
     elif number == 6:
         return('six')
     elif number == 7:
         return('seven')
     elif number == 8:
         return('eight')
     elif number == 9:
         return('nine')
     elif number == 10:
         return('ten')

def tenGreenBottles():
  print ("How many bottles to start with?")
  bottles = int(input())
  for i in range (bottles, 0, -1):
      print "%g green bottles, hanging on the wall" %numberToText(i)
      print "%g green bottles, hanging on the wall" %numberToText(i)
      print "and if one green bottle, should accidentally fall"
      bob = i - 1
      print "there'd be %g green bottles." %numberToText(bob)
      print
我推荐
格式的理由

最初,在Python中,执行字符串插值(这就是我们在这里讨论的)的常用方法是使用格式字符串(例如
%s
%d
、或
%g
)和字符串与要插入的内容之间的格式运算符

但是,对于要插值的内容,必须使用正确的格式字符串

例如,要将一个字符串插入另一个字符串,请使用
%s

 print "{} green bottles, hanging on the wall".format(numberToText(i))
但是,如果您有一个要插入的数字,通常会使用
%d

>>> print "%s green bottles, hanging on the wall" % "fifteen"
fifteen green bottles, hanging on the wall
如果你犯了错误,你会得到一个错误:

>>> print "%d green bottles, hanging on the wall" % 15
15 green bottles, hanging on the wall

当您对字符串插值更熟悉时,您可以尝试使用
格式
执行更高级的操作。您可能永远不需要再次使用
%
来执行字符串插值。我建议您只关注并记住
格式

这正是您正在运行的代码吗?如果是这样的话,您应该会因为错误的缩进而得到多个语法错误,这在Python中是至关重要的。请更正代码中的缩进,以便我们可以看到您真正运行的内容。numberToText错误的缩进!当我改为
%d
时,它现在说的是“未定义”。@Adam下面的答案最能描述它。你实际上想要
%s
,但你真正想要的是使用
.format
或更好的格式——然而,Python3.6f-strings。我认为
打印“%s绿色瓶子,挂在墙上”%numberToText(I)
,也可以(也就是说,'%s'而不是''%g')@Sebastian它会的。但是,你为什么要在
format()
?我试过
打印{}个绿色瓶子,挂在墙上。format(numberToText(i))
,这帮了我的忙。我仍然不明白使用
%s
{}格式的区别。最简单的格式是
@Adam(对代码的最小更改)修复方法是将
%g
更改为
%s
。这就是真正需要的。将
格式更改为
格式是对不同字符串格式技术的独立风格更改,与
%
格式相比有一些优势。但出于您的目的,结果应该是相同的。@Tomkarze我推荐
格式t
,因为这个用户对Python来说真的很陌生。为什么不建议一些在任何情况下都不会痛苦的东西,而不是记住何时使用
%s
%d
等等。?
>>> print "%d green bottles, hanging on the wall" % "15"
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: %d format: a number is required, not str
 >>> print "{} green bottles, hanging on the {}".format(20, "balcony")
 20 green bottles, hanging on the balcony