Python - проблема возврата с помощью random.randint () - PullRequest
0 голосов
/ 05 августа 2020
import random
    
print("""
___  ___          _           ___  ____           _ 
|  \/  |         | |          |  \/  (_)         | |
| .  . | __ _ ___| |_ ___ _ __| .  . |_ _ __   __| |
| |\/| |/ _` / __| __/ _ \ '__| |\/| | | '_ \ / _` |
| |  | | (_| \__ \ ||  __/ |  | |  | | | | | | (_| |
\_|  |_/\__,_|___/\__\___|_|  \_|  |_/_|_| |_|\__,_|

                                                    """)

meno = input("""
    Ahoj nový hráč. 
    Pre pokračovanie zadaj svoje meno: """)

print("""
    Ahoj {}
    Pravidlá sú následovné. ja si myslím číslo a ty budeš hádať.
    Ak chceš ukončiť hru, napíš 'KONIEC'.
    Na konci hry uvidíš svoje skóre.""".format(meno))

print("\nMyslím si číslo")

random = random.randint(1,11)
guess = -1
good = 0
bad = 0
alltry = 0
while True:
    guess = input("Tvoj typ: ").strip().lower()
    alltry += 1
    if guess == "koniec":
        alltry -= 1
        print("\n+{:=^30}+".format("KONIEC"))
        print("|{:^15}|{:^14}|".format("Správne", good))
        print("|{:^15}|{:^14}|".format("Nesprávne", bad))
        print("|{:^15}|{:^14}|".format("Spolu", alltry))
        print("+{:=^30}+".format(""))
        print("\nĎakujem za hru {}\n".format(meno))
        break
    if guess == "":
        print("NEZADAL SI CISLO!")
    elif int(guess) == random:
        good += 1
        print("Máš to!!!")
        random = random.randint(1,11)
        guess = -1
    elif int(guess) < 1 or int(guess) > 10:
        print("ZADÁVAJ ČÍSLA IBA Z INTERVALU OD 1 PO 10!")
    elif guess != random:
        print("NESPRÁVNE!\nHádaj znovu.")
        guess = -1
        bad += 1

Привет, у меня проблема с этим кодом. Это игра MasterMind. Если угадать номер, программа вернет ошибку.

Traceback (most recent call last): File "mastermind.py", line 47, in <module> random = random.randint(1,11). AttributeError: 'int' object has no attribute 'randint'

Спасибо за помощь.

Ответы [ 2 ]

3 голосов
/ 05 августа 2020
random = random.randint(1,11)

Этот оператор повторно связывает имя random, которое в настоящее время относится к импортированному модулю (оно было установлено, когда вы сделали import random), на целое число , возвращенное из randint(). В следующий раз, когда вы выполните этот оператор, random больше не будет модулем, это будет целое число.

Это , почему он жалуется на попытку доступа к несуществующему атрибуту объект int.

Следующая стенограмма показывает, что происходит:

>>> import random
>>> type(random)
<class 'module'>

>>> random = random.randint(1,7)
>>> type(random)
<class 'int'>

>>> random = random.randint(1,7)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: 'int' object has no attribute 'randint'

Чтобы исправить, просто используйте другое имя для случайного значения, например randNum, так что random продолжает быть привязанным к модулю.

0 голосов
/ 05 августа 2020

Вы не можете использовать random в качестве имени переменной, так как это модуль, который вы используете, просто измените имя переменной, и это должно решить проблему.

Здесь я изменил его на random_int. и он отлично работает.

import random

print("""
___  ___          _           ___  ____           _
|  \/  |         | |          |  \/  (_)         | |
| .  . | __ _ ___| |_ ___ _ __| .  . |_ _ __   __| |
| |\/| |/ _` / __| __/ _ \ '__| |\/| | | '_ \ / _` |
| |  | | (_| \__ \ ||  __/ |  | |  | | | | | | (_| |
\_|  |_/\__,_|___/\__\___|_|  \_|  |_/_|_| |_|\__,_|

                                                    """)

meno = input("""
    Ahoj nový hráč.
    Pre pokračovanie zadaj svoje meno: """)

print("""
    Ahoj {}
    Pravidlá sú následovné. ja si myslím číslo a ty budeš hádať.
    Ak chceš ukončiť hru, napíš 'KONIEC'.
    Na konci hry uvidíš svoje skóre.""".format(meno))

print("\nMyslím si číslo")

random_int = random.randint(1,11)
guess = -1
good = 0
bad = 0
alltry = 0
while True:
    guess = input("Tvoj typ: ").strip().lower()
    alltry += 1
    if guess == "koniec":
        alltry -= 1
        print("\n+{:=^30}+".format("KONIEC"))
        print("|{:^15}|{:^14}|".format("Správne", good))
        print("|{:^15}|{:^14}|".format("Nesprávne", bad))
        print("|{:^15}|{:^14}|".format("Spolu", alltry))
        print("+{:=^30}+".format(""))
        print("\nĎakujem za hru {}\n".format(meno))
        break
    if guess == "":
        print("NEZADAL SI CISLO!")
    elif int(guess) == random_int:
        good += 1
        print("Máš to!!!")
        random_int = random.randint(1,11)
        guess = -1
    elif int(guess) < 1 or int(guess) > 10:
        print("ZADÁVAJ ČÍSLA IBA Z INTERVALU OD 1 PO 10!")
    elif guess != random_int:
        print("NESPRÁVNE!\nHádaj znovu.")
        guess = -1
        bad += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...