سؤال

لدي سؤال بسيط في بيثون الذي أتجمد فيه. هذا المقتطف الرمز يعمل. ولكن عندما أقوم باستبدال "258 494-3929" مع عابر ، أحصل على الخطأ التالي أدناه:

# Compare phone number  
 phone_pattern = '^\d{3} ?\d{3}-\d{4}$'

 # phoneNumber = str(input("Please enter a phone number: "))

 if re.search(phone_pattern, "258 494-3929"):  
        print "Pattern matches"  
  else:  
        print "Pattern doesn't match!"  

 Pattern does not match  
 Please enter a phone number: 258 494-3929  
 Traceback (most recent call last):  
    File "pattern_match.py", line 16, in <module>  
      phoneNumber = str(input("Please enter a phone number: "))  
    File "<string>", line 1  
      258 494-3929  
          ^
  SyntaxError: invalid syntax

   C:\Users\Developer\Documents\PythonDemo>  

بالمناسبة ، فعلت import re وحاولت استخدام rstrip في حالة \n

ماذا يمكن أن أكون في عداد المفقودين؟

هل كانت مفيدة؟

المحلول

يجب أن تستخدم raw_input بدلاً من input, ، وليس عليك الاتصال str, ، لأن هذه الوظيفة تُرجع سلسلة نفسها:

phoneNumber = raw_input("Please enter a phone number: ")

نصائح أخرى

في Python الإصدار 2.x ، يقوم input () بأمرين:

  1. يقرأ سلسلة من البيانات. (انت تريد هذا.)
  2. ثم يقوم بتقييم سلسلة البيانات كما لو كانت تعبير بيثون. (هذا الجزء يسبب الخطأ.)

الدالة RAW_INPUT () أفضل في هذا الموقف لأنها تفعل #1 أعلاه ولكن ليس رقم 2.

إذا تغيرت:

input("Please enter a phone number: ")

ليقرأ:

raw_input("Please enter a phone number: ")

ستقوم بإزالة خطأ رقم الهاتف الذي لا يكون تعبيرًا صالحًا للثعبان.

لقد تعثرت وظيفة Input () على الكثير من الأشخاص الذين يتعلمون بيثون ، بدءًا من إصدارات Python 3.x ، قام مصممو اللغة بإزالة خطوة التقييم الإضافية. هذا يجعل الإدخال () في الإصدارات 3.x يتصرف نفس مثل RAW_INPUT () في الإصدارات 2.x.

أنظر أيضا مقالة wikibooks مفيدة.

وظيفة input () في الواقع تقييم المدخلات التي كتبت فيها:

>>> print str(input("input: "))
input: 258238
258238
>>> print str(input("input: "))
input: 3**3 + 4
31

إنه يحاول تقييم "258 494-3929" وهو بيثون غير صالح.

يستخدم sys.stdin.readline().strip() للقيام بقراءتك.

input() المكالمات eval(raw_input(prompt)), ، لذلك تريد phoneNumber = raw_input("Please enter a phone number: ").strip()

أنظر أيضا http://docs.python.org/library/functions.html#input و http://docs.python.org/library/functions.html#raw_input

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top