我需要找到文件的整数。我需要获得这些整数的平均值(我已经弄清楚了这部分)。我收到错误消息:“输入[]错误:无法将'int'对象隐式转换为str”
编辑-代码正在运行。谢谢大家! DiCaprio帮助我提出了最终解决方案。
我将最终代码编辑为:
def average_ints():
integers = []
num_ints = 0
avg = 0
with open("file") as f:
for line in f:
for i in line.split(' '):
integers.append(int(i))
num_ints = num_ints + 1
avg = (sum(integers))/((num_ints))
return avg
如何找到此文件的整数?
答案 0 :(得分:2)
使用强制转换int(x)
将str转换为int。默认情况下,所有内容都从文件读取为str。
def average_ints():
integers = 0
num_ints = 0
avg = 0
with open("associate.txt") as f:
for line in f:
for i in line:
# if i in line: <- this should always be True
integers += int(i) # + integers <- += adds and stores
num_ints = num_ints + 1
avg = integers/num_ints
return avg
编辑:
我只是认为您可能在for i in line:
部分遇到了问题。
行将需要拆分。尝试使用for i in line.split(' ')
,假设您的整数被空格分隔。
编辑2:
如果每行一个整数,则使用:
def average_ints():
integers = 0
num_ints = 0
avg = 0
with open("associate.txt") as f:
for line in f:
integers += int(line)
num_ints = num_ints + 1
avg = integers/num_ints
return avg
答案 1 :(得分:0)
这里的问题是,行中的'int'是一个字符串,您需要先将其转换为整数。您可以通过将int替换为int(int)来做到这一点。
这是假设文件中只有数字(可以用浮点数或整数表示的字符)。如果不是,则需要考虑这一点。
在内置函数后命名变量也不是一个好主意,因此我会将int的名称更改为其他名称。
答案 2 :(得分:0)
您可能不应使用“ int”作为变量,因为它是内置变量,如果以后尝试引用它,将无法使用。
因此,从外观上看,您想将文件中的所有整数取平均值吗?这是一个可以实现的功能:
def avg_ints(x): # Where x is a file
total = 0
count = 0
lines = x.readlines()
for line in lines:
for character in line:
try:
character = int(character)
count += 1
total += character
except ValueError:
pass
return total/count
f = open("associate.txt")
print(avg_ints(f))
答案 3 :(得分:0)
您是否尝试过使用正则表达式?对您来说可能会更容易一些。
读取文件,并使用类似这样的表达式可以解析文件中的整数。
[0-9]+
https://docs.python.org/3/howto/regex.html
我希望这会有所帮助。
答案 4 :(得分:0)
或者为什么不这样做,一个简单的解决方案:
def average_ints():
with open("associate.txt") as f:
integers=int(f.read())
num_ints=len(str(integers))
avg = integers/num_ints
return avg
只需直接转换为整数,而无需深入每个字符
如果有非数字值:
def average_ints():
num_ints=0
integers=0
with open("associate.txt") as f:
for i in f.read():
if i.isdigit():
num_ints+=1
integers+=int(i)
avg = integers/num_ints
return avg
答案 5 :(得分:0)
尝试使用另一种解决方案,但除外:
def average_ints():
integers = 0
num_ints = 0
avg = 0
with open("associate.txt") as f:
for line in f:
for s in line.split():
try:
i = int(s)
integers = i + integers
num_ints = num_ints + 1
except ValueError:
continue
avg = integers/num_ints
return avg
答案 6 :(得分:0)
您可以使用正则表达式模块轻松解决它。
import re
def avarage_ints():
with open("associate.txt") as f:
content = f.read()
list_of_integer_strings = re.findall(r'\d+', content)
list_of_integers = list(map(int, list_of_integer_strings))
avg = sum(list_of_integers) / len(list_of_integers)
return avg
该正则表达式将匹配文件内容中包含十进制数字的任何字符串,并且findall将返回包含它们的列表。
您可能要避免匹配单词中的整数。例如,不计算“ sample2”中的“ 2”。在这种情况下,您可以从r'\d+'
更改正则表达式
到r'\A\d+\s|\s\d+\s|\s\d+$'
答案 7 :(得分:0)
我提供了DiCaprio答案的精简版,并做了一些修改,以确保您只收集整数并且可以将函数用于多个文件。
def average_ints(path):
integers = []
with open(path) as f:
for line in f:
for i in line:
if i.isdigit(): # Checks if string i represents an integer
integers.append(int(i)) # Appends the string as an integer to your list
return sum(integers) / len(integers) # Calculates the average of the list items
print(average_ints('associate.txt')) # Your specific use case