对于get_letter_from_user函数,在使用while循环进行验证时,不断重复无效的输入;我想确保它是单个字母且小写,并且我想确保它不等于函数的第二个参数。但我不确定我做错了什么。 (以及如果您有技巧,如何在编码中获得自信)
def get_text_from_user(prompt):
return input(prompt).lower()
def get_letter_from_user(prompt, not_allowed):
not_allowed = ''
allowed = input(prompt).lower()
while not allowed == not_allowed or allowed.isalpha() or len(allowed) > 1:
allowed = str(input('Invalid letter, try again:'))
return allowed
def main():
text = get_text_from_user("Enter some text: ")
ltr1 = get_letter_from_user("Enter a letter: ", '')
ltr2 = get_letter_from_user("Enter another letter: ", ltr1)
new_text = text.replace(ltr1,ltr2)
print("The new text is", new_text)
if __name__ == "__main__":
main()
功能建议:
def get_letter_from_user(prompt, not_allowed):
allowed = input(prompt).lower()
while allowed == not_allowed or len(allowed) > 1:
print('not_allowed:',not_allowed)
allowed = str(input('Invalid letter, try again:'))
return allowed
ltr1 = get_letter_from_user("Enter a letter: ", '')
ltr2 = get_letter_from_user("Enter another letter: ", ltr1)
输出示例:
Enter a letter: d
Enter another letter: d
not_allowed: d
Invalid letter, try again:d
not_allowed: d
Invalid letter, try again:a
添加另一个小细节,因为你问如何更好地编码:
我永远不会创建一个带有立即更改为空字符串的参数的函数。喜欢:
def get_letter_from_user(prompt, not_allowed):
not_allowed = ''
而是使用像这样的默认值:
def get_letter_from_user(prompt, not_allowed=''):
...
要替换字符串中的一个字母或字母序列,您可能需要查看
string.replace()
函数:
text = input('Enter some text: ')
find = input('Enter a letter to replace: ')
replace_with = input(f'Enter a letter to replace \'{find}\' with: ')
replaced = text.replace(find, replace_with)
print('The new text is:', replaced)