使用字符串累加器在单个变量中存储多个丢弃的数据

时间:2010-03-15 22:26:34

标签: python

对于我的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”我只是不知道如何将变量转换为字符串并存储它。我们还没有学过数组,所以我不能这样做。

非常感谢任何帮助。谢谢!

4 个答案:

答案 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