#python #arrays #list #valueerror
#питон #массивы #Список #ошибка значения
Вопрос:
Я пытаюсь создать игру, похожую на палача, но когда я запускаю этот код, который у меня сейчас есть, я продолжаю получать ошибки, я пытался создавать новые переменные, такие как int1 и int2, но безрезультатно. Вот код:
from nltk.corpus import words import random word_list = words.words() password = random.choice(word_list) finish = len(password) print("The password has", len(password),"letters") print(password) while finish gt; 0: guess = input("Please enter a letter to see where it is in the word: ") occur = password.count(guess) mylist = {', '.join([str(i) for i, c in enumerate(password) if c == guess])} print(mylist) int1 = [int(y) for y in mylist] int2 = [x 1 for x in mylist] print(ints) if len(guess) gt; 1 or len(guess) lt; 1: print("Enter 1 standard keyboard letter to see if it is in the word") elif guess in password: print(f"This letter is at position {', '.join([str(i) for i, c in enumerate(password) if c == guess])} in the word") finish = finish - occur password = password.replace(guess,'.') print("Only", finish, "letters left to guess") else: print("Try again")
Я хочу, чтобы строка 16-22 сначала преобразовала элементы списка из строки в целое число, затем распечатала список, а затем снова распечатала тот же список, но с добавлением 1 к каждому элементу списка. Вот ошибка, которую я продолжаю получать:
Traceback (most recent call last): File "/Users/ARR2K18/Desktop/Hangman.py", line 29, in lt;modulegt; int1 = [int(y) for y in mylist] File "/Users/ARR2K18/Desktop/Hangman.py", line 29, in lt;listcompgt; int1 = [int(y) for y in mylist] ValueError: invalid literal for int() with base 10: '1, 7'
Хотел бы получить некоторую помощь
Ответ №1:
Ваша проблема здесь:
mylist = {', '.join([...])} print(mylist) int1 = [int(y) for y in mylist]
Это ', '.join(...)
даст вам результат, подобный «1, 7», и набор будет выглядеть примерно так {"1, 7", "3, 4", ... }
. Затем, когда вы вызываете int()
один из этих элементов набора, вы получаете сообщение об ошибке.
Решение этой проблемы, вероятно, состоит в том, чтобы просто отказаться от join
вызова и использовать только понимание списка.
Комментарии:
1. Вероятно, это правда, но в коде операции есть несколько проблем.
int1
иint2
вычисляются и никогда не используются (и вычислениеint2
также нарушится, если элементы списка являются строками). Затем есть попытка печатиints
, но она так и не была определена. И номер строки в сообщении об ошибке не совпадает с кодом в вопросе.2. Да, я вроде как проигнорировал номера линий, так как предполагал, что они отключены. И, безусловно, есть другие проблемы, но это должно устранить ошибку, которую он привел.