Python:未更新的语句中使用的循环变量

时间:2018-10-09 21:28:32

标签: python python-3.x while-loop

我正在尝试编写一段代码,该代码将字符串作为输入并将*替换为一系列数字,例如:

我今年*岁

0-10

我今年0岁

我1岁

...

这是一种尝试,使我在R上的生活更加轻松,同时我还学习了一些Python。 这是我的代码:

yourtext = input(" ")
number = input(" ")
number = int(number)

while number > 0:
    i = str(number)
    print(i)
    yourtext = yourtext.replace("*", i)
    print(yourtext)
    print(number)
    number = number - 1

现在,这将返回:

*
5 (my inputs)

5
5
5
4
5
4
3
5
3
2
5
2
1
5
1

因此,似乎replace函数中的i在循环的第一次迭代中固定为其值。为什么会这样,我该如何更改?非常感谢您的帮助。

5 个答案:

答案 0 :(得分:1)

*替换为数字后,循环的下一次迭代将无效。 *中没有yourtext

yourtext = yourtext.replace("*", i)

答案 1 :(得分:0)

我不建议使用while来使for循环,因为那样会陷入无限循环。另外,for将采用一系列值,因此您不必手动增加值:

yourtext = input("What would you like? ")
number = int(input("What is the number? ")

if '*' not in yourtext:
    raise ValueError("could not find wildcard")

for i in range(number):
    print(yourtext.replace("*", i)

答案 2 :(得分:0)

您真的很亲密!您唯一的问题是该行:

@Query

正在更新yourtext变量。因此,在循环中进行第一次迭代后,已将文本中的“ *”更改为数字。因此,您的文本不是字符串“ I am * years old”(在您的原始示例中),而是改为“ I am 5 years old”。然后,当您再次遍历循环时,没有“ *”可替换(因为字符串“我今年5岁”没有*),因此文本保持为“我今年5岁”,而不是更改为“我今年4岁”。

您可以改用新的临时变量来解决此问题,例如,将问题行替换为:

yourtext = yourtext.replace("*", i)

答案 3 :(得分:0)

不确定yourtext的用途是什么,但是第一次替换“ *”后,yourtext将不会更新,因为它不再包含*。例如,如果您输入“ test”而不是*,则您的文本将永远不会更新,因为第一位没有*

4
test
4
3
test
3
2
test
2
1
test
1

答案 4 :(得分:0)

您可以在loop的{​​{1}}中完成

string.replace()
s = 'I am * years old'
number = 10

for i in range(number +1):
    print('{}'.format(s.replace('*', str(i))))