gpt4 book ai didi

python - 如何计算被随机字母包围的特定字符

转载 作者:太空宇宙 更新时间:2023-11-03 20:53:08 26 4
gpt4 key购买 nike

我正在尝试使用字典计算标点符号:撇号(')和连字符(-)。我想看看是否可以使用列表/字典/for 循环和 bool 表达式来实现这一点。这些标点符号只有被任何其他字母包围时才必须被计算在内!例如。 jack-in-a-box(即 3 个连字符)和不应该(1 个撇号)。这些字母可以是从 a 到 z 的任何字母。此外,由于这是作业的一部分,因此不能使用任何模块/库。我没有主意,不知道该怎么办。任何帮助将不胜感激。

这是我尝试过的:但我得到一个 KeyError:0

def countpunc2():
filename = input("Name of file? ")
text = open(filename, "r").read()
text = text.lower() #make all the words lowercase (for our convenience)
for ch in '!"#$%&()*+./:<=>?@[\\]^_`{|}~':
text = text.replace(ch, ' ')
for ch in '--':
text = text.replace(ch, ' ')
words = text.split('\n') #splitting the text for words
wordlist = str(words)
count = {} #create dictionary; the keys/values are added on
punctuations = ",;'-"
letters = "abcdefghijklmnopqrstuvwxyz"
for i, char in enumerate(wordlist):
if i < 1:
continue
if i > len(wordlist) - 2:
continue
if char in punctuations:
if char not in count:
count[char] = 0
if count[i-1] in letters and count[i+1] in letters:
count[char] += 1
print(count)

更新:我将代码更改为:

def countpunc2():
filename = input("Name of file? ")
text = open(filename, "r").read()
text = text.lower() #make all the words lowercase (for our convenience)
for ch in '!"#$%&()*+./:<=>?@[\\]^_`{|}~':
text = text.replace(ch, ' ')
for ch in '--':
text = text.replace(ch, ' ')
words = text.split('\n') #splitting the text for words
wordlist = str(words)
count = {} #create dictionary; the keys/values are added on
punctuations = ",;'-"
letters = "abcdefghijklmnopqrstuvwxyz"
for i, char in enumerate(wordlist):
if i < 1:
continue
if i > len(wordlist) - 2:
continue
if char in punctuations:
if char not in count:
count[char] = 0
if wordlist[i-1] in letters and wordlist[i+1] in letters:
count[char] += 1
print(count)

虽然它给我一个输出,但它不正确。示例文件:https://www.dropbox.com/s/kqwvudflxnmldqr/sample1.txt?dl=0预期结果必须为:{',' : 27, '-' : 10, ';' :5,“'”:1}

最佳答案

我可能会保持比这更简单。

#!/usr/bin/env python3
sample = "I'd rather take a day off, it's hard work sitting down and writing a code. It's amazin' how some people find this so easy. Bunch of know-it-alls."

punc = "!\"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~"
letters = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"

d = {}
for i, char in enumerate(sample):
if i < 1:
continue

if i > len(sample) - 2:
continue

if char in punc:
if char not in d:
d[char] = 0

if sample[i - 1] in letters and sample[i + 1] in letters:
d[char] += 1

print(d)

输出:

{"'": 3, ',': 0, '.': 0, '-': 2}

不知道你从哪里得到“;”从。另外,你的逗号旁边有一个空格..所以它在这里不算数..如果算的话,请在字母变量中添加一个空格。

发生情况的解释:

我们启动一个字典并以 sample 形式读取示例文本,并逐个字符地迭代它,使用 enumerate 来处理索引。如果它太接近结束或开始资格,我们会跳过它。

我检查了我们使用枚举中的 i 变量之前和之后的字符。如果符合条件,则添加到其计数中。

注意:尽管有 shebang,此代码可以在 python2 中运行

关于python - 如何计算被随机字母包围的特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56187563/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com