【问题标题】:How do I retain a new strings value during a loop, continuously changing the string until the loop ends?如何在循环期间保留新的字符串值,不断更改字符串直到循环结束?
【发布时间】:2019-04-05 12:27:38
【问题描述】:

我想取一个字符串和循环的值,要求用户在每次循环迭代期间选择单个字符替换。我想保留用户对字符串所做的更改,然后进行额外的替换,该替换也会保留,直到用户选择结束循环。

newtext = ''
ciphertext = 'qsv el arm aepm sh tzz ussx pmb as dspm as arm tex sh armel dsvbaci.'
answer = 'y'

for letter in ciphertext:
    while answer is 'y':
        print(ciphertext)
        cl = input('Which letter would you like to replace? ')
        rl = input('What is the new letter? ')
        newtext += ciphertext.replace(cl,rl)
        print(newtext)
        answer = input('Would you like to continue? (y/n) ')

【问题讨论】:

  • 您想保留对字符串的更改历史记录?到目前为止,你做了什么尝试?
  • 不完全是......说密文是ixv。我将 i 更改为“t”。现在密文变成了txv。下一个循环我选择将 x 更改为“h”,现在密文是 thv。最后,我将字母 v 更改为“e”,密文现在是“the”。用户通过手动替换工作,直到文本被破译,然后他们选择退出循环。

标签: python-3.x string immutability str-replace


【解决方案1】:

我认为你应该这样做:

original = 'qsv el arm aepm sh tzz ussx pmb as dspm as arm tex sh armel dsvbaci.'
ciphertext = 'qsv el arm aepm sh tzz ussx pmb as dspm as arm tex sh armel dsvbaci.'
newtext = ''
answer = 'y'


while answer is 'y':
    print(ciphertext)
    cl = raw_input('Which letter would you like to replace? ')
    rl = raw_input('What is the new letter? ')
    newtext = ciphertext.replace(cl,rl)
    print(newtext)
    answer = raw_input('Would you like to continue? (y/n) ')
    if(answer == "y"):
        ciphertext = newtext
    else:
        ciphertext = original

我稍微更改了您的代码。如果您需要任何澄清,请告诉我

更新

original = 'qsv el arm aepm sh tzz ussx pmb as dspm as arm tex sh armel dsvbaci.'
plaintext = 'qsv el arm aepm sh tzz ussx pmb as dspm as arm tex sh armel dsvbaci.'
answer = 'y'
replacements = {}


while answer is not 'q':
    print(plaintext)
    cl = input('Which letter would you like to replace? ')
    rl = input('What is the new letter? ')
    x = [i for i, ltr in enumerate(original) if ltr == cl]
    replacements[cl] = x
    plaintext = list(plaintext)
    for i in replacements[cl]:
        plaintext[i] = rl
    plaintext = "".join(plaintext)
    print plaintext
    answer = input('Would you like to continue? (y/n) ')
    if(answer == "n"):
        plaintext = original

这应该不错!让我知道。 我知道raw_input 问题,我更改为输入以获得更快的“调试”。 抱歉,在问题出现之前我没有正确理解:P

【讨论】:

  • 谢谢本尼,这很有帮助。你现在总是想在 python 3.x 中使用 input() 而不是 raw_input(),这是安全风险,因为 raw_input() 会接受它不应该接受的东西。您帮助我解决了下一个问题,循环中的每个答案都会不断更改所有文本,而不是保留替换,而是“替换替换”LOL。更近了...感谢您的帮助。
  • 您的编辑非常完美....我修复了我的密文,复制了...,并调整了循环退出。现在我可以完善其余的了。谢谢你,在你的帮助下我学到了很多!
  • 没问题,如果我解决了你的问题,请采纳。
猜你喜欢
  • 1970-01-01
  • 2020-05-18
  • 1970-01-01
  • 2020-01-22
  • 2018-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-04-21
相关资源
最近更新 更多