继续调用函数,直到满足条件 Python

Posted

技术标签:

【中文标题】继续调用函数,直到满足条件 Python【英文标题】:Keep calling a function until a condition is met Python 【发布时间】:2019-12-23 18:54:21 【问题描述】:

我想创建一个刽子手游戏。我希望它继续调用 x 并打印 new_word 直到没有“_”。我已经尝试过了,但插槽不断刷新。它一直在重印。它不会更新值本身。

word = 'EVAPORATE'
wordlist = list(word)
dict = dict(enumerate(wordlist))

slots = list('_' * len(word))

x = input("Guess the letter: ")

def game():    
    for a,b in dict.items():
        if b == x:
            slots[a] = x
            new_word = ' '.join(slots)
    print(new_word)

game()

【问题讨论】:

请点击此链接,希望对您有所帮助codereview.stackexchange.com/questions/178312/… 【参考方案1】:

这似乎对我有用:

word = 'EVAPORATE'
wordlist = list(word)
dict = dict(enumerate(wordlist))
slots = list('_' * len(word))
def game():    
    while '_' in slots:
        x = input("Guess the letter: ")
        for a,b in dict.items():
            if b == x.upper():
                slots[a] = x
                new_word = ' '.join(slots)
        print(new_word)
game()

我在def game(): 内添加了一个while 循环,这样代码将继续运行,直到插槽中没有下划线。然后我将x = input("Guess the letter: " 移动到while 循环内,这样用户就可以随时进行另一个猜测,直到单词完成。

【讨论】:

【参考方案2】:

补充几点:

    您永远不要对变量使用诸如 listdict 之类的关键字 你必须计算每个字母的匹配,例如E出现两次,所以,你必须计算两次 你必须知道游戏何时结束,因为你想循环“猜信”这个问题直到游戏结束 添加 While 循环 享受你的游戏

word = 'EVAPORATE'
wordlist = list(word)
word_length = len(word)
word_dict = dict(enumerate(wordlist))

slots = list('_' * len(word))

def game():
  total_letters = word_length
  while not game_ended(total_letters):
    x = input("Guess the letter: ")
    matchs = 0
    for pos,letter in word_dict.items():
      if letter == x:
        matchs += 1
        slots[pos] = x
        new_word = ' '.join(slots)
    total_letters -= matchs
    print(new_word)

def game_ended(word_len):
  return word_len == 0
game()

【讨论】:

我无法将 MD 格式设为代码,有人可以帮我编辑我的帖子吗? 不知道为什么会这样,在使用编号列表之前一定发生在我身上。【参考方案3】:

只需将 input 中的所有内容放入 while 循环中

word = 'EVAPORATE'
wordlist = list(word)

# it is not a good idea name a variable the same as a builtin, so change from 'dict' to 'worddict'
worddict = dict(enumerate(wordlist))

slots = list('_' * len(word))

def game(x):    
    # we also need to change it here
    for a,b in worddict.items():
        if b == x:
            slots[a] = x
            new_word = ' '.join(slots)
    print(new_word)

while any([i == '_' for i in slots]):
    x = input("Guess the letter: ")
    game(x)

while检查slots中是否有字母是_,如果有,继续玩。

请注意,我还将input 作为变量传递给游戏(这不是必需的,但更好)

【讨论】:

以上是关于继续调用函数,直到满足条件 Python的主要内容,如果未能解决你的问题,请参考以下文章

尝试循环 API 调用直到满足条件

使用 RXJS 继续以角度触发 http 调用,直到满足条件

函数的递归

2017-3-5 C#基础 函数--递归

尽管满足条件(即,字符串值符合预期),但未调用函数

C#语言基础——递归