Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 24, 2016 05:14:11

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить.

Привет всем! Начал изучать Python 3 совсем недавно. Решил написать простенький скрипт для VK.
Вот сам код:

import os, vk_api, json, requests, time#импорт либки для роботы с дсон и импорт нттп либки
from datetime import datetime  #Импортируем библиотеку времени
now = datetime.now() #Присваиваем "now" значение datetime.now(), чтобы сокращать
# login = input("\033[1m\033[32mВведите логин:\033[0m ")#получение логина из командной строки 
# password = input("\033[1m\033[32mВведите пароль:\033[0m ")#получение пароля из командной строки
login = 'Your Login (vk.com)'
password = 'Your Password (vk.com)'
http_obj = requests.get('https://oauth.vk.com/token?grant_type=password&client_id=2274003&client_secret=hHbZxrka2uZ6jB1inYsH&username='+login+'&password='+password) #собстна отправка запроса
rez_json = json.loads(http_obj.text) #дабы с проще было в дальнейшем работать
os.system("clear")
vk_session = vk_api.VkApi(login, password)
vk = vk_session.get_api()
print("➣ \033[32m\033[4mВход выполнен успешно!\033[0m")#это выполняеться если иключение не обработано 
print('\033[37mAsses Token:',rez_json['access_token'])#если значения нет обработка исключения
print("\033[1m\033[32mЛогин: \033[0m"+login+"\033[1m\033[32m\nПароль: \033[0m"+password[0:-4]+'****')
def first():
    try:
        what = int(input('\033[32m\033[1mХозяин, чего изволите? \n1)\033[0mСборать информацию о себе \n\033[32m\033[1m2)\033[0mПосмотреть инфу друга: '))
    except ValueError:
        print('➣ \033[1m\033[31m[ERROR] Вводить только цифры\033[0m')
        time.sleep(0.7)
        first()
    while True:
        if what == 1:
            your()
        if what == 2:
            friend()
        else:
            print('➣ \033[1m\033[31m[ERROR]\033[0m')
            time.sleep(0.7)
            first()
def friend():
    print('\033[1m\033[31m-'*20+'\033[0m')
    try:
        user_get = vk.users.get(user_ids=(input('\033[1m\033[32mВведите id друга в VK: \033[0m')), fields='sex,bdate,country,city,status,online,last_seen')
    except vk_api.vk_api.ApiError:
        print('➣ \033[1m\033[31m[ERROR] id не найден. Попробуйте снова\033[0m')
        time.sleep(0.7)
        friend()
    name_gen = user_get[0]['first_name']
    surname_gen = user_get[0]['last_name']
    global online
    if user_get[0]['online'] == 1:
        online = 'В сети'
        last_seen = user_get[0]['last_seen']['time']
    if user_get[0]['online'] == 0:
        online = 'Не в сети'
        last_seen = user_get[0]['last_seen']['time']
    print('\033[1m\033[32mСтатус:\033[0m',online)
    global sex
    if user_get[0]['sex'] == 1:
        sex = 'Бабёна'
    if user_get[0]['sex'] == 2:
        sex = 'Мужской'
    if user_get[0]['sex'] == 0:
        sex = 'Не указан'
    print('\033[1m\033[32mПол: \033[0m'+sex)
    #print ('\033[1m\033[32mРодился: \033[0m'+user_get[0]['bdate'])
    print ('\033[1m\033[32mСтрана: \033[0m'+user_get[0]['country']['title'])
    #print ('\033[1m\033[32mГород: \033[0m'+user_get[0]['city']['title'])
    if 'status_audio' in user_get[0]:
        print ('\033[1m\033[32mСтатус (музыка): \033[0m'+user_get[0]['status_audio']['artist']+user_get[0]['status_audio']['title'])
    if 'status_audio' not in user_get[0]:
        print ('\033[1m\033[32mСтатус: \033[0m'+user_get[0]['status'])
    while True:
        more_info = input('\033[1m\033[31mНужна инфа о другом поце?\033[0m ').capitalize()
        if more_info == 'Да' or more_info == 'Yes' or more_info == 'Y':
            friend()
        elif more_info == 'Нет' or more_info == 'No' or more_info == 'N':
            break
        else:
            print('➣ \033[1m\033[31m[ERROR]\033[0m')
            time.sleep(0.7)
            continue
        break
