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

Python:未更新语句中使用的循环内变量,python,python-3.x,while-loop,Python,Python 3.x,While Loop,我正在尝试编写一段代码,它以字符串作为输入,并将*替换为一系列数字,类似于: 我岁了 0-10 我0岁了 我今年1岁 这是在我学习Python的同时,让我在R上的生活更轻松的一次尝试。 这是我的密码: yourtext = input(" ") number = input(" ") number = int(number) while number > 0: i = str(number) print(i) yourtext = yourtext.replac

我正在尝试编写一段代码,它以字符串作为输入,并将*替换为一系列数字,类似于:

我岁了

0-10

我0岁了

我今年1岁

这是在我学习Python的同时,让我在R上的生活更轻松的一次尝试。 这是我的密码:

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在循环的第一次迭代中固定为其值。这是为什么?我如何改变它?非常感谢您的帮助。

在您将
*
替换为一个数字后,循环的下一次迭代将一事无成。
您的文本中不再有
*

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

我会放弃
while
循环,而选择
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)

你真的很接近!你这里唯一的问题是线路:

yourtext = yourtext.replace("*", i)
正在更新yourtext变量。因此,在循环的第一次迭代之后,您将文本中的“*”更改为数字。因此,您的文本不是字符串“I am*yeard”(在您最初的示例中),而是改为“I am 5 yeard”。然后,当您再次遍历循环时,没有要替换的“*”(因为字符串“I am 5岁”没有*),因此文本保持为“I am 5岁”,而不是更改为“I am 4岁”

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

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

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

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

您可以使用
string.replace()


你能确保每行的缩进位置都正确吗?Python对缩进敏感请修正问题中的缩进
s = 'I am * years old'
number = 10

for i in range(number +1):
    print('{}'.format(s.replace('*', str(i))))
I am 0 years old
I am 1 years old
I am 2 years old
I am 3 years old
I am 4 years old
I am 5 years old
I am 6 years old
I am 7 years old
I am 8 years old
I am 9 years old
I am 10 years old