Эта часть:
for i in range(0,10,1):
word.config(text = "Jumbled Word => " + str(jumb_list[i]))
if guess.get().lower() == user_list[i].lower():
score += 1
score_display.config(text = str(score))
guess.delete(0,END)
Ваш цикл for не будет ждать, пока вы не закончите предположение. Он всегда завершает цикл и конфигурирует ваш word
виджет 10 раз, пока он не достигнет последнего. Вы можете избавиться от цикла for
и продвинуть индексную базу списка на текущий счет:
def start_game(event):
timetaken()
jumb_list = []
global score
for i in user_list:
r1 = sen_jumble(i.split())
jumb_list.append(r1)
guess.focus_set()
word.config(text = "Jumbled Word => " + str(jumb_list[score]))
if guess.get().lower() == user_list[score].lower():
score += 1
score_display.config(text = str(score))
try:
word.config(text="Jumbled Word => " + str(jumb_list[score]))
except IndexError:
word.config(text="You Win!")
score = 0
guess.delete(0,END)
Проверьте определение ExecuteScalar. Это возвращает Объект, который будет иметь нулевую ссылку, если набор результатов будет пуст.
Причина Вы видите нуль, является этим Convert.ToInt32
возвращает нуль при предоставлении null
. Необходимо проверить возвращаемое значение от ExecuteScalar
перед преобразованием его в int
.
DbCommand. ExecuteScalar () возвращает первый столбец первой строки или пустой указатель, если результат пуст. Ваша проблема вызывается Преобразованием. ToInt32 (), потому что это возвращается 0 для пустого указателя.
Необходимо проверить значение, возвращенное ExecuteScalar () для пустого, и только звонить, Преобразовывают. ToInt32 (), если это не является пустым.
Object result = command.ExecuteScalar();
if (result != null)
{
Int32 value = Convert.ToInt32(result);
}
else
{
// Handle the empty result set case
}
Как Вы видите в здесь, можно проверить, является ли результат пустым:
Тип Возвращаемого значения: Система. Возразите первому столбцу первой строки в наборе результатов или нулевой ссылке (Ничто в Visual Basic), если набор результатов пуст.
Выполнитесь скаляр возвратит первый столбец первой строки в наборе результатов. Если нет никаких результатов, это должно возвратить пустой указатель.
Мое предположение - то, что Ваша хранимая процедура возвращает количество а не набор данных, который является, почему Вы видите 0.
ExecuteScalar
возвраты null
если набор результатов пуст (как @fallen888, и др. сказали). Причина Вы видите нуль, является этим Convert.ToInt32
возвращает нуль при предоставлении null
. Необходимо проверить возвращаемое значение от ExecuteScalar
перед преобразованием его в int
.