为了账号安全,请及时绑定邮箱和手机立即绑定

将“in list”放入 if 语句中

将“in list”放入 if 语句中

一只甜甜圈 2024-01-04 10:38:05
我目前正在创建一个刽子手游戏。我的问题出在第二个 for 循环中,即单词列表中的 x 。这个 for 循环应该遍历单词列表(在本例中为 ['H', 'E', 'L', 'L', 'O'])并且:if x in newwordlist or x==guessedletter,然后 x 被打印到新列表上elif x not in newwordlist or x!=guessed letter,然后为该值打印“-”。当我在控制台中输入字母 H 作为猜测的字母时。newwordlist 更新并变为 ['H', '-', '-', '-', '-'] 因为我在代码中指定 if x=guessedletter then print。但是,当我继续进行下一个输入时,例如 O。新词列表现在是 ['-', '-', '-', '-', 'O']。我该如何使它变成 ['H', '-', '-', '-', 'O']。我的 for 循环指定如果 x 在 newwordlist 中则打印它,如果不是,则不打印“-”。为什么它不记得 newwordlist 包含值 H 并且不应该用破折号替换。它应该打印该值。ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',            'V', 'W', 'X', 'Y', 'Z']word = input()  # word player 2 is trying to guesswordlist = list(word)  # word in list formguessedletter = input()  # guessed letterguesses = 6  # max amount of guesseswhile guesses <= 6 and guesses > 0:    newABC = []    newABCstring = ('')    for x in ALPHABET:        if x != guessedletter:            newABC.append(x)            newABCstring = (newABCstring + str(x))    print("Unused letters:" + " " + (newABCstring))    ALPHABET = newABC    newwordlist = []    for x in wordlist:  # ['H', 'E', 'L', 'L', 'O']        if x in newwordlist or x == guessedletter:            newwordlist.append(x)        elif x not in newwordlist or x != guessedletter:             newwordlist.append('-')  # ['-', '-', 'L', 'L', '-']    print(newwordlist)    newwordliststring = ('')    for x in newwordlist:        newwordliststring = (newwordliststring + str(x))        if len(newwordliststring) == len(newwordlist):            print("Guess the word," + " " + (newwordliststring))  # prints the guessedletter+dashes in string form    guessedletter = input()
查看完整描述

3 回答

?
心有法竹

TA贡献1866条经验 获得超5个赞

您应该执行以下操作。

  1. 将 newwordlist 放在 while 循环之外

  2. 只需替换 for 循环内 newwordlist 的索引即可。请参阅下面的代码。

`

ALPHABET = ['A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M', 'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U',

            'V', 'W', 'X', 'Y', 'Z']


word = input()  # word player 2 is trying to guess

wordlist = list(word)  # word in list form

guessedletter = input()  # guessed letter

guesses = 6  # max amount of guesses


#define the newwordlist outside while loop

newwordlist = ['-' for letter in word]

while guesses <= 6 and guesses > 0:

    newABC = []

    newABCstring = ('')

    for x in ALPHABET:

        if x != guessedletter:

            newABC.append(x)

            newABCstring = (newABCstring + str(x))

    print("Unused letters:" + " " + (newABCstring))

    ALPHABET = newABC


#     newwordlist = []


    for index, x in enumerate(wordlist):  # ['H', 'E', 'L', 'L', 'O']

        if x in newwordlist or x == guessedletter:

            #just replace the value in the newwordlist

            newwordlist[index] = x  

            #blow elif is not required

#         elif x not in newwordlist or x != guessedletter:

#              newwordlist.append('-')  # ['-', '-', 'L', 'L', '-']

    print(newwordlist)


    newwordliststring = ('')

    for x in newwordlist:

        newwordliststring = (newwordliststring + str(x))

        if len(newwordliststring) == len(newwordlist):

            print("Guess the word," + " " + (newwordliststring))  # prints the guessedletter+dashes in string form



    guessedletter = input()

`


查看完整回答
反对 回复 2024-01-04
?
婷婷同学_

TA贡献1844条经验 获得超8个赞

您可能想尝试一下并将其与您的进行比较:


class E(Exception): pass


A = []


for i in range(65, 91):

    A.append(chr(i))


w = []


for i in 'HELLO':

    w.append(i)


g = ['-'] * len(w)

d = {}


for i in w:

    d[i] = 0


print('Please guess the word :\n%s\n' % g)

while True:

    try:

        i = input('Guess letter/word: ').upper()

        if __debug__:

            if len(i) != 1 and i not in A:

                raise AssertionError('Only a single letter and ASCII permitted')

            else: raise E

    except AssertionError as e:

        print('\n%s' % e.args[0])

        continue


    except E:

        if i in w:

            if i not in g:

                g[w.index(i, d[i])] = i

                d[i] = w.index(i)

                print(g)

            else:

                try:

                    g[w.index(i, d[i]+1)] = i

                    d[i] = w.index(i, d[i]+1)

                    print(g)

                except ValueError:

                    continue


        if w == g:

            print('You are great')

            break

输出:


PS D:\Python> python p.py

Please guess the word :

['-', '-', '-', '-', '-']


Guess letter/word: h

['H', '-', '-', '-', '-']

Guess letter/word: e

['H', 'E', '-', '-', '-']

Guess letter/word: l

['H', 'E', 'L', '-', '-']

Guess letter/word: l

['H', 'E', 'L', 'L', '-']

Guess letter/word: l

Guess letter/word: l

Guess letter/word: o

['H', 'E', 'L', 'L', 'O']

You are great


查看完整回答
反对 回复 2024-01-04
?
噜噜哒

TA贡献1784条经验 获得超7个赞

while 循环中的每次迭代都会执行“newwordlist = []”。因此,即使在上一次迭代中设置了“H”,它也会重置为[]。


您可以有一个 newwordlist,其元素在 while 循环之外全部初始化为“-”。每次玩家正确猜出字母时,只需更新该列表即可,而不是将元素附加到列表中。


newwordlist = ['-' for x in wordlist]

while guesses > 0:

    # some code

    for idx, letter in enumerate(wordlist):

        if letter == wordlist[idx]:

            newwordlist[idx] = letter

    print(newwordlist)

    # remaining code  


查看完整回答
反对 回复 2024-01-04
  • 3 回答
  • 0 关注
  • 75 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信