Python 特定数字和四舍五入数字之和,小数点后两位
我试图在不改变文件本身的情况下从文件中获取某些数字的总和Python 特定数字和四舍五入数字之和,小数点后两位,python,python-2.7,Python,Python 2.7,我试图在不改变文件本身的情况下从文件中获取某些数字的总和 1 #person number Marlon Holmes #Name 18.86 # First number 13.02 # Second Number 13.36 # Third Number 对于数字之和,它必须是第一、第二和第三个数字 当前的数字以厘米为单位,已转换为英寸,小数点后两位是必要的 我目前的代码是根据第一、第二和第三个数字的总和提供前三名 当前代码: data = [] names = OrderedDict(
1 #person number
Marlon Holmes #Name
18.86 # First number
13.02 # Second Number
13.36 # Third Number
对于数字之和,它必须是第一、第二和第三个数字
当前的数字以厘米为单位,已转换为英寸,小数点后两位是必要的
我目前的代码是根据第一、第二和第三个数字的总和提供前三名
当前代码:
data = []
names = OrderedDict([('Competitor Number', int),
('Competitor Name', str),
('Cucumber', to_inch),
('Carrot', to_inch),
('Runner Bean', to_inch)])
with open('veggies_2016.txt') as fobj:
while True:
item = {}
try:
for name, func in names.items():
item[name] = func(next(fobj).strip())
data.append(item)
except StopIteration:
break
sorted_data = sorted(data, key=itemgetter('Runner Bean'), reverse = True)
for entry in sorted_data[:3]:
for key, value in entry.items():
print value
print
在我读取的文件中大约有50条记录,必须将所有记录的总和相加,然后放入,以便找到前3位,最好是小数点后两位
表示_英寸的代码:
def to_inch(cm):
return float(cm) / 2.54
整个文档围绕主菜单工作
为了得到总和,我尝试了
sum(item.entry.items())
,但没有成功,也尝试了“%.2f”
十进制数字/有效数字,但没有成功,如果我们现在不考虑从文件中读取数据,并且假设我们可以将数字放入列表中,我们可以使用Python的,那么任何帮助都将不胜感激
代码:
numbers = [18.86, 13.02, 13.36]
def to_inch(cm):
return cm/2.54
numbers_in_inches = list(map(to_inch, numbers))
print(numbers_in_inches)
numbers_rounded = list(map(round, numbers_in_inches, [0 for _ in numbers]))
print(numbers_rounded)
sum_numbers = sum(numbers_rounded)
print(sum_numbers)
[7.4251968503937, 5.125984251968504, 5.259842519685039]
[7.0, 5.0, 5.0]
17.0
import re
numbers_names = {}
numbers = []
player_number = ''
name = ''
with open('file.txt', 'r') as f:
for line in f:
if '#person number' in line:
player_number = int(line.split('#')[0])
elif '#Name' in line:
name = line.split('#')[0]
else:
line_numbers = re.sub(r"[^\d.]", "", line)
if '.' in line_numbers:
numbers.append(float(line_numbers))
if len(numbers) >= 3 and player_number and name:
numbers_names.update({'player_number': player_number, 'name': name, 'numbers': numbers})
numbers, player_number, name = [], 0, ''
print(numbers_names)
{'name': 'Marlon Holmes ', 'numbers': [18.86, 13.02, 13.36], 'player_number': 1}
输出:
numbers = [18.86, 13.02, 13.36]
def to_inch(cm):
return cm/2.54
numbers_in_inches = list(map(to_inch, numbers))
print(numbers_in_inches)
numbers_rounded = list(map(round, numbers_in_inches, [0 for _ in numbers]))
print(numbers_rounded)
sum_numbers = sum(numbers_rounded)
print(sum_numbers)
[7.4251968503937, 5.125984251968504, 5.259842519685039]
[7.0, 5.0, 5.0]
17.0
import re
numbers_names = {}
numbers = []
player_number = ''
name = ''
with open('file.txt', 'r') as f:
for line in f:
if '#person number' in line:
player_number = int(line.split('#')[0])
elif '#Name' in line:
name = line.split('#')[0]
else:
line_numbers = re.sub(r"[^\d.]", "", line)
if '.' in line_numbers:
numbers.append(float(line_numbers))
if len(numbers) >= 3 and player_number and name:
numbers_names.update({'player_number': player_number, 'name': name, 'numbers': numbers})
numbers, player_number, name = [], 0, ''
print(numbers_names)
{'name': 'Marlon Holmes ', 'numbers': [18.86, 13.02, 13.36], 'player_number': 1}
发生了什么:
numbers = [18.86, 13.02, 13.36]
def to_inch(cm):
return cm/2.54
numbers_in_inches = list(map(to_inch, numbers))
print(numbers_in_inches)
numbers_rounded = list(map(round, numbers_in_inches, [0 for _ in numbers]))
print(numbers_rounded)
sum_numbers = sum(numbers_rounded)
print(sum_numbers)
[7.4251968503937, 5.125984251968504, 5.259842519685039]
[7.0, 5.0, 5.0]
17.0
import re
numbers_names = {}
numbers = []
player_number = ''
name = ''
with open('file.txt', 'r') as f:
for line in f:
if '#person number' in line:
player_number = int(line.split('#')[0])
elif '#Name' in line:
name = line.split('#')[0]
else:
line_numbers = re.sub(r"[^\d.]", "", line)
if '.' in line_numbers:
numbers.append(float(line_numbers))
if len(numbers) >= 3 and player_number and name:
numbers_names.update({'player_number': player_number, 'name': name, 'numbers': numbers})
numbers, player_number, name = [], 0, ''
print(numbers_names)
{'name': 'Marlon Holmes ', 'numbers': [18.86, 13.02, 13.36], 'player_number': 1}
将您的功能映射到列表中每个项目的\u inch
将Python的round()
函数映射到numbers\u in.
中的每个值上,最后理解列表的理由是它为map()
创建了一个0
的列表,用于round(number,places)
的位置
使用Python的sum()
对所有数字求和,当然,如果要在求和后进行取整,可以使用round(sum\u numbers,0)
。注意:如果您想在求和之后对进行取整,请使用math.fsum
而不是科波菲尔在评论中提到的sum
现在分析文件:
numbers = [18.86, 13.02, 13.36]
def to_inch(cm):
return cm/2.54
numbers_in_inches = list(map(to_inch, numbers))
print(numbers_in_inches)
numbers_rounded = list(map(round, numbers_in_inches, [0 for _ in numbers]))
print(numbers_rounded)
sum_numbers = sum(numbers_rounded)
print(sum_numbers)
[7.4251968503937, 5.125984251968504, 5.259842519685039]
[7.0, 5.0, 5.0]
17.0
import re
numbers_names = {}
numbers = []
player_number = ''
name = ''
with open('file.txt', 'r') as f:
for line in f:
if '#person number' in line:
player_number = int(line.split('#')[0])
elif '#Name' in line:
name = line.split('#')[0]
else:
line_numbers = re.sub(r"[^\d.]", "", line)
if '.' in line_numbers:
numbers.append(float(line_numbers))
if len(numbers) >= 3 and player_number and name:
numbers_names.update({'player_number': player_number, 'name': name, 'numbers': numbers})
numbers, player_number, name = [], 0, ''
print(numbers_names)
{'name': 'Marlon Holmes ', 'numbers': [18.86, 13.02, 13.36], 'player_number': 1}
输出:
numbers = [18.86, 13.02, 13.36]
def to_inch(cm):
return cm/2.54
numbers_in_inches = list(map(to_inch, numbers))
print(numbers_in_inches)
numbers_rounded = list(map(round, numbers_in_inches, [0 for _ in numbers]))
print(numbers_rounded)
sum_numbers = sum(numbers_rounded)
print(sum_numbers)
[7.4251968503937, 5.125984251968504, 5.259842519685039]
[7.0, 5.0, 5.0]
17.0
import re
numbers_names = {}
numbers = []
player_number = ''
name = ''
with open('file.txt', 'r') as f:
for line in f:
if '#person number' in line:
player_number = int(line.split('#')[0])
elif '#Name' in line:
name = line.split('#')[0]
else:
line_numbers = re.sub(r"[^\d.]", "", line)
if '.' in line_numbers:
numbers.append(float(line_numbers))
if len(numbers) >= 3 and player_number and name:
numbers_names.update({'player_number': player_number, 'name': name, 'numbers': numbers})
numbers, player_number, name = [], 0, ''
print(numbers_names)
{'name': 'Marlon Holmes ', 'numbers': [18.86, 13.02, 13.36], 'player_number': 1}
解析文件的方式:
numbers = [18.86, 13.02, 13.36]
def to_inch(cm):
return cm/2.54
numbers_in_inches = list(map(to_inch, numbers))
print(numbers_in_inches)
numbers_rounded = list(map(round, numbers_in_inches, [0 for _ in numbers]))
print(numbers_rounded)
sum_numbers = sum(numbers_rounded)
print(sum_numbers)
[7.4251968503937, 5.125984251968504, 5.259842519685039]
[7.0, 5.0, 5.0]
17.0
import re
numbers_names = {}
numbers = []
player_number = ''
name = ''
with open('file.txt', 'r') as f:
for line in f:
if '#person number' in line:
player_number = int(line.split('#')[0])
elif '#Name' in line:
name = line.split('#')[0]
else:
line_numbers = re.sub(r"[^\d.]", "", line)
if '.' in line_numbers:
numbers.append(float(line_numbers))
if len(numbers) >= 3 and player_number and name:
numbers_names.update({'player_number': player_number, 'name': name, 'numbers': numbers})
numbers, player_number, name = [], 0, ''
print(numbers_names)
{'name': 'Marlon Holmes ', 'numbers': [18.86, 13.02, 13.36], 'player_number': 1}
首先打开文件
接下来迭代文件中的每一行
对于文件中的每一行,它都会查看是一行包含玩家的姓名、玩家编号还是他拥有的编号
- Player Number将行拆分为音符,然后数据获取数据并将其设置为等于
Player\u Number
- Name将行拆分为注释,然后数据获取数据并将其设置为等于
Name
- 他拥有的数字它使用
re
的re.sub()
删除文件中除
以外的所有非单词字符。然后,检查清理后的行中是否有小数点。最后,如果是这样,它会将该行附加到numbers
如果这三个值都存在,它会将它们全部附加到numbers\u names
字典中,并为下一个播放器重置变量
顺便说一句,它是“%.2f”
。我如何让它与来自该文件的所有数字一起工作?解析该文件并将所有数字放入名为数字的列表中Updated@NeilHouston您可以将成圆部分添加到到_inch
中,如下所示:返回圆(浮动(cm)/2.54,2)
如果您想要2位小数,或者想要最小化浮点舍入问题的任何其他数字,则可以使用2代替总和