所以我刚刚开始使用python进行编码,并且我已经分配了一个项目来使用蒙特卡罗算法来近似pi的值。我已经把概念位缩小了,但现在我需要打印一个正方形并在上面放置复选标记。方块需要由用户设置大小定义。
我设法使用以下代码打印正方形:
import random
#defines the size of the square
squareSize = raw_input("Enter a square size:")
#defines the width of the square
print "#" * (int(squareSize)+2)
#defines the length of the square.
for i in range(0,int(squareSize)):
print "#", " " * (int(squareSize)-2), "#"
print "#" * (int(squareSize)+2)
无论出于什么原因我添加:
#determines the x value of a point to display
x = random.uniform(-1*(squareSize),squareSize)
或创建变量与“squareSize”混淆的任何其他内容我收到以下内容:
Traceback (most recent call last):
File "<stdin>", line 6, in <module>
File "/lib/python2.7/random.py", line 357, in uniform
return a + (b-a) * self.random()
TypeError: unsupported operand type(s) for -: 'str' and 'str'
我很感激我能得到的任何帮助,我确定这是一个愚蠢的事情,我只是在俯视,但我不能为我的生活弄明白。
谢谢,
亚历。
答案 0 :(得分:3)
问题是squareSize
属于str
类型。 random.uniform等待int
类型的参数。
您可以通过以下方式修复它:
x = random.uniform(-1*(int(squareSize)),int(squareSize))
但是,最好在开始时将squareSize
更好地投射到int
:
squareSize = int(raw_input("Enter a square size:"))
代码最终应如下所示:
import random
squareSize = int(raw_input("Enter a square size:"))
print "#" * (squareSize + 2)
for i in range(0,squareSize):
print "#", " " * (squareSize) - 2, "#"
print "#" * (squareSize + 2)
x = random.uniform(-1 * squareSize, squareSize)
希望有所帮助。
答案 1 :(得分:1)
raw_input
函数返回一个字符串(str
)而不是一个整数(int
)
由于squareSize是一个字符串,因此您无法对其执行-
操作。
因为这不是你想要做的。你想在两个整数上执行减法(或函数random
想要)。
因此,为此目的,您可以通过将squareSize
返回的字符串转换为raw_input
int
变量的类型
#defines the size of the square
squareSize = raw_input("Enter a square size:")