Форум программистов, компьютерный форум, киберфорум
Python для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.62/13: Рейтинг темы: голосов - 13, средняя оценка - 4.62
5 / 3 / 3
Регистрация: 20.09.2018
Сообщений: 21

Неправильно работают циклы

08.10.2019, 19:50. Показов 2562. Ответов 4

Студворк — интернет-сервис помощи студентам
Данный ниже код - мега-игра "виселица". Код хоть и слишком громоздкий как для Python, но, вроде бы, понятный и в лишних комментариях не нуждается. Проблема в том, что после повторения игры слово не генерируется новое, а остаётся прежним, в принципе весь блок, привязанный к active1, не выполняется заново. Все мои многочисленные попытки починки цикла приводили либо к полной неработоспособности программы, либо слово менялось после каждого нового ввода буквы, отчего выиграть в игре было в принципе невозможно. Некоторые строки могут не нести под собой никакого функционала, в таком случае, скорее всего, ввёл я их, когда пытался починить рандом, сперва я думал, что слово-таки генерируется, но почему-то никуда не передаётся, поэтому было решено ещё до присвоения переменной внятной величины эту переменную на всякий случай обнулять. Нужно это, не нужно - пусть пока будет, вроде не мешает
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
#!/usr/bin/env python
# -*- coding: utf8 -*-
import random
def sozd_mas(current_word):
    current_letters1={}
    current_letters1.clear()
    current_letters1={a:"" for a in range(len(current_word))}
    return current_letters1
def rand_choice():
    words=["терьер","алабай","лабрадор","бульдог","чихуахуа","пудель","мастиф","сенбернар","грейхаунд","пекинес","бультерьер","спаниель"]
    current_word1=""
    current_word1=(random.choice(words))
    return current_word1
#ПРОГРАММА НАЧИНАЕТСЯ ЗДЕСЬ
active=True
active1=True
step_count=0
cont=1
while active1:
    print("=================================================")
    letter_index=[]
    letter_index.clear()
    current_word=""
    current_word=rand_choice()
    current_word_str=str(current_word)
    current_word = list(current_word)
    current_letters={}
    current_letters.clear()
    current_letters=sozd_mas(current_word)
    active1=False
    break
while active:
    input_letter=input("Буква: ")
    if input_letter in current_word:
        for index, letter in enumerate(current_word):
            if letter == input_letter:
                current_letters[index]=input_letter
                print(current_letters.values())
    else:
        print("Нет такой буквы")
        step_count+=1
        print(step_count)
        print(current_letters.values())
    if step_count==6:
        print("Вы проиграли. Слово было следующее: "+current_word_str)
        cont=int(input("1 - повторить, 2 - выйти. Ввод: "))
        step_count=0
    if all(current_letters[values]!="" for values in range(len(current_letters))):
        print("Вы угадали слово")
        cont=int(input("1 - повторить, 2 - выйти. Ввод: "))
        step_count=0
    if cont==1:
        active1=True
    else:
        active=False
        print("Программа завершает работу")
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
08.10.2019, 19:50
Ответы с готовыми решениями:

Не работают вложенные циклы
Всем доброго времени суток, Сильно не ругайте, только второй день изучаю Python. Вот кусок кода: def checkExistRecord(): f =...

Как работают циклы?
Что то не понимаю, как это работает. sum = 0 for i in range(1, 6): sum += i print(sum,'+1=',i) #сам придумал так написать,...

Неправильно работают файлы .pyw
Не въезжаю от чего, у меня вдруг все файлы .pyw перестали запускаться в качестве Python-скрипта без консоли. Вместо этого они открываются в...

4
 Аватар для Semen-Semenich
5237 / 3481 / 1176
Регистрация: 21.03.2016
Сообщений: 8,310
08.10.2019, 19:58
то есть я так понимаю слово генерируется в этом блоке в 24 строке? (вашего кода)
Python
1
2
3
4
5
6
7
8
9
10
11
12
13
while active1:
    print("=================================================")
    letter_index=[]
    letter_index.clear()
    current_word=""
    current_word=rand_choice()
    current_word_str=str(current_word)
    current_word = list(current_word)
    current_letters={}
    current_letters.clear()
    current_letters=sozd_mas(current_word)
    active1=False
    break
а основной цикл игры происходит в следующем блоке? и как вы хотите изменить слово если первый блок уже отработал и больше не используется в коде
0
5 / 3 / 3
Регистрация: 20.09.2018
Сообщений: 21
08.10.2019, 20:04  [ТС]
Слово генерируется в функции rand_choice и передаётся параметру current_word. То, что генерируется в 29 линии как current_letters - это словарь размером с длину current_word, который поэтапно заполняется, когда игрок отгадывает буквы. Если все элементы в current_letters не равны пустому символу -- игрок угадал слово и выиграл. Далее он может выбрать повтор, но, к сожалению, пока что он получит то же самое слово, причём, поскольку словарь не обнуляется (а должен), то даже если игрок введёт неверную букву, он всё равно победит. Словарь-то уже заполнен, все элементы не равны пустоте
0
60 / 44 / 18
Регистрация: 05.03.2019
Сообщений: 313
08.10.2019, 22:56
Лучший ответ Сообщение было отмечено Spurdola как решение

