如何根据用户输入替换字符?

时间:2018-03-17 19:00:06

标签: python python-3.x

new = ['|<', '@', '1', '3', '7', '0', '8', '\/']
old = ['K', 'A', 'L', 'E', 'T', 'O', 'B', 'V']
ask_user = input("Type a sentence: ")

def ask_replace_letters():
    ask_user = input("Do you want to replace letters? ").upper()
    if ask_user == "YES":
        ask_user1 = input("What letters do you want to replace? ").upper()
        for letter in ask_user1:
            if letter not in old:
                print("This program cannot replace the letter(s): ", letter)
                print(replace_letters())

    elif ask_user == "NO":
        print(replace_phrases())

    else:
        print("Please enter yes or no.")

def replace_letters():
    result = ask_user
    for i in range(len(old)):
        result = result.replace(old[i], new[i])
    return result

ask_replace_letters()

当我运行代码时,我得到了:

Type a sentence: BYE
Do you want to replace letters? yes
What letters do you want to replace? BYW 
This program cannot replace the letter(s):  Y
8Y3
This program cannot replace the letter(s):  W
8Y3

我想要的是什么:

Type a sentence: BYE
Do you want to replace letters? YES
What letters do you want to replace? BYW
This program cannot replace the letter(s):  YW
8YE

有办法解决这个问题吗?基本上我希望函数接受用户输入的字符,检查它是否在列表中,更改它,并说明无法更改的字符。对不起,我对Python有点新鲜。

4 个答案:

答案 0 :(得分:0)

您可以在此处使用str.translate进行快速有效的替换。

首先,构建一个映射字典 - <old : new>,这将成为一个全局变量。

trans_dict = dict(zip(old, new))

接下来,定义一个执行替换的函数。该函数接受您的输入字符串和替换模式。使用set操作将有效字符与无效字符分开。

对所有有效字符执行翻译操作。

def replace(string, repl):
    repl = set(repl)
    # find invalid characters
    invalid = repl - trans_dict.keys()
    # find valid characters in `repl` - replacement is performed on these chars only
    valid = repl - invalid

    # display invalid characters to stdout
    print('Cannot replace {}'.format(''.join(invalid)))

    # translate/map string using the `trans_dict` mapping
    return string.translate(
        str.maketrans({k : trans_dict[k] for k in trans_dict.keys() & valid}
    ))

In [222]: replace('BYE', 'BYW')
Cannot replace YW
Out[222]: '8YE'

此代码仅在python3.x上运行。

答案 1 :(得分:0)

我认为这应该有用(它对我有用):

new = ['|<', '@', '1', '3', '7', '0', '8', '\/']
old = ['K', 'A', 'L', 'E', 'T', 'O', 'B', 'V']
ask_user = input("Type a sentence: ")

def ask_replace_letters():
    ask_user2=input("Do you want to replace letters? ").upper()#different name for variable
    if ask_user2== "YES":
        ask_user1 = input("What letters do you want to replace? ").upper()
        letters=[]#letters to replace
        for letter in ask_user1:
            if letter not in old:
                print("This program cannot replace the letter: ", letter)#may be repeated
            else:
                letters+=letter#add letter to letters to replace
        print(replace_letters(letters))#replace them

    elif ask_user2 == "NO":
        print(replace_letters())

    else:
        print("Please enter yes or no.")

def replace_letters(letters=[]):#input for which chars to replace, rather than all
    result = ask_user.upper()#so it will match
    for i in letters:#for each to replace
        pos=old.index(i)#get pos in old/new lists
        result = result.replace(old[pos], new[pos])#replace
    return result.lower()#lower, since we have done upper

ask_replace_letters()
然而,这将使它全部降低。删除替换字母的最后一行,使其全部为高位。

答案 2 :(得分:0)

根据您的输出类型,我建议您在其中一个if子句中进行以下更改:

if ask_user == "YES":
    ask_user1 = input("What letters do you want to replace? ").upper()
    unreplacedLetters = ''.join([letter for letter in ask_user1 if letter not in old])
    print("This program cannot replace the letter(s): ", unreplacedLetters)
    print(replace_letters())

我创建了“未放置的字母”&#39; string,它使用函数join将所有不在一起的字母放在一起,没有任何空格。此外,我声明整个列表作为列表理解加入,以使代码简洁。我在这里尝试过它。

答案 3 :(得分:0)

x = input("Enter the sentence")
x1 = x.replace('a','4').replace('e','3').replace('i','1').replace('o','0').replace('u','5')
print(x1)

输入:

Javascript is cool

输出:

j4v4scr1pt 1s s0 c00l
相关问题