الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

اسئلة عن التحويل بين المتغيرات

بدأه احمد وسام في 14 يوليو 2014 · 6 رد · 873 مشاهدة · في لغة Python
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم 

 

 

 

عندي كم سؤال في تحويل بين المتغيرات

 

 

دائما في اي دورة اشاهدها يقولون انه ﻻيمكن تحويل نص الى int  وهذا صحيح

 

 

ﻻكن عندما نعمل هكذا

>>> a = "1234"
السؤال هنا

الارقام بتعتبر الان من ضمن سلسلة نصية وﻻكن يمكن تحويلها لماذا , المفروض كونها داخل سلسلة نصية ﻻيمكن تحويلها مالتتفسير لهذا الشيء 
>>> int(a)
1234

السؤال الثاني

 

 

بعض الاحيان اشاهد في سكربتات يحولون متغيرات بهذا الشيء

str(int(المتغير))

او هكذا

int(str(المتغير))

مالفرق بين اﻻولى والثاني !!

 

هذه المعلومات تفيدني جدا

 

جزاكم الله خير

#2

يمكن تحويل سلسلة نصية إلى عدد صحيح اذا كانت السلسلة عبارة عن ارقام وليس حروف ورموز اخرى

في الحقيقة سؤالك الثاني هو نفسه سؤالك الاول
وللتحويل من عدد صحيح الى نص او العكس احيانا نضطر لاستخدامها، تابع هذا الكود وان شاء الله تفهم

>>> a = 123
>>> for i in a:
    print(i)

    
Traceback (most recent call last):
  File "<pyshell#78>", line 1, in <module>
    for i in a:
TypeError: 'int' object is not iterable
>>> for i in str(a):
    print(i)

    
1
2
3
>>>
2
#3

مقولة أنه لايمكن تحويل النص الذي يحتوي على أرقام إلى عدد غير صحيحة. الصحيح أنه لايمكن التعامل مع نص كعدد (لاتستطيع إجراء عملية حسابية عليه):

>>> 1 + 1
2
>>> '1' + 1
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: Can't convert 'int' object to str implicitly
>>>

طريقة عمل int، يمكن تحويل أي رقم مفرد إلى عدد بالإعتماد على ترميز الرقم في جدول الآسكي ascii:

>>> ord('0')
48
>>> ord('9')
57
>>>
>>> ord('9') - ord('0')
9
>>> ord('8') - ord('0')
8
>>> ord('7') - ord('0')
7
>>>

الأعداد التي تحتوي على أكثر من خانة، فيمكن ضرب الرقم بـ10 أس رقم لوضعة في منزلته، حسب المبدأ:

 

LaTeX
mimetex.cgi?1234 = 1 \times 10^3 + 2 \ti

 

بجمع الفكرتين فيمكن يمكن تحويل أي نص يحتوي على أرقام إلى عدد عشري:

def myint(string):
    power = 10 ** len(string)
    number = 0
    for digit in string:
        if digit not in '0123456789':
            raise ValueError('invalid value')
        power //= 10
        number += (ord(digit) - ord('0')) * power
    return number

>>>
>>> myint('1234')
1234
>>>

هذا المبدأ المستخدم لتحويل النصوص التي تحتوي على أرقام لأعداد.

1
#4

اشكرك اخي احمد جوابك واضح

 

----------------------------------------

 

اشكرك اخي بركات  وصراحة كلامك صحيح

 

مانتفع من النص اذا احولهالى رقم ﻻني مراح اقدر اعمل عليه عمليات حسابية

 

بالنسبة لل ord نعم يمكننا ان نعمل عملية حسابية عن طريق عملية طرح من 0

ord('8')-ord('0')+ord('2')

والله اخي مفهوم جدا اكتسبت معلومة جديدة

 

تم تقيمكم

تم تعديل هذه المشاركة بواسطة احمد وسام في 15 يوليو 2014 في 01:05

#5
اقتباس

 

طريقة عمل int، يمكن تحويل أي رقم مفرد إلى عدد بالإعتماد على ترميز الرقم في جدول الآسكي ascii:

 

دالة الأخ Mr.B  جيدة لكنها لا تحول العدد عندما يكون سالب

 

و هذا غير صحيح

 

لذا قمت بتعديل بسيط على الكود ليشمل هذه الحالة:

def myint(string):
    if string[0]=='-':
        i=-1
        string=string[1:]
    else:
        i=1
    power = 10 ** len(string)
    number = 0

    for digit in string:
        if digit not in '0123456789':
            raise ValueError('invalid value')
        power //= 10
        number += (ord(digit) - ord('0')) * power
    return number*i
1
#6

:D :D :D

تم تعديل هذه المشاركة بواسطة MuStafa - HaSsan في 26 يوليو 2014 في 18:54

salah.jpg

#7

شكرا لك

مواضيع مشابهة