计算器 - 尝试从“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的主要内容,如果未能解决你的问题,请参考以下文章

从字符串评估数学表达式并将其插入堆栈

如何计算字符串并将其存储在变量中? [复制]

从 JSON 获取数据并将其格式化为表格

从 alias 命令中获取第一个参数并将其插入到文件扩展名中

如何获取罗马数字字符串并将其转换为base10数字? [关闭]

R从字符串中提取第一个数字