#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()
.