Решение

Python
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
import random
 
 
def sozd_mas(current_word):
    current_letters1={}
    current_letters1.clear()
    current_letters1={a:"" for a in range(len(current_word))}
    return current_letters1
def rand_choice():
    words=["терьер","алабай","лабрадор","бульдог","чихуахуа","пудель","мастиф","сенбернар","грейхаунд","пекинес","бультерьер","спаниель"]
    current_word1=""
    current_word1=(random.choice(words))
    return current_word1
#ПРОГРАММА НАЧИНАЕТСЯ ЗДЕСЬ
 
 
active=True
active1=True
step_count=0
cont=1
 
while True:
    while active1 == True:
        print("=================================================")
        letter_index=[]
        letter_index.clear()
        current_word=""
        current_word=rand_choice()
        current_word = list(current_word)
        current_letters={}
        current_letters.clear()
        current_letters=sozd_mas(current_word)
        active1=False
        active = True
        while active:
            input_letter=input("Буква: ")
            if input_letter in current_word:
                for index, letter in enumerate(current_word):
                    if letter == input_letter:
                        current_letters[index]=input_letter
                        print(current_letters.values())
            else:
                print("Нет такой буквы")
                step_count+=1
                print(step_count)
                print(current_letters.values())
            if step_count==6:
                print("Вы проиграли. Слово было следующее: "+current_word_str)
                cont=int(input("1 - повторить, 2 - выйти. Ввод: "))
                step_count=0
            if all(current_letters[values]!="" for values in range(len(current_letters))):
                print("Вы угадали слово")
                cont=int(input("1 - повторить, 2 - выйти. Ввод: "))
                step_count=0
                if cont == 1:
                    active1=True
                    active=False
                    
    
                else:
                    active=False
                    print("Программа завершает работу")
полностью в коде не разбирался, просто сделал то что ты просил.
1
5 / 3 / 3
Регистрация: 20.09.2018
Сообщений: 21
08.10.2019, 23:17  [ТС]
Огромнейшее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
08.10.2019, 23:17
Помогаю со студенческими работами здесь

Неправильно работают циклы
Есть код: using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; ...

Неправильно работает цикл for, и функции работают неправильно
1) Неправильно работает цикл for(k=0...). Входит только 1 раз, дальше вылетает. Делал пошаговую отладку на проверку значения k. Выдаёт...

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

Cookie неправильно работают..
takaia vot beda: skajem esti kuka "my_kuka". Esli zadaiu znachenie s servera HttpContext.Current.Response.Cookies = "server"; A...

Неправильно работают методы
Привет пираты! В чем причина? Описание ошибок в коде Геттеры Автора и Сообщений прошли тест и написаны исправно.. Помогите...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Очистка реквизитов документа при копировании
Maks 09.04.2026
Алгоритм из решения ниже применим как для типовых, так и для нетиповых документов на самых различных конфигурациях. Задача: при копировании документа очищать определенные реквизиты и табличную. . .
модель ЗдравоСохранения 8. Подготовка к разному выполнению заданий
anaschu 08.04.2026
https:/ / github. com/ shumilovas/ med2. git main ветка * содержимое блока дэлэй из старой модели теперь внутри зайца новой модели 8ATzM_2aurI
Блокировка документа от изменений, если он открыт у другого пользователя
Maks 08.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа, разработанного в конфигурации КА2. Задача: запретить редактирование документа, если он открыт у другого пользователя. / / . . .
Система безопасности+живучести для сервера-слоя интернета (сети). Двойная привязка.
Hrethgir 08.04.2026
Далее были размышления о системе безопасности. Сообщения с наклонным текстом - мои. А как нам будет можно проверить, что ссылка наша, а не подделана хулиганами, которая выбросит на другую ветку и. . .
Модель ЗдрввоСохранения 7: больше работников, больше ресурсов.
anaschu 08.04.2026
работников и заданий может быть сколько угодно, но настроено всё так, что используется пока что только 20% kYBz3eJf3jQ
Дальние перспективы сервера - слоя сети с космологическим дизайном интефейса карты и логики.
Hrethgir 07.04.2026
Дальнейшее ближайшее планирование вывело к размышлениям над дальними перспективами. И вот тут может быть даже будут нужны оценки специалистов, так как в дальних перспективах всё может очень сильно. . .
Горе от ума
kumehtar 07.04.2026
Эта мне ментальная установка, что вот прямо сейчас, мол, мне для полного счастья не хватает (нужное вписать), и когда я этого достигну - тогда и полный кайф. Одна из самых сильных ловушек на пути. . . .
Использование значений реквизитов справочника в документе, с определенными условиями и правами
Maks 07.04.2026
1. Контроль срока действия договора Алгоритм из решения ниже реализован на примере нетипового документа "ЗаявкаНаРаботу", разработанного в конфигурации КА2. Задача: уведомлять пользователя, если. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru