如果用户猜出秘密短语,如何结束程序。我的代码在一个永无止境的循环中运行

时间:2018-04-27 16:36:38

标签: python

所以我的代码问题在于我无法弄清楚如何检查正确的猜测是否等于给出的随机密码短语。因此,我想检查用户是否猜到了秘密短语中的所有字母。基本上,我的代码在一个永无止境的循环中运行。我已经尝试使if语句来检查来自用户的猜测是否等于秘密短语但它不起作用。

#Define a filename
filename = "puzzles.txt".lower()

#Imports
import random
import string

#Open the file and read
with open(filename) as f:
    lines = f.readlines()
    randomSecretPhrase = (random.choice(lines)) #Choose random phrase from file

    #***Output secret word to screen test***
    print(randomSecretPhrase)

#Initalize        
correct = []
incorrect = []
count = 0

def game():
    for i in randomSecretPhrase:
        if i in correct:
            print(i,end=' ')
        #elif i != ' ':
        elif i in string.ascii_letters:
            print('_',end=' ')
        else :
            print(' ',end=' ')
    print("\n\n")
    print('Number of times guessed: ', count)
    print('~~~~~~~~~~~~~~~~~~~~~~~~~~~~')

def guessed_letters():
#Will check the user input to verify valid letter is entered
    while True:
        guess = input("Guess a letter: ").lower()
        if guess in correct or guess in incorrect:
            print("You have already guessed that letter. Please guess again.")
            print(count)
        elif guess.isnumeric():
            print("Please enter only letters not numbers! Guess again.")
        elif len(guess) > 1:
            print("Please enter only one letter at a time. Please guess again.")
        elif len(guess) == 0:
            print("Please enter a letter.")
        elif len(correct) == len(randomSecretPhrase):
             print('You win')
        else:
            break

#Keep track of correct and incorrect guesses
    if guess in randomSecretPhrase:
        correct.append(guess)
        print('~~~~~~~~~~~~~~~~~~~~~~~~')
        print("You have guessed correctly!")
        print('\n')

    else:
        print('~~~~~~~~~~~~~~~~~~~~~~~~')
        incorrect.append(guess)
        print("You have guessed incorrectly!")
        print('\n')

#Main program
while True:

    #Call game()
    game()
    #Call guessed_letters()
    guessed_letters()
    #Count how many times guesses
    count += 1
    check()






Output Example:
Number of times guessed:  6
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Guess a letter: w
~~~~~~~~~~~~~~~~~~~~~~~~
You have guessed correctly!


a   c l e a n   s w e e _   


Number of times guessed:  7
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Guess a letter: p
~~~~~~~~~~~~~~~~~~~~~~~~
You have guessed correctly!


a   c l e a n   s w e e p   


Number of times guessed:  8
~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Guess a letter: 

2 个答案:

答案 0 :(得分:0)

你的意思是这样的:

def check():
    for i in randomSecretPhrase:
        if i not in correct:
            return False
    return True

答案 1 :(得分:0)

您的主要计划是:

while count < 3: #or other maximum

    #Call game()
    game()
    #Call guessed_letters()
    guessed_letters()
    #Count how many times guesses
    count += 1
    check()

,希望显然,永远不会结束。

你可以给他们这样的最大尝试次数:

guessed_letters

当然,你必须根据短语的长度改变这一点。

为了确定他们是否猜对了,你需要def guessed_letters(): #Will check the user input to verify valid letter is entered while True: guess = input("Guess a letter: ").lower() if guess in correct or guess in incorrect: print("You have already guessed that letter. Please guess again.") print(count) elif guess.isnumeric(): print("Please enter only letters not numbers! Guess again.") elif len(guess) > 1: print("Please enter only one letter at a time. Please guess again.") elif len(guess) == 0: print("Please enter a letter.") elif len(correct) == len(randomSecretPhrase): print('You win') else: break #Keep track of correct and incorrect guesses if guess in randomSecretPhrase: correct.append(guess) print('~~~~~~~~~~~~~~~~~~~~~~~~') print("You have guessed correctly!") print('\n') return True else: print('~~~~~~~~~~~~~~~~~~~~~~~~') incorrect.append(guess) print("You have guessed incorrectly!") print('\n') return False 告诉你它已经弄清楚了 - 如果猜测是对的。 您可以更改此值以返回值:

while

现在,您可以查看while True: #Call game() game() #Call guessed_letters() if guessed_letters(): #<-- check the return code break #<-- done if correct #Count how many times guesses count += 1 check() 循环:

correct

为了宣布&#34;你已经赢了&#34;,你需要考虑停止的条件。 您将获得一个带有猜测字母的列表randomSecretPhrase。并将其长度与"sweep"的长度进行比较,['s', 'w', 'e', 'p']是一个字符串。 只需在def guessed_letters(): #Will check the user input to verify valid letter is entered while True: guess = input("Guess a letter: ").lower() if guess in correct or guess in incorrect: print("You have already guessed that letter. Please guess again.") print(count) elif guess.isnumeric(): print("Please enter only letters not numbers! Guess again.") elif len(guess) > 1: print("Please enter only one letter at a time. Please guess again.") elif len(guess) == 0: print("Please enter a letter.") else: break #Keep track of correct and incorrect guesses if guess in randomSecretPhrase: correct.append(guess) print('~~~~~~~~~~~~~~~~~~~~~~~~') print("You have guessed correctly!") print('\n') else: print('~~~~~~~~~~~~~~~~~~~~~~~~') incorrect.append(guess) print("You have guessed incorrectly!") print('\n') if len(correct) == len(set(randomSecretPhrase)): print('You win') return True return False 上,当猜测得到纠正时,字母将为randomSecretPhrase

您需要在收集新猜测后移动支票,并检查字母是否正确:

correct

这会计算guess中的唯一字母,并在添加with open(filename) as f: lines = f.readlines() phrase = (random.choice(lines)) #Choose random phrase from file randomSecretPhrase = phrase.strip() #***Output secret word to screen test*** print(randomSecretPhrase) 后与BottomNavigation字母进行比较。

您会发现更容易制作小功能并一次测试这些功能。 例如,当您读取文件行时,包含行结尾,因此需要删除它:

package com.example.edward.crmanager;

import android.os.Bundle; import android.support.annotation.NonNull; 
import android.support.design.widget.BottomNavigationView; 
import android.support.v7.app.AppCompatActivity; 
import android.view.MenuItem; import android.widget.TextView;

public class Navigation_Stats extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_navigation__stats);

        BottomNavigationView bottomNav = findViewById(R.id.bottom_navigation);
    } 
}