我正在尝试用Python编写一个程序,告诉我一件事,如果输入的数字介于1和100之间。这是我到目前为止的代码:
number = int (raw_input ("give me a number."))
if number < 100 and number > 1:
print ("Great! The number " + number + " is in fact between 1 and 100. I am happy " + number + " times")
if number < 1 or number < 100:
print ("Not so great! The number " + number + " is not between 1 and 100.")
我可以运行第一位,但是一旦输入介于1和100之间的数字,我就会收到此错误:
Traceback (most recent call last):
File "/Downloads/number (1).py", line 3, in <module>
print "Great! " + number + " is in fact between 1 and 100"
TypeError: cannot concatenate 'str' and 'int' objects
我该如何解决这个问题?
答案 0 :(得分:3)
您无法直接合并int
和str
。转换为字符串或使用字符串格式:
优选:
print ("Not so great! The number {} is not between 1 and 100.".format(number))
有一点已经弃用了,现在仍然坚持,但被认为是“老”:
print ("Not so great! The number %i is not between 1 and 100." % number)
最明确,最慢,最不喜欢和最糟糕的风格(感谢@Stefano Sanfilippo!):
print ("Not so great! The number " + str(number) + " is not between 1 and 100.")
如果你有"5" + 5
,你想要什么?您想要10
,还是想要"55"
?由于含糊不清,提出错误并强迫您明确表达意图是更安全的
答案 1 :(得分:1)
您需要将'number'转换为字符串。您可以使用'str'函数将其包装起来。
答案 2 :(得分:1)
这应该有效:
print ("Great! The number "+str(number)+" is in fact between 1 and 100. I am happy " +str(number)+" times")
答案 3 :(得分:0)
您不能直接将字符串和整数一起添加。这样做会抛出TypeError
:
>>> 'a' + 1
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>>
相反,您可以使用str.format
将整数插入字符串中:
print("Not so great! The number {0} is not between 1 and 100.".format(number))
此外,比较的逻辑是错误的。例如,这个if语句的条件:
if number > 1 or number < 100:
将始终评估为True
,因为number
总是大于1
或小于100
。
解决了这些问题后,您的代码应如下所示:
number = int(raw_input("give me a number."))
# You can chain comparisons
if 1 < number < 100:
print("Great! The number {0} is in fact between 1 and 100. I am happy {0} times".format(number))
# You should use else here
else:
print("Not so great! The number {0} is not between 1 and 100.".format(number))