我在计算文本文件中文本的不同百分比时遇到问题。以下是我的代码。我会感激任何帮助的,谢谢。
- def pecent (pento):
- pento = x/100 * filename
- text = open ("C:\\fname.txt", 'r')
- filename = text.split()
- x = [10, 20, 30, 40, 50, 60, 70, 80, 90]
- for z in x:
- print pento
# 回答1
在您的第一行代码中:
Pento=x/100*文件名
X
和
文件名
都是未定义的。
# 回答2
将一个文件名(我假设它是一个字符串)乘以一个数字也没有意义。
# 回答3
嗨,兔子,你是对的,我正在试着用一个数字来乘一个字符串。我遇到了一些与首先转换为浮点数b4乘法有关的事情,但我正在尝试如何进行这种转换。有什么主意吗?
# 回答4
在bvdet中,x是一个数字,而filename是一个字符序列(字符串)。我必须明确地定义它们吗?
# 回答5
Python有特定的作用域规则。请参阅Python文档
这里
。"x"和"filename"必须在某个地方定义。
- >>> x = 1000
- >>> s = "ABC"
- >>> def pecent(): # it makes no sense for pento to be an argument then define it on the next line
- ... pento = x/100*s
- ... print pento
- ...
- >>> pecent()
- ABCABCABCABCABCABCABCABCABCABC
- >>>
# 回答6
嗨,bvdet,谢谢你的回复。你真的帮了我大忙。您的代码起作用了,但只有当x等于或大于100时才起作用。它不能分割文本(不能产生90%、80%、-10%的文本)。此外,我想循环通过,以获得上述比例的文本。我一直收到以下错误:TypeError:不支持/:'list'和'int'的操作数类型。下面是我的代码行。
- x = range (10,100, 10)
- f=open ("C:\predator4.txt", 'r')
- s = f.read()
- def pecent():
- pento = x/100*s
- for z in x:
- print pento
- pecent()
# 回答7
如果您运行的是Python2.x而不是3.x,则Divide返回一个int。您必须通过提供至少一个浮点数来告诉它使用浮点数。
- pento = x/100.0*s ## 100.0 = float
- ## or
- pento = x/float(100)*s ## float(100) cast to float
# 回答8
大家好,很抱歉,我不能及时传达上述解决方案的结果。我尝试按照您的建议使用Float,但仍然收到相同的错误消息。你能不能试一下文本文档上的代码,看看能不能用?如果运行正常,请让我知道您使用的是哪个版本的PYTHON。先谢谢你。
# 回答9
也许你想做这样的事情:
- def text_percent(fn, percentage=100.):
- text = open(fn).read()
- pt = percentage/100.
- return text[:int(pt*len(text))]
-
- print text_percent("text.txt", 20)
# 回答10
嗨,bvdet,谢谢你的回复。您的解决方案运行良好。我还有一个问题要问您:我如何创建一个循环,使我能够一次计算文档中文本的10%、20%、.....、90%,而不是每次只计算一个百分比?
谢谢你,伙计。
# 回答11 - for percentage in range(10, 100, 10):
- print text_percent("text.txt", percentage)
理想情况下,您只需打开文件一次,然后在循环中完成所有计算。
- def text_percent(fn, *percentages):
- text = open(fn).read()
- return [text[:int(pt/100.*len(text))] for pt in percentages]
-
- print "\n\n".join(text_percent("text.txt", 10, 20, 30))