作者luckid (luckid)
看板Python
标题Re: [问题] 如何复制string
时间Sat Oct 5 23:49:26 2019
※ 引述《rongrong421 (R1VERK1D)》之铭言:
: 我发现python的字串不能直接用赋值运算符号=复制
: 那请问要如何复制字串a的值到字串b呢?
小弟刚学python不久,想说用正则解决此问题,希望有所帮助,
写得不对的地方请不吝指正,感谢:
#引用正则module
import re
print('type a word for guessing:')
#取得要猜的原始单字
ans=input()
#判定使用者输入的字串
# 规则:需为至少两个字母长的小写英文单字(此处未判断该单字是否确实存在)
regexAns=re.compile(r'^[a-z]{2,}$')
chkAns=regexAns.search(ans)
# 使用者输入不合法字串则要求重新输入
while chkAns is None:
print('please TYPE A WORD(at least 2 characters long) for guessing,thank
you.')
print('type a word for guessing:')
ans=input()
chkAns=regexAns.search(ans)
# 使用者输入合法字串
# 开始猜单字
# 根据使用者输入的字串产生"*"构成的字串存入final变数中 ex:若使用者输入
"word",final变数会存入"****"
print("Start guessing")
final="*"*len(ans)
print(final)
# 要求使用者输入字母
print('Please type alaphabet:')
guess=input()
# 判定使用者输入是否合法
# 规则:需为单一字元的英文小写字母
regexGuess=re.compile(r'^[a-z]{1}$')
chkGuess=regexGuess.search(guess)
regexFinal=re.compile(r'[\*]+')
chkFinal=regexFinal.search(final)
list_guess=[]
while True:
# 使用者输入不合法
# 要求重新输入
if chkGuess is None:
print('please TYPE ONE LOWER-CASE ALPHABET ONLY,thank you.')
guess=input()
chkGuess=regexGuess.search(guess)
# 使用者输入合法字母
# 将该字母存入list_guess变数中
# 不去判断字母有无重复,因为不影响之後的取代
list_guess.append(guess)
# 此处的正则表达规则:
# r[^字母1|字母2|...]
# ans变数是存放正确的单字解答
# 所以可用取代的方式,将ans变数中不符合r[^字母1|字母2|...]规则的字母全部取代
为"*"
# 例:
# 假设ans为"word"
# 使用者若输入"a",则会将"不是a的字母"全部取代为"*",存入final中-->使用者会看
到的是"****"
# 使用者若输入"w",则会将"不是w的字母"全部取代为"*",存入final中-->使用者会看
到的是"w***" (w不会被取代)
if len(list_guess)==1:
myregex="[^"+list_guess[0]+"]"
else:
myregex="[^"+"|".join(list_guess)+"]"
# 此处的正则表达式是用於判定final变数中还有没有"*"字元的存在
# 若为None值,表示final变数已全为字母,使用者已得到正确答案,跳出回圈
regexReplace=re.compile(rf'{myregex}')
final=regexReplace.sub("*",ans)
chkFinal=regexFinal.search(final)
if chkFinal is None:
break
print(f'{final}')
print('keep trying')
guess=input()
print(f'GJ! the word FOR guessing is : {ans}')
--
https://www.youtube.com/watch?v=B_CMmbFexbM
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 36.236.11.54 (台湾)
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/Python/M.1570290571.A.67B.html