3

Ok, I made myself the challenge so I can do some programming.

However I faced some problems.

adtprice = {19.99 , 49.99}
chldprice = adtprice * (3/4) - 7.5

And this is Error I got as the result.

Traceback (most recent call last):
File "C:/Users/Owner/Desktop/Programming Scripts/park.py", line 2, in <module>
chldprice = adtprice * (3/4) - 7.5
TypeError: unsupported operand type(s) for *: 'set' and 'float'

I wants it to be simple and useable since I will use adtprice and chldprice often.

4

5 回答 5

4
adtprice = [19.99 , 49.99]
chldprice = [a * (3.0/4) - 7.5 for a in adtprice]
于 2013-05-12T20:47:53.227 回答
2

这可能是您正在寻找的。首先,一个集合不能乘以一个数字,你可以使用列表推导来代替并且3/4只会返回0(假设 Python 2.x)。我假设你想要3.0/4.

>>> adtprice = [19.99 , 49.99]
>>> chldprice = [price*(3.0/4) - 7.5 for price in adtprice]
>>> chldprice
[7.4925, 29.9925]
于 2013-05-12T20:48:02.963 回答
1

我认为您想要的是计算每个成人价格的儿童价格。您没有列表,而是一组,因此这应该会有所帮助:

adult_prices = [19.99, 49.99]
child_prices = []

for price in adult_prices:
    child_price = price * (3.0/4.0) - 7.5
    child_prices.append(child_price) # Add each child price to the array
    print("For adult price {}, child price is {}".format(price, child_price))

 print(adult_prices)
 print(child_prices)
于 2013-05-12T20:49:36.780 回答
1

首先,你有一个集合,而不是一个列表。使用方括号而不是花括号来创建列表。

正如其他人所提到的,您需要对列表的各个元素进行操作。

您可以通过列表理解来做到这一点

adtprice  = [19.99, 49.99]
chldprice = [p * (3./4) - 7.5
             for p in adtprice]

或使用map,如果您愿意:

adtprice  = [19.99, 49.99]
chldprice = map(lambda p: p * (3./4) - 7.5,
                adtprice)

如果您发现自己想要对序列执行这些类型的批量操作,请考虑使用numpy。它是一组以简洁而强大的方式有效处理矩阵和向量数学的库。例如:

adtprice  = numpy.array([19.99, 49.99])
chldprice = adtprice * (3./4) - 7.5
于 2013-05-12T20:57:49.090 回答
1

虽然其他答案会起作用,但如果您想实际对值序列进行数学运算,我建议使用numpylibrary。它在这方面做得非常好。这是您的代码使用 numpy 数组的样子:

import numpy as np

adult_prices = np.asarray([19.99, 49.99])
child_prices = adult_prices * (3.0/4) - 7.5  # math operations work item by item

print(child_prices) # prints "array([  7.4925,  29.9925])"

你可以用类似的方式做更多的事情。例如,如果您只需要小数点后两位数,则可以将结果四舍五入:

child_prices = np.round(adult_prices * (3.0/4) - 7.5, 2)

print(child_prices) # prints "array([  7.49,  29.99])"
于 2013-05-12T21:26:25.303 回答