计算器 - 尝试从“for”中获取第一个数字并将其用作 INIT_VALUE
Posted
技术标签:
【中文标题】计算器 - 尝试从“for”中获取第一个数字并将其用作 INIT_VALUE【英文标题】:Calculator - trying to take first number from 'for' and using it as INIT_VALUE 【发布时间】:2017-09-20 15:15:16 【问题描述】:我正在尝试从列表中获取第一个数字并将其用作我的初始值。当我开始做减法时,我意识到你实际上并没有像加数那样从 0 开始,而是从用“for”写的第一个数字开始。 比如你加0+4+5,那么4+5其实就是一回事;减法时,做0-4-5和4-5是不同的。我只是从 Python 和一般编程开始,所以我想知道这是否可能。
我的代码:
print ("You chose subtraction.")
b = int(input("Enter how many numbers you want to substract."))
c = [int (input( "Number: ")) for _ in range (b)]
result = functools.reduce(operator.sub, c, INIT_VALUE)
print("Your answer is:", result)
【问题讨论】:
【参考方案1】:您可以通过访问c[0]
(或在我的示例中为values[0]
)获取输入的第一个数字,您还只需减去该索引之后的值,以便您可以使用c[1:]
(或values[1:]
在我的例子中)
import operator
import functools
print("You chose subtraction.")
total_numbers = int(input("Enter how many numbers you want to substract."))
values = [int(input("Number: ")) for _ in range(total_numbers)]
result = functools.reduce(operator.sub, values[1:], values[0])
print("Your answer is:", result)
>> You chose subtraction.
>> Enter how many numbers you want to substract.
> 5
>> Number:
> 10
>> Number:
> 1
>> Number:
> 1
>> Number:
> 1
>> Number:
> 1
>> Your answer is: 6
【讨论】:
【参考方案2】:有几种方法可以做到这一点:
你可以单独得到第一个数字:
>>> INIT_VALUE = input('Number: ')
>>> numbers = [int(input('Number: ')) for _ in range(b - 1)]
>>> result = reduce(sub, numbers, INIT_VALUE)
或者,您可以使用索引:
>>> INIT_VALUE = c[0]
>>> rest = c[1:]
>>> result = reduce(sub, rest, INIT_VALUE)
或者,如果您想使用循环而不是 reduce:
>>> result = int(input('Number: '))
>>> for _ in range(b - 1):
... result -= int(input('Number: '))
【讨论】:
【参考方案3】:你可以做reduce(sub, lst[1:], lst[0])
,但你也可以完全跳过初始化器
reduce(sub, lst)
如果您不提供,将采用第一个值
https://docs.python.org/3/library/functools.html#functools.reduce
【讨论】:
【参考方案4】:另一个选项是 Python 3 中的 itertools.accumulate
。这可以让您查看中间计算。
import operator as op
import itertools as it
print("You chose subtraction.")
total_numbers = int(input("Enter how many numbers you want to substract? "))
values = [int(input("Number: ")) for _ in range(total_numbers)]
# You chose subtraction.
# Enter how many numbers you want to substract? 3
# Number: 0
# Number: 5
# Number: 6
results = list(it.accumulate(values, op.sub))
results
# [0, -5, -11]
results[-1]
# -11
另见这篇比较accumulate
and reduce
的帖子。
【讨论】:
哦,是的,这很好,以后知道了,我以后一定会检查的,但现在我会坚持基本的:D以上是关于计算器 - 尝试从“for”中获取第一个数字并将其用作 INIT_VALUE的主要内容,如果未能解决你的问题,请参考以下文章
从 alias 命令中获取第一个参数并将其插入到文件扩展名中