【问题标题】:print function in while loop not printingwhile循环中的打印功能不打印
【发布时间】:2020-05-24 22:38:18
【问题描述】:

我是 python 新手,我有几件值得怀疑的事情正在发生。我想弄清楚我在这个问题上做错了什么:

本练习假设您已完成编程练习 7,随机数文件 作家。编写另一个程序,从文件中读取随机数,显示 数字,然后显示以下数据: • 总数 • 从文件中读取的随机数个数

编写文件:

import random

def main():

    randomcount = int(input('How many numbers should i generate?'))

    randomfile = open('randomnumber.txt', 'w')

    total = 0
    for numbers in range(randomcount):
        number = random.randint(1,100)
        total+= number
        randomfile.write((str(number)) + '\n')
        randomfile.write((str(total)) + '\n') 

    randomfile.close()
    print('File updated')

main()

输出:

How many numbers should i generate?5 (enter)
file updated                    -       **Question 1**
file updated                     | ---- this is new.. while doing 
file updated                    -       trial and error this started
                                        repeating. First 2 times then 
                                        after awhile 3 times. 
                                        Refreshed kernel and outputs 
                                        still does this

读取文件:主要问题

def main():
    randomfile = open('randomnumber.txt','r')

    contents = randomfile.readline()

    while randomfile !='':
        total = randomfile.readline()

        contents = contents.rstrip('\n')
        total = total.rstrip('\n')

        print(contents)

        contents = randomfile.readline()

   print('total: ',total)
   randomfile.close()

main()

输出:

90                      -
22                       |
17                       |--- Randomly generated
2                        |
75                      -
        **Question 2**
        <--- print('total: ', total) not showing up


        -
         |
         |
         |
         .   **Question 3**
         .   <--------- Space goes on forever like if its printing 
         .              space. so much that theres a scroll bar just
         .              for empty space. if i try to scroll all the 
         |              way to the bottom so that i can see if maybe 
         |              its printing at the end i never reach the end 
         |              of it because for some reason the program 
        -               keeps adding more and more space.

【问题讨论】:

    标签: python for-loop while-loop printing record


    【解决方案1】:

    问题是写入总数的行在每次迭代中都被执行。这就是为什么生成的数字是行数的两倍。

    解决方案是取消缩进该行,我在这里做了:

    import random
    
    def main():
    
        randomcount = int(input('How many numbers should i generate?'))
    
        randomfile = open('randomnumber.txt', 'w')
    
        total = 0
        for numbers in range(randomcount):
            number = random.randint(1,100)
            total+= number
            randomfile.write((str(number)) + '\n')
        randomfile.write((str(total)) + '\n') # <<<<<<<<<<<<<<This line was indented, it is fixed now.
    
        randomfile.close()
        print('File updated')
    
    main()
    

    编辑:修复读取功能:

    def main():
        randomfile = open('randomnumber.txt', 'r')
        lines = randomfile.readlines()
        total = 0
    
        for line in lines:
            if line is lines[-1]:
                print(f"Total: {line.replace('\n', '')}") #Since the write function includes the total as the last line, you don't need to calculate here.
            else:
                print(line.replace('\n', ''))
    
    main()
    

    【讨论】:

    • 使用了您的建议,但现在阅读部分在 contents = contents.rstrip('\n') 'list' object has no attribute 'rstrip' 处标记错误
    • 这不是我发布的代码错误,也许尝试复制+粘贴我发布的内容?编辑:你使用的是什么 python 版本?
    • 您编辑的部分有效,但如果您在上面查看我附加的代码,我有一个阅读块(第三个灰色框)。这就是我目前遇到的问题。
    • 感谢您提供另一种回答方式。我还发现 for 循环效果最好。我附上了一个上面的答案,看起来和你的很相似,除了我还没有学到一些你用来解决它的东西,比如 f 字符串。
    【解决方案2】:

    希望将 readline 更改为 readlines,这应该可以工作

    【讨论】:

      【解决方案3】:

      很明显,问题是在您的第一行中,您以单引号 ' 打开并以双引号 " 结束。变化:

      def main():
      
          randomcount = int(input('How many numbers should i generate?"))
      

      到:

      def main():
      
          randomcount = int(input('How many numbers should i generate?'))
      

      【讨论】:

      • 如果这是他的问题,他会得到一个错误
      • 这只是将其转移到堆栈溢出的错字。不是主要问题。更正了错字谢谢您的回复
      【解决方案4】:

      我重组了我的代码,并使其成为 for 循环而不是 while 循环。您不需要 rstrip 正在转换为 int 的数字。将累加器放在输入文件部分而不是输出文件部分。 Mae 代码清理器,它的工作原理!

      随机导入

      def main():
      
          randomcount = int(input('How many numbers should i generate?'))
      
          randomfile = open('randomnumber.txt', 'w')
      
          for numbers in range(1,randomcount + 1):
              numbers = random.randint(1,100)
      
              randomfile.write(str(numbers) + '\n') 
      
          randomfile.close()
      
          randomfile = open('randomnumber.txt','r')
          total = 0
      
          for numbers in randomfile:
              numbers = int(numbers)
              total+= numbers
      
              print(numbers)
          print('total',total)
      
      main()
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-07-10
        • 2015-05-23
        • 2013-11-03
        • 2016-12-21
        • 1970-01-01
        • 1970-01-01
        • 2021-11-30
        • 2017-04-29
        相关资源
        最近更新 更多