2017-05-11 13 views
7

मेरे पास एक क्यूआर रीडर है। जब क्यूआर रीडर स्कैन करता है, तो मैं इसे स्कैन करने की निगरानी करना चाहता हूं, लेकिन मैंने एक अजीब समस्या में भाग लिया है, और जैसा कि मैं पाइथन के लिए इतना नया हूं, मुझे वास्तव में पता नहीं है कि यह क्यों हो रहा है। ठीक है, नीचे दो अलग-अलग (मेरे लिए) समान कार्यक्रम हैं, लाइन के अलावा। जब वह रेखा हटा दी जाती है, तो मुझे अलग-अलग परिणाम मिलते हैं (प्रतीत होता है कि वर्णमाला परिवर्तन)। मैं वास्तव में समझ में नहीं आता क्यों।पायथन में अजीब व्यवहार, रेखा गायब, विभिन्न आउटपुट

test2.py:

H 
HT 
HTT 
HTTP 
HTTP: 
HTTP:? 
HTTP:?? 
HTTP:??G 
HTTP:??GO 
HTTP:??GOO 
HTTP:??GOOG 
HTTP:??GOOGL 
HTTP:??GOOGLE 
HTTP:??GOOGLE> 
HTTP:??GOOGLE>C 
HTTP:??GOOGLE>CO 
HTTP:??GOOGLE>COM 
HTTP:??GOOGLE>COM 

और अब test3.py:

# -*- coding: utf-8 -*- 

import pyHook 
import pythoncom 
import re 
import webbrowser 
endDomains = ".com|.net|.org|.edu|.gov|.mil|.aero|.asia|.biz|.cat|.coop|.info|.int|.jobs|.mobi|.museum|.name|.post|.pro|.tel|.travel".split("|") 
chars = "" 
def pressed_chars(event): 
    global chars 
    if event.Ascii: 
     char = chr(event.Ascii) 
     if event.Ascii == 3: 
      quit() 
     else: 
      chars += char 
      print chars 

proc = pyHook.HookManager() 
proc.KeyDown = pressed_chars 
proc.HookKeyboard() 
pythoncom.PumpMessages() 

उत्पादन

# -*- coding: utf-8 -*- 

import pyHook 
import pythoncom 
import re 
import webbrowser 

chars = "" 
def pressed_chars(event): 
    global chars 
    if event.Ascii: 
     char = chr(event.Ascii) 
     if event.Ascii == 3: 
      quit() 
     else: 
      chars += char 
      print chars 

proc = pyHook.HookManager() 
proc.KeyDown = pressed_chars 
proc.HookKeyboard() 
pythoncom.PumpMessages() 

जब सामग्री http://google.com साथ एक QR कोड स्कैन निम्नलिखित उत्पादन का उत्पादन निम्नलिखित आउटपुट:

h 
ht 
htt 
http 
http; 
http;/ 
http;// 
http;//g 
http;//go 
http;//goo 
http;//goog 
http;//googl 
http;//google 
http;//google. 
http;//google.c 
http;//google.co 
http;//google.com 
http;//google.com 

यदि मैं endDomains चर के किसी भी भाग को हटाता हूं, तो प्रोग्राम बदलता है। क्या ऐसे कुछ पात्र हैं जिन्हें मैं नहीं देख सकता कि मैं हटा रहा हूं या कुछ चीजें बदलता हूं? पृथ्वी पर क्यों एक पाइप को हटाते समय पाइथन इन दो पूरी तरह से अलग-अलग परिणामों का उत्पादन करता है जो प्रोग्राम का उपयोग भी नहीं करता है?

संपादित करें: ऐसा लगता है कि यह .split("|") से जुड़ा हुआ है, और इसके बजाय चर नहीं है। यदि मैं .split("|") हटा देता हूं तो प्रोग्राम फिर से टूट जाता है।

दूसरा संपादित मूल स्रोत है कि मैं प्रयोग किया जाता है के लिए क्रेडिट Janekmuric from their answer here.

+0

शायद किसी अन्य फ़ाइल ने इस फ़ाइल को आयात किया है और उस फ़ाइल में 'endDomains' का उपयोग किया जा रहा है। – ZdaR

+0

@ZdaR, ओह? मैं इसका परीक्षण कैसे करूं? – Chud37

+0

आउटपुट को फिर से जांचने के लिए 'end_domains' जैसे अन्य नामों में 'endDomains' को बदलना। –

उत्तर

1

को जाता है जिस तरह से आप endDomains परिभाषित किया है है नहीं बहुत 'pythonic'

यह बेहतर होगा सिर्फ एक सूची के रूप में यह परिभाषित करने के लिए ।

endDomains = [ 
    ".com", ".net", ".org", ".edu", ".gov", ".mil", ".aero", ".asia", 
    ".biz", ".cat", ".coop", ".info", ".int", ".jobs", ".mobi", ".museum", 
    ".name", ".post", ".pro", ".tel", ".travel" 
] 

क्या आप मूल्य वापस करने में सक्षम हैं और इसे उठाया है ताकि निर्माण घटना के बाहर होता है? दुर्भाग्य से मैं विंडोज़ पर नहीं हूं इसलिए मैं इसका परीक्षण नहीं कर सकता। मैंने यह लिखा:

"""Mock.""" 

endDomains = [ 
     ".com", ".net", ".org", ".edu", ".gov", ".mil", ".aero", ".asia", 
     ".biz", ".cat", ".coop", ".info", ".int", ".jobs", ".mobi", ".museum", 
     ".name", ".post", ".pro", ".tel", ".travel" 
    ] 
chars = "" 
def pressed_chars(event): 
    global chars 
    char = chr(ord(event)) 
    if event == '3': 
     return False 
    else: 
     chars += char 
     print(chars) 
     return True 


result = True 
while result: 
    string = input("Some input please: ") 
    for character in string: 
     result = pressed_chars(character) 

print("Done") 

यह एक ही मुद्दे से ग्रस्त नहीं है। तो मैं उम्मीद करता हूं कि इस मुद्दे को पायहुक या पायथनकॉम में। इसके अलावा यह ध्यान देने योग्य है कि ग्लोबल्स का उपयोग आम तौर पर नहीं किया जाता है और क्योंकि यह भ्रम में जोड़ता है: Use of "global" keyword in Python

उम्मीद है कि मदद करता है।

+0

हे मैट! समस्या यह थी कि मैं प्रोग्राम * * * endDomains' के बिना प्रोग्राम चलाने के लिए चाहता था, क्योंकि इसका उपयोग नहीं किया गया था, लेकिन इसे हटाने से दो अलग-अलग आउटपुट हुए, और मैं यह नहीं समझ पाया कि क्यों। – Chud37

+0

मुझे वह मिलता है। स्पष्ट होना .... आपके द्वारा उपयोग किए जा रहे मॉड्यूल किसी भी तरह से संदर्भ को प्रभावित कर रहे हैं। मानक पायथन में ऐसा कोई रास्ता नहीं है जो होगा। मैंने जो उदाहरण दिया है उसे देखें। ऐसा कुछ होना चाहिए जो विभाजन (विरासत) या समान कुछ के उपयोग को बदल रहा हो। मैं नहीं देख सकता कि क्यों भी उस मामले में यह वर्णों को प्रभावित करेगा जब तक कि मॉड्यूल वैश्विक वर्णों का भी उपयोग नहीं कर रहा हो। – Matt

संबंधित मुद्दे