मैंने एक प्रोग्राम को कोड करने की कोशिश की जो बाइनरी नंबरों को एएससीआई नंबरों में परिवर्तित करता है। बट यह काम नहीं करता है। यह हमेशा एक शून्य थूकता है। यहाँ मेरा कोड है:

import math

Bin = input("")
WordCounter = 0
PowerOfTwo = 0
BinNum = 0

while(True):
  try:
    BinNum += ((Bin[WordCounter]) * math.pow(2, PowerOfTwo))
    WordCounter += 1
    PowerOfTwo += 1
  except: break

print(BinNum)
-2
Prometheus 18 जून 2018, 16:13

1 उत्तर

सबसे बढ़िया उत्तर

Bin[WordCounter] में टाइप str, एक स्ट्रिंग है। आपको इसे int में लपेटने की आवश्यकता है जैसे कि

BinNum += int(Bin[WordCounter]) * math.pow(2, PowerOfTwo)

(हालांकि आपका कोड अभी भी एक परिणाम उत्पन्न करेगा जो पीछे की ओर है, आपको इसके बारे में सोचना होगा)


बात यह है कि, यदि आपने अपवाद को नंगे except के साथ नहीं छिपाया होता, तो आपको एक बहुत ही उपयोगी त्रुटि संदेश मिलता

BinNum += (Bin[WordCounter]) * math.pow(2, PowerOfTwo)
---------------------------------------------------------------------------
TypeError                                 Traceback (most recent call last)
<ipython-input-45-d38cc5b7069c> in <module>()
----> 1 BinNum += (Bin[WordCounter]) * math.pow(2, PowerOfTwo)

TypeError: can't multiply sequence by non-int of type 'float'

साथ ही, कृपया PEP8 पढ़ें ताकि आप पायथन शैली दिशानिर्देशों का पालन करें।


ठीक है, क्योंकि मैं उदार महसूस कर रहा हूं, आपकी समस्या का समाधान (सिर्फ bin_num = int(input(""), 2) के अलावा, है:

bin_ = input("")

bin_num = 0
for index, char in enumerate(reversed(bin_)):
    bin_num += int(char) * 2**index  # ** is the power operator

print(bin_num)

व्याख्या:

enumerate('abcd') --> (0, 'a'), (1, 'b'), (2, 'c'), (3, 'd')
reversed('abcd') --> 'd', 'c', 'b', 'a'
2
FHTMitchell 18 जून 2018, 17:25