我正在尝试创建一个程序,以随机ASCII标点替换输入的单词之间的空格。
我已经尽力尝试使用string和random模块,但是到目前为止还没有运气。
def basewords():
print("Enter base words here:")
q = str(input("TIP: Enter your desired words seperated by spaces only.\n> "))
lst = [string.punctuation, string.digits]
x = ''.join(random.choice(lst)(c) for c in q)
q = q.replace(" ", x)
print(q)
我希望单词之间的空格(例如Hello World Dog House)具有ASCII随机标点符号,以便理论上可以像“ Hello!World ^ Dog,House”那样结束。但是,目前,我收到了TypeError。非常感谢您的帮助。
答案 0 :(得分:2)
只需加入两个特殊字符列表,不要将它们放在random.choice
的列表中。一个班轮示例:
''.join(i if i != ' ' else random.choice(string.punctuation + string.digits)
for i in q)
您当然可以...
result = ''
for i in q:
if i != ' ':
result += i
else:
result += random.choice(string.punctuation + string.digits)
q = result
第二个示例是上面的单行代码示例的详细版本。 要了解它,您可以放心地将其拆分。
q = ''.join( LIST_COMPREHANSION )
这是用空字符串连接到LIST_COMPREHANSION里面的。您可以检查https://www.pythonforbeginners.com/basics/list-comprehensions-in-python了解详细信息。它包括:
EXPRESSION for i in q
表达式本身是三元运算符-https://book.pythontips.com/en/latest/ternary_operators.html:
i if i != ' ' else random.choice(string.punctuation + string.digits)
但是使用str.replace无效,第二个参数是常量,您不能在其中使用随机字符生成器。
答案 1 :(得分:1)
您的TypeError
的原因是因为以下这一行:
x = ''.join(random.choice(lst)(c) for c in q)
random.choice(iterable)
返回iterable
中的一个随机项,因为您的可迭代对象由字符串组成,所以它返回一个字符串。这样做(c)
时,您尝试像函数一样调用字符串,这将引发TypeError
,因为字符串不可调用。
那这样的事情呢?
def basewords():
print("Enter base words here:")
q = str(input("TIP: Enter your desired words seperated by spaces only.\n> "))
specialchars = string.punctuation + string.digits
def rand():
return random.choice(specialchars)
print(''.join(x.replace(' ', rand()) for x in q))
演示:
In [41]: basewords()
Enter base words here:
TIP: Enter your desired words seperated by spaces only.
> Hello World Dog House
Hello;World>Dog3House
答案 2 :(得分:0)
您不认为在第一个标点(33)和最后一个标点(47)的ascii值之间生成随机数会更容易实现。然后,您可以照常使用它的ascii值来查找相应的字符,从而照常在您的代码中使用它。
您可以进一步了解ascii表here:
<-希望它可以简化您的解决方案。
<-UpVote If HelpFul