def your():
    try:
        vk_session.authorization()
    except vk_api.AuthorizationError as error_msg:
        print(error_msg)
        return
    global name
    global surname
    global id_vk
    f = vk.users.get(name_case='nom', fields='online,last_seen')
    if f[0]['online'] == 1:
        global online
        online = 'В сети'
        last_seen = f[0]['last_seen']['time']
    if f[0]['online'] == 0:
        online = 'Не в сети'
        last_seen = f[0]['last_seen']['time']
    name = f[0]['first_name']
    surname = f[0]['last_name']
    id_vk = f[0]['id']
    print('Last seen:',last_seen)
    print('\033[1m\033[32mИмя: \033[0m%s\n\033[1m\033[32mФамилия: \033[0m%s\n\033[1m\033[32mID:\033[0m %s\n\033[1m\033[32mСтатус: \033[0m\033[32m\033[4m%s\033[0m' % (name, surname, id_vk, online))
    while True:
        more_info = input('\033[1m\033[31mНужна дополнительная инфа?\033[0m ').capitalize()
        if more_info == 'Да' or more_info == 'Yes' or more_info == 'Y':
            more_i()
        elif more_info == 'No' or more_info == 'N' or more_info == 'Нет':
            break
        else:
            print('➣ \033[1m\033[31m[ERROR]\033[0m')
            time.sleep(0.7)
            continue
        break
def more_i():
    f = vk.users.get(name_case='gen', fields='sex,bdate,country,city,status,online,last_seen')
    name_gen = f[0]['first_name']
    surname_gen = f[0]['last_name']
    if f[0]['online'] == 1:
        global online
        online = 'В сети'
        last_seen = f[0]['last_seen']['time']
    if f[0]['online'] == 0:
        online = 'Не в сети'
        last_seen = f[0]['last_seen']['time']
    print(online)
    global sex
    if f[0]['sex'] == 1:
        sex = 'Бабёна'
    if f[0]['sex'] == 2:
        sex = 'Мужской'
    if f[0]['sex'] == 0:
        sex = 'Не указан'
    print('\033[1m\033[32mПол: \033[0m'+sex)
    print ('\033[1m\033[32mРодился: \033[0m'+f[0]['bdate'])
    print ('\033[1m\033[32mСтрана: \033[0m'+f[0]['country']['title'])
    print ('\033[1m\033[32mГород: \033[0m'+f[0]['city']['title'])
    if 'status_audio' in f[0]:
        print ('\033[1m\033[32mСтатус (музыка): \033[0m'+f[0]['status_audio']['artist']+f[0]['status_audio']['title'])
    if 'status_audio' not in f[0]:
        print ('\033[1m\033[32mСтатус: \033[0m'+f[0]['status'])
    while True:
        more_info = input('\033[1m\033[31mНужна инфа о другом поце?\033[0m ').capitalize()
        if more_info == 'Да' or more_info == 'Yes' or more_info == 'Y':
            friend()
        elif more_info == 'No' or more_info == 'N' or more_info == 'Нет':
            break
        else:
            print('➣ \033[1m\033[31m[ERROR]\033[0m')
            time.sleep(0.7)
            continue
Вот какая проблема:
В def your или в def friend в конце есть инструкции if, elif, else. Если я ввожу "No", то у меня выдает ошибку (выполняется else) и начинается заново first()
С чем связано? Как исправить? Подскажите мне, пожалуйста

Отредактировано brainrtp (Июнь 24, 2016 09:11:42)

Офлайн

#2 Июнь 24, 2016 07:50:04

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите исправить.

Вы знаете очень тяжело читать код без правильного оформления! кроме того там у вас пока все далеко от идеала!

Давайте так:
Вы сейчас скопируете конкретную функцию - покажете в каком этапе и куда вы что вводите и что происходит и тогда уже подумаем!

з.Ы.

elif more_info == 'No' or more_info == 'N' or more_info == 'Нет':
            break
Я так понимаю ошибка в етом месте?
что говорит ошибка?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#3 Июнь 24, 2016 08:13:29

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить.

