Python for循环返回NaN而不是字符串输出
我已经使用这段代码有一段时间了,无论我做什么,for循环都会打印出NaN而不是字符串。当我在不使用字符串格式的情况下使用For循环时,函数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
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