2011-12-30 6 views
5

मैं पाइथन हार्ड हार्ड सीखने के माध्यम से अपना रास्ता काम करने की कोशिश कर रहा हूं, और जहां मैं अपनी शिक्षा आगे बढ़ा सकता हूं, वहां गड़बड़ करने की कोशिश कर रहा हूं। मैंने सोचा कि यह काम करेगा: थोड़ी देर के लिए एक सीमा निर्धारित करने के लिए raw_input सेट करें, फिर लूप को आवृत्ति "आवृत्ति" के साथ स्थापित सीमा तक निष्पादित करें।कच्चे_इनपूट पाइथन हार्ड हार्ड व्यायाम संस्करण सीखने में अनंत लूप क्यों बनाते हैं?

यह, ओह, नहीं करता है। इसके बजाए, यह पाइथन को संख्या सूचियां बनाने के अनंत लूप में भेजता है, प्रत्येक अंतिम (बहुत लंबी) सूची की तुलना में एक वृद्धि लंबे समय तक लग रहा है।

मूल कोड "जबकि मैं < 6" था - मैंने कच्चे_इनपुट चर को जोड़ा है, और यहां तक ​​कि अगर मैं मूल कोड (6) के समान वैरिएबल दर्ज करता हूं, तो यह अनंत-लूप चीज करता है।

यहाँ पूर्ण स्क्रिप्ट है: अधिकतम अज्ञान के लिए

i = 0 
numbers = [] 

print "What is the frequency?" 
frequency = raw_input ('Kenneth? ') 

while i < frequency: 
    print "At the top i is %d" % i 
    numbers.append(i) 
    i = i + 1 
    print "Numbers now: ", numbers 
    print "At the bottom i is %d" % i 

print "The numbers: " 

for num in numbers: 
    print num 

क्षमा याचना - मैं अभी पुस्तिका में मेरे सामने सॉफ्टवेयर डिजाइन के लिए अजगर की एक प्रति मिल गया है, और यह मेरी पर करने के लिए अगले बात है LPTHW के बाद -do सूची।

+2

आप उपयोगी निम्नलिखित मिल सकती है इससे पहले कि frequency = int(frequency) जोड़ने है। यह इस बारे में है कि अजगर में तारों और चींटियों की तुलना कैसे की जाती है। http://stackoverflow.com/questions/3270680/how-does-python-compare-string-and-int – Dunes

+1

'raw_input' को 'इनपुट' –

+1

या' आवृत्ति = int (raw_input (' केनेथ? ') में बदलने का प्रयास करें) ' –

उत्तर

6

raw_input आपको एक स्ट्रिंग ऑब्जेक्ट देगा, न कि पूर्णांक। लूप से पहले frequency = int(frequency) बनाने का प्रयास करें, यह तुलनात्मक मूल्यवान बना देगा।

+3

असाइनमेंट से पहले एक चीज के रूप में पूरी चीज़ को डालने के लिए यह और अधिक अंतर्निहित होगा: 'आवृत्ति = int (raw_input ('केनेथ?'))'। – Makoto

+0

ओह! अच्छा मैं समझ गया। स्ट्रिंग "सच" लौट रही है और इसलिए मुझे जो भी मिल रहा है वह हमेशा के लिए "सत्य" लूप है और न कि शुद्ध परिणाम मैं एक पूर्णांक से प्राप्त करूंगा। धन्यवाद! – JeanSibelius

+0

@ मकोटो केवल तभी जब आप अपवादों को संभालते हैं। 'int (raw_input (...))' दिया गया मान 'ValueError' फेंकता है यदि दिया गया मान int castable नहीं है। – kojiro

1

क्योंकि raw_input एक स्ट्रिंग में परिणाम देता है।

>>> frequency = "10" 
>>> i = 0 
>>> while i < frequency: 
...  i = i + 1 
...  print i 
...  if i > 20: break 
... 
1 
2 
3 
4 
5 
6 
7 
8 
9 
10 
11 
12 
13 
14 
15 
16 
17 
18 
19 
20 
21 
1

संख्या आपके द्वारा दर्ज एक स्ट्रिंग के बजाय एक पूर्णांक

बस, जबकि पाश

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

  • कोई संबंधित समस्या नहीं^_^