ZerG
Вы знаете очень тяжело читать код без правильного оформления! кроме того там у вас пока все далеко от идеала!Давайте так:Вы сейчас скопируете конкретную функцию - покажете в каком этапе и куда вы что вводите и что происходит и тогда уже подумаем!з.Ы.
1) Авторизуюсь (в самом начале кода ввожу свои данные, а именно логин и пароль)
2) Выбираю вид деятельности, а именно #1 - “Собрать информацию о себе” (при этом выборе срабатывает def your)
3) Выполняется сборка статистики и в конце предлагает дополнительную информацию (реализовано в def your через more_info = input('ТУТ_ТЕКСТ'))
4) Я ввожу "No" и должно сработать исключение elif:
#это все в конце def your:
  while True:
        more_info = input('\033[1m\033[31mНужна дополнительная инфа?\033[0m ').capitalize()
        if more_info == 'Да' or more_info == 'Yes' or more_info == 'Y':
            more_i()
        elif more_info == 'No' or more_info == 'N' or more_info == 'Нет':
            break
        else:
            print('➣ \033[1m\033[31m[ERROR]\033[0m')
            time.sleep(0.7)
            continue
        break
В теории (из 4-го пункта) программа должна завершится т.к выполнится break НО! Выдает ошибку, а именно срабатывает else вместо elif! И после этого заново запускается def your!

Отредактировано brainrtp (Июнь 24, 2016 09:11:31)

Прикреплённый файлы:
attachment Снимок экрана 2016-06-24 в 10.02.00.png (96,3 KБ)

Офлайн

#4 Июнь 24, 2016 08:20:43

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Помогите исправить.

brainrtp
А если вписать Да, срабатывает как нужно?

Офлайн

#5 Июнь 24, 2016 08:34:04

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить.

Firik
brainrtpА если вписать Да, срабатывает как нужно?
Да! А если, к примеру, ничего не вводить (просто нажать Enter) то выдаст ошибку и попросит ввести заново (либо Y, либо N, ну вы поняли)

Офлайн

#6 Июнь 24, 2016 08:49:20

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Помогите исправить.

Странно. Попробовал на смартфоне сейчас такой код и все сработало как надо.

while True:
    more_info = input('\033[1\033[31mНужна дополнительная инфа?\033[0m ').capitalize()
    if more_info == 'Да' or more_info == 'Yes' or more_info == 'Y':
        print('yes selected')
    elif more_info == 'No' or more_info == 'N' or more_info == 'Нет':
        print('no selected')
        break
    else:
        print('➣ \033[1m\033[31m[ERROR]\033[0m')
        continue
    break

Отредактировано Firik (Июнь 24, 2016 08:49:45)

Офлайн

#7 Июнь 24, 2016 09:08:10

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите исправить.

Так же проверил - все работает ошибку не выдает.
Версия питона у вас какая?



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

#8 Июнь 24, 2016 09:10:19

brainrtp
Зарегистрирован: 2016-06-24
Сообщения: 22
Репутация: +  0  -
Профиль   Отправить e-mail  

Помогите исправить.

Firik
Странно. Попробовал на смартфоне сейчас такой код и все сработало как надо.
Согласен, отдельно работает, но когда оно находится в функции (вроде бы def first - функция) не работает! Может быть это и не из-за функции! Но сам факт того, что не работает меня очень настораживает!

Отредактировано brainrtp (Июнь 24, 2016 09:11:05)

Офлайн

#9 Июнь 24, 2016 09:14:33

Firik
Зарегистрирован: 2015-12-02
Сообщения: 151
Репутация: +  6  -
Профиль   Отправить e-mail  

Помогите исправить.

brainrtp
Могу посоветовать более информативно оформить текст ошибок. Может эта ошибка относится к другой функции и сейчас это непонятно

Офлайн

#10 Июнь 24, 2016 09:21:14

ZerG
Зарегистрирован: 2012-04-05
Сообщения: 2627
Репутация: +  61  -
Профиль   Отправить e-mail  

Помогите исправить.

Запустите код, добейтесь что бы выскочила ошибка и скопируйте полностью ее сюда.



Влодение рускай арфаграфией - это как владение кунг-фу: настаящие мастира не преминяют ево бес ниабхадимости

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version