Выбрано слово палача

#python #graphics

#python #графика

Вопрос:

Я пытаюсь позволить пользователю выбирать нужную длину слова, но мне трудно понять, что не так. Я новичок в Python, я учился 3 месяца и искал информацию о Python. Я не знаю всех встроенных функций Python, или я мог бы знать, но не знал, как их использовать.

Вот мой код:

 from random import *
import os


wordlist_1 = 'cat dog'.split()                #Is all the wordlist be in a function to all three of wordlist?
wordlist_2 = 'donkey monkey dragon'.split()   #Like def wordlist():
wordlist_3 = 'dinosaur alligator buffalo'.split()

keep_playing = True
def print_game_rules(max_incorrect,word_len):
    print"You have only 7 chances to guess the right answer"
    return

def length_1():
    print('You will have length of 3 word')
    return
def length_2():
    print('You will have length of 6 word')
    return
def length_3():
    print('You will have length of 8 word')
    return

def Welcomenote():

    print('Select One Category')
    print(' 1: length of 3 word')
    print(' 2: length of 6 word')
    print(' 3: length of 8 word') 

    choice = {
        "1": length_1,
        "2": length_2,
        "3": length_3 }

    choose = input()
    return

def getrandomword():
    wordindex = random.randint(0,len(wordlist)-1)
    return wordlist[wordindex]

def get_letter():
    print
    letter = raw_input("Guess a letter in the mystery word:") 
    letter = letter.strip()
    letter = letter.lower()
    print
    os.system('cls')
    return letter
def display_figure(hangman):
    graphics = [
    """
          ------- 
         |
         |
         |
         |
         |
         |
     ====================
    """,
    """
          ------- 
         |       |
         |
         |
         |
         |
         |
     ====================
    """,
    """
         ------- 
        |       |
        |       O
        |
        |
        |
        |
    ====================
    """,
    """
         ------- 
        |       |
        |       O
        |       | 
        |
        |
        |
    =====================
    """,
    """
         ------- 
        |       |
        |       O
        |      /| 
        |
        |
        |
    =====================
    """,
    """
         ------- 
        |       |
        |       O
        |      /|               
        |
        |
        |
    =====================
    """,
    """
         ------- 
        |       |
        |       O
        |      /|               
        |      /  
        |
        |
    =====================
    """,
    """
         ------- 
        |       |
        |       O
        |      /|               
        |      /                
        |
        |
    =====================
    """]

    print graphics[hangman]
    return

while keep_playing:
    word=Welcomenote()
    secretword = getrandomword(word)
    guesses='_' * len(secretword)
    max_incorrect=7
    alphabet="abcdefghijklmnopqrstuvxyz"
    letters_tried=""
    number_guesses=0
    letters_correct=0
    incorrect_guesses=0
    print_game_rules(max_incorrect,word_len)


    while (incorrect_guesses != max_incorrect) and (letters_correct != secretword):
        letter=get_letter()
        display_figure(incorrect_guesses)
        if len(letter)==1 and letter.isalpha():
            if letters_tried.find(letter) != -1:
                print "You already picked", letter
            else:
                letters_tried = letters_tried   letter
                first_index=word.find(letter)
                if  first_index == -1:
                    incorrect_guesses= incorrect_guesses  1
                    print "The",letter,"is not the mystery word."
                else:
                    print"The",letter,"is in the mystery word."
                    letters_correct=letters_correct 1
                    for i in range(len(secretword)):
                        if letter == secretword[i]:
                            guesses[i] = letter

        else:
            print "Please guess a single letter in the alphabet."

        print ' '.join(guesses)
        print "Letters tried so far: ", letters_tried
        if incorrect_guesses == max_incorrect:
            print "Sorry, too many incorrect guesses. You are hanged."
            print "The word was",word
            keep_playing = False
        if letters_correct == secretword:
            print "You guessed all the letters in the word!"
            print "The word was",word
            keep_playing = False


    if keep_playing == False:
        user = raw_input("ntShall we play another game? [y|n] ")
        again = "yes".startswith(user.strip().lower())
        if again:
            keep_playing = True
        else:
            break

raw_input ("nnnPress enter to exit")
  

Теперь ошибка гласит:

Обратная трассировка (последний последний вызов):
Файл «P:Lesson 8 Палач 2 — Copy.py «, строка 156, в secretword = getrandomword(слово)

Ошибка типа: getrandomword() не принимает аргументов (задан 1)

Комментарии:

1. Вы неправильно написали alligator и buffalo .

Ответ №1:

Чтобы устранить ошибку о randint несуществовании, вы импортировали имена функций в random модуль.

 from random import *
  

Поэтому просто вызовите функцию напрямую.

 wordindex = randint(0,len(wordlist)-1)
  

Чтобы вы не импортировали больше, чем необходимо, я бы предложил импортировать модуль (чтобы вам не нужно было изменять вызов функции) или отдельное имя напрямую (чтобы вы не загрязняли глобальное пространство имен другими случайными функциями, которые вы не используете).

 import random
# or
from random import randint
  

Однако в вашем коде есть некоторые другие проблемы.

Переменным length_1 , length_2 и length_3 присваиваются строки. Позже вы переопределяете их, чтобы они были функциями. Внутри этих функций вы возвращаете те имена, которые являются функциями (а не эти строки). Позже в Welcomenote() вы возвращаете эти функции (а не эти строки), так что это вдвойне неправильно. Вы должны использовать другие имена.

Кроме того, похоже, что вы хотели, чтобы они были списком ваших слов. Если оставить как есть, вместо этого вы будете получать отдельные буквы. Это должен быть список. Вы должны определить их.

 wordlist_1 = ['cat', 'dog']
# or alternatively
wordlist_1 = 'cat dog'.split() # splits the string up to a list of words separated by whitespace
  

Вероятно, есть и другие, но это большие, которые выделяются и должны быть исправлены.

Комментарии:

1. Да, если бы вы просто сказали import random , вы бы назвали это как random.randint , однако, если вы скажете from random import randint или ( from random import * ), достаточно назвать его по его имени.

2. я пробую то, что вы говорите, и комментарий ahmet alp balkan, но появляется другая ошибка ‘TypeError: объект типа ‘NoneType’ не имеет функции len()’

3. @phhnk: Тогда это была бы другая проблема. В этом случае значение wordlist равно None . Вам нужно будет предварительно проверить, что wordlist имеет значение.

4. удалите двойные кавычки вокруг чисел в вашем словаре, чтобы избежать ошибки None

5. @phhnk проверьте возвращаемое значение из вашей Welcomenote() процедуры. Вероятно, оно возвращается None . Прочитайте о разнице между input() и raw_input() .