python print不输出怎么回事

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python print不输出怎么回事相关的知识,希望对你有一定的参考价值。

本来这个文件是可以输出的,print倒数第二条for循环之后就不输出了,再点其他的也不能输出了。求问大神这是怎么回事。。。

前4个In你没运行,后两个In没运行完。
jupyter notebook一般用于数据分析
你写这些代码用Python3自带的ide就行,或者pycharm追问

我crtl+enter运行了啊。什么都不输出,也不报错

参考技术A 你都运行了吗?追问

运行了啊!

Print() 函数无法输出向量,这是怎么回事?

【中文标题】Print() 函数无法输出向量,这是怎么回事?【英文标题】:Print() function failing to output vector, whats wrong? 【发布时间】:2015-11-20 22:50:53 【问题描述】:

所以我的工作是描述我们的老师只给我们原型用于电话簿作业的功能。他还给了我们一个内置的main(),我们不允许更改他的main() 或原型,只能描述它们。我正在研究void print() 函数,靠近底部的那个。 cout 括号 << 被标记为错误。如果你们也对void erase() 函数有任何提示,我想在erase() 中使用void lookup() 函数,但问题是我应该删除索引并且查找函数返回电话编号,而不是索引。 首先列出的是原型,然后是我的作品,然后是主体。

原型

    #ifndef PHONEBOOK_H
    #define PHONEBOOK_H
    #include <string>
    #include <vector>
    using namespace std;

    class Person
    
    public:
        Person();
        Person(string new_name, int new_phone);
        string get_name() const;
        int get_phone() const;
        bool operator < (Person p) const;
        void print() const;

    private:
        string name;
        int phone;
    ;

    void add_people(vector<Person> &phone_book);
    void erase(vector<Person> &phone_book, string name);
    void sort(vector<Person> &phone_book);
    void shuffle(vector<Person> &phone_book);
    void reverse(vector<Person> &phone_book);
    void print(vector<Person> &phone_book);
    int lookup(const vector<Person> &phone_book, string name);
    #endif

我的作品

        #include <iostream>
        #include <string>
        #include <vector>
        #include <time.h>
        #include "phonebook.h"

        Person::Person()
        
            name = "NONE";
            phone = 0000000;

        
        Person::Person(string new_name, int new_phone)
        
            name=new_name;
            phone=new_phone;
        
        string Person::get_name() const
        
            return name;
        
        int Person::get_phone() const
        
            return phone;
        
        bool Person::operator < (Person p) const
        
            return name < p.name;
        
        void Person::print() const
        
            cout << endl << name << " " << phone;
        

        void add_people(vector<Person> &phone_book)
        
            cout << "Please enter the new name: ";
            string s;
            getline(cin, s);
            cout << "Please enter new number: ";
            int number;
            cin >> number;
            phone_book.push_back(Person(s,number));
        
        void erase(vector<Person> &phone_book, string name)
           
        
        void sort(vector<Person> &phone_book)
        
        
        void shuffle(vector<Person> &phone_book)
        
        
        void reverse(vector<Person> &phone_book)
        
        
        void print(vector<Person> &phone_book)
        
            for(int i=0; i < phone_book.size(); i++)
                cout << phone_book[i] << " ";
        

        int lookup(const vector<Person> &phone_book, string name)
        
                int i = 0;
                while (i < phone_book.size() && phone_book[i].get_name() != name)
                
                    i++;
                    return phone_book[i].get_phone();
                
        

主要

#include <iostream>
#include <string>
#include <vector>
#include <time.h>
#include "phonebook.h"

using namespace std;




