对于我的python课程简介的作业,我们要编写一个程序,生成100组x,y坐标。
X必须是介于-100.0和100.0之间的浮点数,但不能为0。 Y是Y =((1 / x)* 3070)但是如果Y的绝对值大于100,则必须丢弃这两个数字(BUT STORED)并生成另一个数字。
结果必须显示在表格中,然后在表格之后,必须显示丢弃的结果。
老师说我们应该使用“字符串累加器”来存储丢弃的数据。
这是我到目前为止所做的,而且我一直坚持存储丢弃的数据。
编辑:得到它!谢谢!# import random.py
import random
# import math.py
import math
# define main
def main():
xDiscarded = 'Discarded X Values'
yDiscarded = 'Discarded Y Values'
# print header
print(" x \t y ")
x = random.uniform(-100.0, 100.0)
while x == 0:
x = random.uniform(-100.0, 100.0)
y = ((1/x) * 3070)
if math.fabs(y) > 100:
xDiscarded += ", " + str(x)
yDiscarded += ", " + str(y)
else:
print(x, '\t', y)
print(xDiscarded)
print(yDiscarded)
正如你所看到的,我遇到了abs(y)>的问题。 100,我不太确定如何存储丢弃的数据并让它每次累积时都会累积(y)> 100.我很酷,数据存储为“351.2,231.1,152.2”我只是不知道如何将变量转换为字符串并存储它。我们还没有学过数组,所以我不能这样做。
非常感谢任何帮助。谢谢!
答案 0 :(得分:1)
“string accumulator”不是Python的“艺术术语”。也许老师的意思是“将它全部集成到一个字符串中”(Python中的一种可怕的方法),或者(如果课程已经涵盖了列表)他指的是字符串的列表(正确的Python方法) )。
其他答案已经涵盖了第一种可能性,但如果意味着第二种(好),你需要的是:
a)将初始化更改为
xDiscarded = []
yDiscarded = []
所以他们都是空名单;
b)将“条件丢弃”改为
if math.fabs(y) > 100:
xDiscarded.append(str(x))
yDiscarded.append(str(y))
积累在字符串列表中(你可能也应该在这里做一些整洁的格式化,但严格来说这并不是必需的);
c)将输出部分更改为
print('Discarded X Values: ' + ', '.join(xDiscarded))
print('Discarded Y Values: ' + ', '.join(yDiscarded))
使用正确的“标题”和标点符号来做好的输出。
答案 1 :(得分:0)
您可以将数字转换为字符串,如下所示:
x = 100.0
xstr = str(x)
你可以像这样添加一个字符串:
xstr += 'another string'
也可以使用空字符串:
emptystring = ''
希望这些想法会让你朝着正确的方向前进。
答案 2 :(得分:0)
您可以使用str(y)
将变量转换为字符串表示形式。要控制格式,可以使用字符串插值,例如"%.3f" % y
。
您可以将字符串添加到一起并将结果分配给变量。 E.g:
string_a = string_b + string_c
或:
string_a += string_b
它不一定有效,但它有效。
答案 3 :(得分:0)
很简单。您可以使用格式化运算符(%
)将数字“转换为字符串”,如下所示:
import random
def getRandomX():
x = 0
while not x:
x = random.uniform(-100.0, 100.0)
return x
def main():
discarded = ''
for i in range(100):
x = getRandomX()
y = 3070 / x
while abs(y) > 100:
discarded += '(%f, %f)\n' % (x, y)
x = getRandomX()
y = 3070 / x
print('(%f, %f)' % (x, y))
print('\nDiscarded:\n' + discarded)
main()
另请注意,您无需导入math
,因为abs()
是内置的。另请注意,如果X
无效,则需要重新Y
。