Продолжайте получать ошибку ValueError: недопустимый литерал для int() с основанием 10: ‘1, 7’

#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. Да, я вроде как проигнорировал номера линий, так как предполагал, что они отключены. И, безусловно, есть другие проблемы, но это должно устранить ошибку, которую он привел.