int main()


    vector<Person> phone_book;
    string name;
    int number;
    int answer;

    srand((int)(time(0)));

    phone_book.push_back(Person("Bruin, Joe", 5556456));
    phone_book.push_back(Person("Simpson, Homer", 5557471));
    phone_book.push_back(Person("Duffman, Barry", 5533331));


    cout <<"\n";
    cout << "Your phone book contains the following names and numbers: \n";

    for (int i=0; i < phone_book.size(); i++)
    

        phone_book[i].print();
        cout << "\n";
    
    cout <<"\n";
    answer=0;

    while (answer != 8)
    
        cout << "\nChoose from the following options:\n\n";

        cout << "1) Add people to the phone book.\n";
        cout << "2) Erase a person from the phone book.\n";
        cout << "3) Sort the phone book.\n";
        cout << "4) Shuffle the phone book.\n";
        cout << "5) Reverse the phone book.\n";
        cout << "6) Print the phone book.\n";
        cout << "7) Look up a person in the phone book.\n";
        cout << "8) Quit.\n\n";

        cin >> answer;

        string clear;

        getline(cin, clear);

        if (answer == 1)
            add_people(phone_book);
        else if (answer == 2)
        
            cout << "Enter a name: ";
            getline(cin, name);
            erase(phone_book, name);

        
        else if (answer == 3)
            sort(phone_book);
        else if (answer == 4)
            shuffle (phone_book);
        else if (answer == 5)
            reverse(phone_book);
        else if (answer == 6)
        
            cout <<"\n";
            cout << "Your phone book contains the following names and numbers: \n";
            print(phone_book);
        
        else if (answer ==7)
                           
            cout << "Enter a name: ";
            getline(cin, name);
            int number = lookup(phone_book, name); 
            if (number > 0)
            
                cout << "\n\nThe number for " << name << " is: " << number << "\n\n";
            
            else
                cout << name << " not found in the phone book.\n";
        
    
    return 0;

【问题讨论】:

Person 不是overload the &lt;&lt; operator。因此,您要么必须重载它,要么必须分别cout 类的成员(这基本相同,但重载&lt;&lt; 运算符更好) 【参考方案1】:
cout << phone_book[i] << " ";

是一个问题,因为operator&lt;&lt; 没有在coutPerson 之间定义。您可以通过定义这样的函数或在循环中调用Person::print 来解决问题。

void print(vector<Person> &phone_book)

    for(int i=0; i < phone_book.size(); i++)
    
        phone_book[i].print();
        cout << " ";
    

改进建议

不要在课堂上的任何地方假设coutcin。无论您在类实现中的何处使用其中之一,请将函数更改为使用 std::ostream&amp;std::istream&amp; 作为输入参数。然后,您可以在调用函数时选择使用任何std::ostreamstd::istream。您可能决定从文件中读取数据,或将数据写入文件。在main 中做出决定,并让课程不受该决定的影响。

例如,将Person::print() 更改为:

void print(std::ostream& out) const;

以及实现:

void Person::print(std::ostream& out) const

    out << endl << name << " " << phone;

将非成员函数print改为:

void print(vector<Person> &phone_book, std::ostream& out)

    for(int i=0; i < phone_book.size(); i++)
    
        phone_book[i].print(out);
        out << " ";
    

【讨论】:

第一个方法很好用,我忘记了我有一个用于打印的类函数!!!如果可以的话,我会更改参数,但他严格指定要维护他提供的参数 @BroBama,很遗憾有些导师没有关注这些细节。【参考方案2】:
cout << phone_book[i] << " ";

这条线没有意义。 phone_book 是 Persons 的向量,那么您如何期望 cout 打印整个人?!要解决此问题,您必须告诉它您希望它打印出 person 的哪个成员变量。不幸的是,以下代码不起作用:

cout << phone_book[i].name << " - " << phone_book[i].phone << endl;

因为成员变量namephone 已被设为private(它们不能在类本身之外访问)。幸运的是,您碰巧在 Person 类中已经有一个函数可以为您打印它:

void Person::print() const

    cout << endl << name << " " << phone;

如果你调用这个函数,它应该打印出这个人的名字和电话号码。要调用它,只需使用:

for(int i=0; i < phone_book.size(); i++)
    phone_book[i].print();

另一种方法是重载 &lt;&lt; 运算符 - 这基本上意味着重新定义在您的类上使用 &lt;&lt; 的含义。例如,您可以创建一个基于整数的新数据类型,但重载+ 运算符,使其减去而不是相加。我给你一些示例代码:

class myVar

    public:
        int value;

    myVar operator+(myVar varToSubtract)
    
        return value - varToSubtract;
    
;

同样的原则也适用于&lt;&lt; - 我相信你可以自己弄清楚其余的 :)

【讨论】:

以上是关于python print不输出怎么回事的主要内容,如果未能解决你的问题,请参考以下文章

python print 如何在输出中插入变量

python print不输出内容?

体重减150×0.6+48用Python代码怎么写?

Python 颜色控制 \033[*** 代码 print输出\033为箭头符号,怎么解决?

python中print怎么输出变量

python 3 的return语句与print语句的用法 区别:?