Хранение нескольких сброшенных данных в одной переменной с использованием строкового аккумулятора - PullRequest
2 голосов
/ 16 марта 2010

Для задания моего вступления в курс Python мы должны написать программу, которая генерирует 100 наборов координат x, y.

X должен быть плавающим в диапазоне от -100,0 до 100,0 включительно, но не 0. Y - Y = ((1 / x) * 3070), но если абсолютное значение Y больше 100, оба числа должны быть отброшены (НО ХРАНЕНЫ) и сгенерирован другой набор.

Результаты должны отображаться в таблице, а затем после таблицы должны отображаться отклоненные результаты.

Учитель сказал, что мы должны использовать «накопитель строк» ​​для хранения отброшенных данных.

Это то, что у меня есть, и я застрял в хранении сброшенных данных.

РЕДАКТИРОВАТЬ: получил! Спасибо!

# 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, я не очень уверен, как сохранить отброшенные данные и позволить им накапливаться каждый раз, когда abs (y)> 100. круто с данными, хранящимися как "351.2, 231.1, 152.2" Я просто не знаю, как превратить переменную в строку и сохранить ее. Мы еще не выучили массивы, поэтому я не могу этого сделать.

Любая помощь будет высоко ценится. Спасибо!

Ответы [ 4 ]

1 голос
/ 16 марта 2010

«Строковый аккумулятор» не является Python «Условиями искусства». Возможно, учитель имел в виду «собрать все в одну строку» (ужасный подход в Python), или, может быть (если курс уже охватил списки), он имел в виду список строк (правильный подход Python) .

Другие ответы уже охватывают первую возможность, но если подразумевается второй (хороший), вам нужно:

а) изменить инициализацию на

 xDiscarded = []
 yDiscarded = []

так что они оба пустые списки;

б) измените «условный сброс» на что-то вроде

 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))

, чтобы сделать хороший вывод с правильными "названиями" и пунктуацией.

0 голосов
/ 16 марта 2010

Вы можете превратить переменную в строковое представление, используя str(y). Для управления форматированием вы можете использовать интерполяцию строк, например, "%.3f" % y.

Вы можете добавлять строки вместе и присваивать результаты переменной. E.g.:

string_a = string_b + string_c

или

string_a += string_b

Это не обязательно эффективно, но работает.

0 голосов
/ 16 марта 2010

Очень просто. Вы можете «превратить числа в строки», используя оператор форматирования (%), следующим образом:

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 недействительно.

0 голосов
/ 16 марта 2010

Вы можете преобразовать число в строку, например, так:

x = 100.0
xstr = str(x)

Вы можете добавить в строку, например, так:

xstr += 'another string'

Также нормально иметь пустую строку:

emptystring = ''

Надеюсь, что эти идеи помогут вам в правильном направлении.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...