مشكلة في استخدام كسر الأوامر في بيثون التعليمي

StackOverflow https://stackoverflow.com/questions/1625174

  •  06-07-2019
  •  | 
  •  

سؤال

أنا بعد بيثون التعليمي في الموقع و أنا حاليا في كسر مواصلة القسم.لقد حاولت هذه التعليمات البرمجية.

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print n, 'equals', x, '*', n/x
...             break
...     else:
...         # loop fell through without finding a factor
...         print n, 'is a prime number'
... 
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

و بدلا من البصق ما مكتوب فوق أحصل على

3 is a prime number
4 equals 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals 2 * 4
9 is a prime number
9 equals 3 * 3

يبدو لي أنه لا تزال تعمل داخل حلقة ، ولكن لماذا التعليمي لا تأخذ هذا في الاعتبار ؟ هو عفا عليها الزمن للحصول على أحدث مترجم بناء (أنا تشغيل إكس أوبونتو طروب)?

كنت قادرا على إصلاح هذا عن طريق إضافة السطر

     else:
...                     if n != y:
...                             print n, 'is a prime number'
...                             y = n

ولكن أنا قلق قد يكون هذا سوء الترميز الممارسة.شكرا لكم على مساعدتكم.

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

المحلول

الإخراج التي تظهر على عشرة مرات السلسلة "x هو عدد الوزراء".ومع ذلك ، فإن هذه السلسلة المطبوعة في else شرط من الحلقة الداخلية ، كما أعدم في معظم مرة واحدة لكل التنفيذ من الحلقة الداخلية.

منذ الخارجي حلقة ينفذ ثمانية التكرار،"x هو عدد الوزراء" لا يمكن طباعة أكثر من ثمانية مرات.وهكذا الإخراج الذي عرض لا عن طريق الرمز المبين.

الختام:شيء مريب.يمكنك عرض التعليمات البرمجية كما يمكنك تنفيذ ذلك ؟


تحرير:حل!

بشكل غير صحيح بادئة على شرط آخر ، مثل أن الثعبان فسرت على أنها تنتمي إلى if البيان.بيثون يعامل التبويب كما 8 المساحات.ربما يعرض محرر علامات التبويب كما 4 المساحات.بهذه الطريقة كنت قد أخطأت هذا الخطأ.كما في بيب 8, من فضلك لا تخلط علامات والمساحات, ويفضل استخدام أربعة المسافات البادئة التعليمات البرمجية الخاصة بك.

>>> for n in range(2, 10):
...     for x in range(2, n):
...         if n % x == 0:
...             print n, 'equals', x, '*', n/x 
...             break
...         else:
...             # loop fell through without finding a factor
...             print n, 'is a prime number'
... 
3 is a prime number
4 equals 2 * 2
5 is a prime number
5 is a prime number
5 is a prime number
6 equals 2 * 3
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
7 is a prime number
8 equals 2 * 4
9 is a prime number
9 equals 3 * 3

نصائح أخرى

وأفضل تخمين بلادي بأن ما تتمتعون به 'آخر: "البيان ليس بادئة بشكل صحيح، ثم نتيجة الخاص بك هو منطقي، تأكد من أن المسافة البادئة لك آخر هو على مستوى مع" ل x'

.

وأي بمعنى. استخدام:

for n in range(2,10):
    for x in range(2,n):
        if n%x == 0:
            print(n, '=', x, '*', n/x)
            break
        else:
            print(n, 'is a prime')

وبدلا من:

for n in range(2,10):
    for x in range(2,n):
        if n%x == 0:
            print(n, '=', x, '*', n/x)
            break
    else:
        print(n, 'is a prime')

وأنت قد تحتاج إلى تحديث مترجم بيثون الخاص بك.

وهذا الرمز يعمل بشكل صحيح بالنسبة لي (لاحظ نسخة بايثون عدد):

Python 2.6.1 (r261:67515, Dec  6 2008, 16:42:21) 
[GCC 4.0.1 (Apple Computer, Inc. build 5370)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> for n in range(2, 10):
...      for x in range(2, n):
...          if n % x == 0:
...              print n, 'equals', x, '*', n/x
...              break
...      else:
...          # loop fell through without finding a factor
...          print n, 'is a prime number'
... 
2 is a prime number
3 is a prime number
4 equals 2 * 2
5 is a prime number
6 equals 2 * 3
7 is a prime number
8 equals 2 * 4
9 equals 3 * 3

وأعتقد أنك قد حصلت على تزكي خطأ. إذا كنت تأخذ التعليمات البرمجية الخاصة بك، ووضع مسافة بادئة للآخر بحيث يكون تحت بيان إذا، وأحصل على بالضبط الإخراج الذي كنت تحصل.

والرمز يستنسخ أدناه الإخراج الخاص بك،

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, 'equals', x, '*', n/x
            break
        else:
            # loop fell through without finding a factor
            print n, 'is a prime number'

وحين

for n in range(2, 10):
    for x in range(2, n):
        if n % x == 0:
            print n, 'equals', x, '*', n/x
            break
    else:
        # loop fell through without finding a factor
        print n, 'is a prime number'

هل ما تريد أن تفعله.

لاحظ مختلفة في الطعج لآخر.

وأعتقد أن else يجب أن تنسجم دائما مع if. وهذا هو ما قرأته. ولكن في هذه قانون رقم مولد رئيس، والطريقة الوحيدة للحصول على الأعداد الأولية مكتوبة مرة واحدة، ومواءمة else مع for x. لذلك ليس لدي أي تفسير لهذا identation. على الرغم من أنني بدأت للتو لتعلم بايثون.

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