我试图制作一个可用于一次性密码加密的程序,通过计算字符数并为每个字符分配一个随机数。我开始创建一条让程序忽略空格的行,但后来我意识到我还需要忽略其他符号。我查看了 How to count the number of letters in a string without the spaces? 的空格,
它证明非常有帮助。但是,答案仅显示如何一次删除一个符号。要通过使用该答案做我想做的事情,我必须有一长串的- how_long.count('
字符 ')
,以及我可能根本不知道的符号可能仍然被复制。因此,我想要一种方法,它只计算我在列表中写下的所有字母字符。这是可能的,如果是这样,它将如何完成?
我的代码:
import random
import sys
num = 0
how_long = input("Message (The punctuation will not be counted)\n Message: ")
charNum = len(how_long) - how_long.count(' ')
print("\n")
print("Shift the letters individually by their respective numbers.")
for num in range(0, charNum-1):
sys.stdout.write(str(random.randint(1, 25))+", ")
print(random.randint(1, 25))
答案 0 :(得分:1)
如果你想要的结果是清理一个字符串所以它只包含一个所需的字符子集,以下内容可以正常工作,但是,我不确定我完全理解你的问题是什么,所以你可能需要稍微修改一下。
desired_letters = 'ABCDOSTRY'
test_input = 'an apple a day keeps the doctor away'
cleaned = ''.join(l for l in test_input if l.upper() in desired_letters)
# cleaned == 'aaadaystdoctoraay'
答案 1 :(得分:0)
过滤字符串:
source_string='My String'
allow_chars=['a','e','i','o','u'] #whatever characters you want to accept
source_string_list=list(source_string)
source_string_filtered=list(filter(lambda x: x in allow_chars,source_string_list))
计数将是:len(source_string_filtered)
答案 2 :(得分:0)
使用Regex查找输入中的字母数:
import re, sys, random
how_long = input("Message (The punctuation will not be counted)\n Message: ")
regex_for_letters = "[A-Za-z]"
letter_count = 0
for char in how_long:
check_letter = re.match(regex_for_letters, char)
if check_letter:
letter_count += 1
print(letter_count)
for num in range(0, letter_count-1):
sys.stdout.write(str(random.randint(1, 25))+", ")
print(random.randint(1, 25))